1
|
import os
|
2
|
|
3
|
from quixote.publish import get_response
|
4
|
from quixote.form import Form, StringWidget, PasswordWidget, \
|
5
|
RadiobuttonsWidget, SingleSelectWidget, MultipleSelectWidget, \
|
6
|
CheckboxWidget, FileWidget
|
7
|
|
8
|
class ApacheForm(Form):
|
9
|
def __init__(self, server_name = None):
|
10
|
Form.__init__(self)
|
11
|
#get_response().set_charset('utf-8')
|
12
|
self.server_name = server_name
|
13
|
|
14
|
def handle(self):
|
15
|
if (self.server_name is None):
|
16
|
self.add_string(name = 'proxy_name', title = 'Nom du serveur proxy', required = True)
|
17
|
else:
|
18
|
self.add_string(name = 'proxy_name', title = 'Nom du serveur proxy', value = self.server_name, required = True)
|
19
|
self.add_string(name = 'proxy_ip', title = 'Adresse IP du serveur proxy', required = True)
|
20
|
self.add_string(name = 'proxy_port', title = 'Port du serveur proxy', value = '80', required = True)
|
21
|
#self.add_string(name = 'proxy_admin', title = 'Administrateur du serveur proxy', required = False)
|
22
|
self.add_string(name = 'site_address', title = 'Adresse du site', value = 'http://', required = True)
|
23
|
self.add_string(name = 'proxy_directory', title = 'R?pertoire du proxy', value = '/', required = True)
|
24
|
self.add_submit('submit')
|
25
|
if not self.is_submitted() or self.has_errors():
|
26
|
return self.render()
|
27
|
return self.success()
|
28
|
|
29
|
def success [html] (self):
|
30
|
values = {}
|
31
|
#get_response().set_charset('utf-8')
|
32
|
for widget in self.get_all_widgets():
|
33
|
values[widget.get_name()] = widget.parse()
|
34
|
|
35
|
#"""<p>name : """
|
36
|
#name
|
37
|
#"""</p><p>value : """
|
38
|
#repr(value)
|
39
|
#"""</p>"""
|
40
|
|
41
|
try:
|
42
|
self.write_apache_conf(values)
|
43
|
#self.write_apache_conf(values['proxy_name'],
|
44
|
# values['proxy_ip'],
|
45
|
# values['proxy_port'],
|
46
|
# values['site_address'],
|
47
|
# values['proxy_directory'])
|
48
|
except IOError:
|
49
|
"""Failed writing apache configuration"""
|
50
|
else:
|
51
|
"""Apache configuration written"""
|
52
|
|
53
|
#def write_apache_conf(self, proxy_name, proxy_ip, proxy_port, site_address, proxy_directory):
|
54
|
def write_apache_conf(self, values):
|
55
|
"""Caller must catch IOError exceptions"""
|
56
|
#print ip + " - " + name + " - " + directory
|
57
|
vhost_dir = '/var/lib/larpe'
|
58
|
conf_dir = '%s/%s' % (vhost_dir, values['proxy_name'])
|
59
|
if not os.path.exists(conf_dir):
|
60
|
os.makedirs(conf_dir, mode = 0755)
|
61
|
if not os.path.isdir(conf_dir):
|
62
|
raise IOError()
|
63
|
conf_file = open('%s/%s' % (conf_dir, 'apache2-vhost.conf'), 'w')
|
64
|
|
65
|
try:
|
66
|
conf_file.write("""NameVirtualHost %(proxy_ip)s:%(proxy_port)s
|
67
|
<VirtualHost %(proxy_ip)s:%(proxy_port)s>
|
68
|
|
69
|
ServerName %(proxy_name)s
|
70
|
# ServerAdmin admin@test.org
|
71
|
|
72
|
# LoadFile /usr/lib/libxml2.so.2
|
73
|
SetOutputFilter proxy-html
|
74
|
|
75
|
<Location %(proxy_directory)s>
|
76
|
ProxyPass %(site_address)s
|
77
|
ProxyPassReverse %(site_address)s
|
78
|
ProxyHTMLURLMap / %(proxy_directory)s
|
79
|
ProxyHTMLURLMap %(site_address)s %(proxy_directory)s
|
80
|
</Location>
|
81
|
|
82
|
</VirtualHost>
|
83
|
""" % values)
|
84
|
|
85
|
finally:
|
86
|
conf_file.close()
|
87
|
|
88
|
|