annotate src/twisted/plugins/libervia_server.py @ 979:1d558dfb32ca

server: pages redirection: when using a redirection dict, a new "page" key can be used to redirect to a named page. "args" can be added to specified named arguments to set (will be put in request.args, in addition to existing ones). The redirection is done dynamically, during the request workflow.
author Goffi <goffi@goffi.org>
date Sun, 12 Nov 2017 12:56:46 +0100
parents fd4eae654182
children 6daa59d44ee2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
1 #!/usr/bin/python
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
3
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
4 # Libervia: a Salut à Toi frontend
964
fd4eae654182 misc: date update (yes it's a bit late :p )
Goffi <goffi@goffi.org>
parents: 883
diff changeset
5 # Copyright (C) 2013-2017 Jérôme Poisson <goffi@goffi.org>
818
f8a7a046ff9c copyright update
Goffi <goffi@goffi.org>
parents: 817
diff changeset
6 # Copyright (C) 2013-2016 Adrien Cossa <souliane@mailoo.org>
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
7 # Copyright (C) 2013 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
8
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
9 # This program is free software: you can redistribute it and/or modify
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
10 # it under the terms of the GNU Affero General Public License as published by
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
11 # the Free Software Foundation, either version 3 of the License, or
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
12 # (at your option) any later version.
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
13
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
14 # This program is distributed in the hope that it will be useful,
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
17 # GNU Affero General Public License for more details.
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
18
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
19 # You should have received a copy of the GNU Affero General Public License
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
20 # along with this program. If not, see <http://www.gnu.org/licenses/>.
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
21
437
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
22 from twisted.internet import defer
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
23 if defer.Deferred.debug:
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
24 # if we are in debug mode, we want to use ipdb instead of pdb
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
25 try:
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
26 import ipdb
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
27 import pdb
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
28 pdb.set_trace = ipdb.set_trace
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
29 pdb.post_mortem = ipdb.post_mortem
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
30 except ImportError:
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
31 pass
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
32
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
33 import os.path
856
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
34 import libervia
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
35 import sat
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
36
449
981ed669d3b3 /!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents: 446
diff changeset
37 from libervia.server.constants import Const as C
470
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
38
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
39 from sat.core.i18n import _
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
40 from sat.tools import config
438
582c435dab6b server side: new log system is used
Goffi <goffi@goffi.org>
parents: 437
diff changeset
41
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
42 from zope.interface import implements
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
43
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
44 from twisted.python import usage
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
45 from twisted.plugin import IPlugin
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
46 from twisted.application.service import IServiceMaker
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
47 import ConfigParser
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
48
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
49
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
50 CONFIG_SECTION = C.APP_NAME.lower()
856
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
51 if libervia.__version__ != sat.__version__:
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
52 import sys
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
53 sys.stderr.write(u"""sat module version ({sat_version}) and {current_app} version ({current_version}) mismatch
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
54
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
55 sat module is located at {sat_path}
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
56 libervia module is located at {libervia_path}
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
57
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
58 Please be sure to have the same version running
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
59 """.format(
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
60 sat_version = sat.__version__,
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
61 current_app = C.APP_NAME,
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
62 current_version = libervia.__version__,
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
63 sat_path = os.path.dirname(sat.__file__),
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
64 libervia_path = os.path.dirname(libervia.__file__),
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
65 ).encode('utf-8'))
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
66 sys.stderr.flush()
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
67 # we call os._exit to avoid help to be printed by twisted
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
68 import os
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
69 os._exit(1)
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
70
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
71
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
72 def coerceConnectionType(value): # called from Libervia.OPT_PARAMETERS
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
73 allowed_values = ('http', 'https', 'both')
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
74 if value not in allowed_values:
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
75 raise ValueError("%(given)s not in %(expected)s" % {'given': value, 'expected': str(allowed_values)})
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
76 return value
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
77
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
78 def coerceDataDir(value): # called from Libervia.OPT_PARAMETERS
863
20fbca3c949a server: fixed bad encoding handling in options parsing
Goffi <goffi@goffi.org>
parents: 857
diff changeset
79 if isinstance(value, unicode):
20fbca3c949a server: fixed bad encoding handling in options parsing
Goffi <goffi@goffi.org>
parents: 857
diff changeset
80 # XXX: if value comes from sat.conf, it's unicode,
20fbca3c949a server: fixed bad encoding handling in options parsing
Goffi <goffi@goffi.org>
parents: 857
diff changeset
81 # and we need byte str here (for twisted)
20fbca3c949a server: fixed bad encoding handling in options parsing
Goffi <goffi@goffi.org>
parents: 857
diff changeset
82 value = value.encode('utf-8')
20fbca3c949a server: fixed bad encoding handling in options parsing
Goffi <goffi@goffi.org>
parents: 857
diff changeset
83 value = value.encode('utf-8')
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
84 html = os.path.join(value, C.HTML_DIR)
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 570
diff changeset
85 if not os.path.isfile(os.path.join(html, C.LIBERVIA_MAIN_PAGE)):
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
86 raise ValueError("%s is not a Libervia's browser HTML directory" % os.path.realpath(html))
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 570
diff changeset
87 themes_dir = os.path.join(value, C.THEMES_DIR)
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 704
diff changeset
88 if not os.path.isfile(os.path.join(themes_dir, 'default/styles/blog.css')):
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 570
diff changeset
89 raise ValueError("%s is not a Libervia's server data directory" % os.path.realpath(themes_dir))
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
90 return value
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
91
870
a05f3b24f2ec server: use C.bool for bool options instead of simple int
Goffi <goffi@goffi.org>
parents: 863
diff changeset
92 def coerceBool(value):
a05f3b24f2ec server: use C.bool for bool options instead of simple int
Goffi <goffi@goffi.org>
parents: 863
diff changeset
93 return C.bool(value)
a05f3b24f2ec server: use C.bool for bool options instead of simple int
Goffi <goffi@goffi.org>
parents: 863
diff changeset
94
883
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
95 def coerceUnicode(value):
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
96 # XXX: we use this method to check which value to convert to Unicode
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
97 # but we don't do the conversion here as Twisted expect str
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
98 return value
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
99
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
100 DATA_DIR_DEFAULT = ''
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
101 OPT_PARAMETERS_BOTH = [['connection_type', 't', 'https', _(u"'http', 'https' or 'both' (to launch both servers).").encode('utf-8'), coerceConnectionType],
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
102 ['port', 'p', 8080, _(u'The port number to listen HTTP on.').encode('utf-8'), int],
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
103 ['port_https', 's', 8443, _(u'The port number to listen HTTPS on.').encode('utf-8'), int],
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
104 ['port_https_ext', 'e', 0, _(u'The external port number used for HTTPS (0 means port_https value).').encode('utf-8'), int],
883
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
105 ['tls_private_key', '', '', _(u'TLS certificate private key (PEM format)').encode('utf-8'), coerceUnicode],
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
106 ['tls_certificate', 'c', 'libervia.pem', _(u'TLS public certificate or private key and public certificate combined (PEM format)').encode('utf-8'), coerceUnicode],
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
107 ['tls_chain', '', '', _(u'TLS certificate intermediate chain (PEM format)').encode('utf-8'), coerceUnicode],
870
a05f3b24f2ec server: use C.bool for bool options instead of simple int
Goffi <goffi@goffi.org>
parents: 863
diff changeset
108 ['redirect_to_https', 'r', True, _(u'Automatically redirect from HTTP to HTTPS.').encode('utf-8'), coerceBool],
a05f3b24f2ec server: use C.bool for bool options instead of simple int
Goffi <goffi@goffi.org>
parents: 863
diff changeset
109 ['security_warning', 'w', True, _(u'Warn user that he is about to connect on HTTP.').encode('utf-8'), coerceBool],
883
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
110 ['passphrase', 'k', '', (_(u"Passphrase for the SàT profile named '%s'") % C.SERVICE_PROFILE).encode('utf-8'), coerceUnicode],
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
111 ['data_dir', 'd', DATA_DIR_DEFAULT, _(u'Data directory for Libervia').encode('utf-8'), coerceDataDir],
871
54f6c5b86a87 server, browser: new "allow_registration" option to enable/disable new account registration through Liberia interface
Goffi <goffi@goffi.org>
parents: 870
diff changeset
112 ['allow_registration', '', True, _(u'Allow user to register new account').encode('utf-8'), coerceBool],
883
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
113 ['base_url_ext', '', '', _(u'The external URL to use as base URL').encode('utf-8'), coerceUnicode],
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
114 ] # options which are in sat.conf and on command line, see https://twistedmatrix.com/documents/current/api/twisted.python.usage.Options.html
857
e17b15f1f260 server: added url_redirections_dict and url_redirections_profile in options
Goffi <goffi@goffi.org>
parents: 856
diff changeset
115 # Options which are in sat.conf only
e17b15f1f260 server: added url_redirections_dict and url_redirections_profile in options
Goffi <goffi@goffi.org>
parents: 856
diff changeset
116 OPT_PARAMETERS_CFG = [
e17b15f1f260 server: added url_redirections_dict and url_redirections_profile in options
Goffi <goffi@goffi.org>
parents: 856
diff changeset
117 ['empty_password_allowed_warning_dangerous_list', None, '', None],
e17b15f1f260 server: added url_redirections_dict and url_redirections_profile in options
Goffi <goffi@goffi.org>
parents: 856
diff changeset
118 ['url_redirections_profile', None, '', None],
e17b15f1f260 server: added url_redirections_dict and url_redirections_profile in options
Goffi <goffi@goffi.org>
parents: 856
diff changeset
119 ['url_redirections_dict', None, {}, None],
e17b15f1f260 server: added url_redirections_dict and url_redirections_profile in options
Goffi <goffi@goffi.org>
parents: 856
diff changeset
120 ]
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
121
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
122 def initialise(options):
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
123 """Method to initialise global modules"""
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
124 from twisted.internet import glib2reactor
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
125 glib2reactor.install()
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
126 # XXX: We need to configure logs before any log method is used, so here is the best place.
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
127 from sat.core import log_config
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
128 log_config.satConfigure(C.LOG_BACKEND_TWISTED, C, backend_data=options)
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
129 from libervia.server import server
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
130 # we can't import this file from libervia.server.server because it's not a true module
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
131 # (there is no __init__.py file, as required by twistd plugin system), so we set the
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
132 # global values from here
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
133 server.DATA_DIR_DEFAULT = DATA_DIR_DEFAULT
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
134 server.OPT_PARAMETERS_BOTH = OPT_PARAMETERS_BOTH
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
135 server.OPT_PARAMETERS_CFG = OPT_PARAMETERS_CFG
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
136 server.coerceDataDir = coerceDataDir
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
137
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
138
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
139 class Options(usage.Options):
415
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
140 # optArgs is not really useful in our case, we need more than a flag
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
141 optParameters = OPT_PARAMETERS_BOTH
415
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
142
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
143 def __init__(self):
470
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
144 """Read SàT configuration file in order to overwrite the hard-coded default values.
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
145
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
146 Priority for the usage of the values is (from lowest to highest):
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
147 - hard-coded default values
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
148 - values from SàT configuration files
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
149 - values passed on the command line
415
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
150 """
470
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
151 # If we do it the reading later: after the command line options have been parsed, there's no good way to know
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
152 # if the options values are the hard-coded ones or if they have been passed on the command line.
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
153
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
154 # FIXME: must be refactored + code can be factorised with backend
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
155 config_parser = ConfigParser.SafeConfigParser()
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
156 config_parser.read(C.CONFIG_FILES)
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
157 self.handleDeprecated(config_parser)
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
158 for param in self.optParameters + OPT_PARAMETERS_CFG:
432
8ecc5a7062e4 browser and server sides: fixes module import + use enumerate instead of xrange
souliane <souliane@mailoo.org>
parents: 421
diff changeset
159 name = param[0]
415
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
160 try:
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
161 value = config.getConfig(config_parser, CONFIG_SECTION, name, Exception)
883
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
162 if isinstance(value, unicode):
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
163 value = value.encode('utf-8')
470
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
164 try:
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
165 param[2] = param[4](value)
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
166 except IndexError: # the coerce method is optional
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
167 param[2] = value
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
168 except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
415
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
169 pass
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
170 usage.Options.__init__(self)
817
cf1812a4445e server: fixed empty_password_allowed_warning_dangerous_list option
Goffi <goffi@goffi.org>
parents: 814
diff changeset
171 for opt_data in OPT_PARAMETERS_CFG:
cf1812a4445e server: fixed empty_password_allowed_warning_dangerous_list option
Goffi <goffi@goffi.org>
parents: 814
diff changeset
172 self[opt_data[0]] = opt_data[2]
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
173
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
174 def handleDeprecated(self, config_parser):
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
175 """display warning and/or change option when a deprecated option if found
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
176
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
177 param config_parser(ConfigParser): read ConfigParser instance for sat.conf
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
178 """
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
179 replacements = (('ssl_certificate', 'tls_certificate'),)
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
180 for old, new in replacements:
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
181 try:
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
182 value = config.getConfig(config_parser, CONFIG_SECTION, old, Exception)
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
183 except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
184 pass
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
185 else:
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
186 print u"\n/!\\ Use of {old} is deprecated, please use {new} instead\n".format(old=old, new=new)
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
187 config_parser.set(CONFIG_SECTION, new, value)
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
188
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
189
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
190 class LiberviaMaker(object):
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
191 implements(IServiceMaker, IPlugin)
449
981ed669d3b3 /!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents: 446
diff changeset
192
512
750db9ff8525 server side: launching script improvments:
Goffi <goffi@goffi.org>
parents: 474
diff changeset
193 tapname = C.APP_NAME_FILE
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
194 description = _(u'The web frontend of Salut à Toi')
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
195 options = Options
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
196
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
197 def makeService(self, options):
883
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
198 for opt in OPT_PARAMETERS_BOTH:
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
199 # FIXME: that's a ugly way to get unicode in Libervia
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
200 # from command line or sat.conf
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
201 # we should move to argparse and handle options this properly
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
202 try:
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
203 coerce_cb = opt[4]
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
204 except IndexError:
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
205 continue
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
206 if coerce_cb == coerceUnicode:
74be6217d913 server (options): Q&D trick to have unicode value from command line arguments and sat.conf
Goffi <goffi@goffi.org>
parents: 881
diff changeset
207 options[opt[0]] = options[opt[0]].decode('utf-8')
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
208 initialise(options.parent)
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
209 from libervia.server import server
810
3905bc24eb17 server: proper options handling
Goffi <goffi@goffi.org>
parents: 712
diff changeset
210 return server.Libervia(options)
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
211
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
212
421
39b07289ff42 server_side: added parameter port_https_ext (external port for HTTPS, used for example for the redirection)
souliane <souliane@mailoo.org>
parents: 417
diff changeset
213 # affectation to some variable is necessary for twisted introspection to work
331
06a48d805547 server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
214 serviceMaker = LiberviaMaker()