Mercurial > libervia-web
annotate twisted/plugins/libervia_server.py @ 1203:251eba911d4d
server (websockets): fixed websocket handling on HTTPS connections:
Original request used to retrieve a page was stored on dynamic pages, but after the end of
it, the channel was deleted, resulting in a isSecure() always returning False, and
troubles in chain leading to the the use of the wrong session object. This patch fixes
this by reworking the way original request is used, and creating a new wrapping class
allowing to keep an API similar to iweb.IRequest, with data coming from both the original
request and the websocket request.
fix 327
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 14 Jul 2019 14:45:51 +0200 |
parents | b300eaec53b6 |
children | b2d067339de3 |
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 |
1054 | 5 # Copyright (C) 2013-2018 Jérôme Poisson <goffi@goffi.org> |
818 | 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 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
23 |
437
fa3b65b68971
server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents:
433
diff
changeset
|
24 if defer.Deferred.debug: |
fa3b65b68971
server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents:
433
diff
changeset
|
25 # 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
|
26 try: |
fa3b65b68971
server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents:
433
diff
changeset
|
27 import ipdb |
fa3b65b68971
server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents:
433
diff
changeset
|
28 import pdb |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
29 |
437
fa3b65b68971
server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents:
433
diff
changeset
|
30 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
|
31 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
|
32 except ImportError: |
fa3b65b68971
server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents:
433
diff
changeset
|
33 pass |
fa3b65b68971
server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents:
433
diff
changeset
|
34 |
514 | 35 import os.path |
856 | 36 import libervia |
37 import sat | |
514 | 38 |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
446
diff
changeset
|
39 from libervia.server.constants import Const as C |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
40 |
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
41 from sat.core.i18n import _ |
811 | 42 from sat.tools import config |
438
582c435dab6b
server side: new log system is used
Goffi <goffi@goffi.org>
parents:
437
diff
changeset
|
43 |
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
|
44 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
|
45 |
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.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
|
47 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
|
48 from twisted.application.service import IServiceMaker |
811 | 49 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
|
50 |
811 | 51 |
52 CONFIG_SECTION = C.APP_NAME.lower() | |
856 | 53 if libervia.__version__ != sat.__version__: |
54 import sys | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
55 |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
56 sys.stderr.write( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
57 u"""sat module version ({sat_version}) and {current_app} version ({current_version}) mismatch |
856 | 58 |
59 sat module is located at {sat_path} | |
60 libervia module is located at {libervia_path} | |
61 | |
62 Please be sure to have the same version running | |
63 """.format( | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
64 sat_version=sat.__version__, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
65 current_app=C.APP_NAME, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
66 current_version=libervia.__version__, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
67 sat_path=os.path.dirname(sat.__file__), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
68 libervia_path=os.path.dirname(libervia.__file__), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
69 ).encode( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
70 "utf-8" |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
71 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
72 ) |
856 | 73 sys.stderr.flush() |
74 # we call os._exit to avoid help to be printed by twisted | |
75 import os | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
76 |
856 | 77 os._exit(1) |
514 | 78 |
79 | |
80 def coerceConnectionType(value): # called from Libervia.OPT_PARAMETERS | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
81 allowed_values = ("http", "https", "both") |
514 | 82 if value not in allowed_values: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
83 raise ValueError( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
84 "%(given)s not in %(expected)s" |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
85 % {"given": value, "expected": str(allowed_values)} |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
86 ) |
514 | 87 return value |
88 | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
89 |
514 | 90 def coerceDataDir(value): # called from Libervia.OPT_PARAMETERS |
1124
28e3eb3bb217
files reorganisation and installation rework:
Goffi <goffi@goffi.org>
parents:
1117
diff
changeset
|
91 if not value: |
28e3eb3bb217
files reorganisation and installation rework:
Goffi <goffi@goffi.org>
parents:
1117
diff
changeset
|
92 # we ignore missing values |
28e3eb3bb217
files reorganisation and installation rework:
Goffi <goffi@goffi.org>
parents:
1117
diff
changeset
|
93 return u'' |
863
20fbca3c949a
server: fixed bad encoding handling in options parsing
Goffi <goffi@goffi.org>
parents:
857
diff
changeset
|
94 if isinstance(value, unicode): |
20fbca3c949a
server: fixed bad encoding handling in options parsing
Goffi <goffi@goffi.org>
parents:
857
diff
changeset
|
95 # 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
|
96 # and we need byte str here (for twisted) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
97 value = value.encode("utf-8") |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
98 value = value.encode("utf-8") |
514 | 99 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
|
100 if not os.path.isfile(os.path.join(html, C.LIBERVIA_MAIN_PAGE)): |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
101 raise ValueError( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
102 "%s is not a Libervia's browser HTML directory" % os.path.realpath(html) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
103 ) |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
570
diff
changeset
|
104 themes_dir = os.path.join(value, C.THEMES_DIR) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
105 if not os.path.isfile(os.path.join(themes_dir, "default/styles/blog.css")): |
1199
b300eaec53b6
server: don't raise error anymore if themes_dir is invalid or legacy blog can't be created:
Goffi <goffi@goffi.org>
parents:
1151
diff
changeset
|
106 # XXX: we just display a message, as themes_dir is only used by legacy blog |
b300eaec53b6
server: don't raise error anymore if themes_dir is invalid or legacy blog can't be created:
Goffi <goffi@goffi.org>
parents:
1151
diff
changeset
|
107 # which will be removed entirely in 0.8 |
b300eaec53b6
server: don't raise error anymore if themes_dir is invalid or legacy blog can't be created:
Goffi <goffi@goffi.org>
parents:
1151
diff
changeset
|
108 # TODO: remove entirely legacy blog and linked options |
b300eaec53b6
server: don't raise error anymore if themes_dir is invalid or legacy blog can't be created:
Goffi <goffi@goffi.org>
parents:
1151
diff
changeset
|
109 print "%s is not a Libervia's server data directory" % os.path.realpath( |
b300eaec53b6
server: don't raise error anymore if themes_dir is invalid or legacy blog can't be created:
Goffi <goffi@goffi.org>
parents:
1151
diff
changeset
|
110 themes_dir) |
514 | 111 return value |
112 | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
113 |
870
a05f3b24f2ec
server: use C.bool for bool options instead of simple int
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
114 def coerceBool(value): |
a05f3b24f2ec
server: use C.bool for bool options instead of simple int
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
115 return C.bool(value) |
a05f3b24f2ec
server: use C.bool for bool options instead of simple int
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
116 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
117 |
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
|
118 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
|
119 # 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
|
120 # 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
|
121 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
|
122 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
123 |
514 | 124 DATA_DIR_DEFAULT = '' |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
125 # options which are in sat.conf and on command line, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
126 # see https://twistedmatrix.com/documents/current/api/twisted.python.usage.Options.html |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
127 OPT_PARAMETERS_BOTH = [['connection_type', 't', 'https', _(u"'http', 'https' or 'both' " |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
128 "(to launch both servers).").encode('utf-8'), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
129 coerceConnectionType], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
130 ['port', 'p', 8080, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
131 _(u'The port number to listen HTTP on.').encode('utf-8'), int], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
132 ['port_https', 's', 8443, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
133 _(u'The port number to listen HTTPS on.').encode('utf-8'), int], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
134 ['port_https_ext', 'e', 0, _(u'The external port number used for ' |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
135 u'HTTPS (0 means port_https value).').encode('utf-8'), int], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
136 ['tls_private_key', '', '', _(u'TLS certificate private key (PEM ' |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
137 u'format)').encode('utf-8'), coerceUnicode], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
138 ['tls_certificate', 'c', 'libervia.pem', _(u'TLS public ' |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
139 u'certificate or private key and public certificate combined ' |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
140 u'(PEM format)').encode('utf-8'), coerceUnicode], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
141 ['tls_chain', '', '', _(u'TLS certificate intermediate chain (PEM ' |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
142 u'format)').encode('utf-8'), coerceUnicode], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
143 ['redirect_to_https', 'r', True, _(u'Automatically redirect from ' |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
144 u'HTTP to HTTPS.').encode('utf-8'), coerceBool], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
145 ['security_warning', 'w', True, _(u'Warn user that he is about to ' |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
146 u'connect on HTTP.').encode('utf-8'), coerceBool], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
147 ['passphrase', 'k', '', (_(u"Passphrase for the SàT profile " |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
148 u"named '%s'") % C.SERVICE_PROFILE).encode('utf-8'), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
149 coerceUnicode], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
150 ['data_dir', 'd', DATA_DIR_DEFAULT, _(u'Data directory for ' |
1124
28e3eb3bb217
files reorganisation and installation rework:
Goffi <goffi@goffi.org>
parents:
1117
diff
changeset
|
151 u'Libervia legacy').encode('utf-8'), coerceDataDir], |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
152 ['allow_registration', '', True, _(u'Allow user to register new ' |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
153 u'account').encode('utf-8'), coerceBool], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
154 ['base_url_ext', '', '', |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
155 _(u'The external URL to use as base URL').encode('utf-8'), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
156 coerceUnicode], |
1151
49ff1330c9d0
server: added "dev_mode" boolean option (not used yet but will be soon)
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
157 ['dev_mode', 'D', False, _(u'Developer mode, automatically reload' |
49ff1330c9d0
server: added "dev_mode" boolean option (not used yet but will be soon)
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
158 u'modified pages').encode('utf-8'), coerceBool], |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
159 ] |
857
e17b15f1f260
server: added url_redirections_dict and url_redirections_profile in options
Goffi <goffi@goffi.org>
parents:
856
diff
changeset
|
160 # 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
|
161 OPT_PARAMETERS_CFG = [ |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
162 ["empty_password_allowed_warning_dangerous_list", None, "", None], |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1125
diff
changeset
|
163 ["vhosts_dict", None, {}, None], |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
164 ["url_redirections_dict", None, {}, None], |
1132
0cafb79ced6d
server: use site names in _moveFirstLevelToDict to better distinguish values for default site at first level + better handling of default menu
Goffi <goffi@goffi.org>
parents:
1128
diff
changeset
|
165 ["menu_json", None, {u'': C.DEFAULT_MENU}, None], |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
166 ["tickets_trackers_json", None, None, None], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
167 ["mr_handlers_json", None, None, None], |
857
e17b15f1f260
server: added url_redirections_dict and url_redirections_profile in options
Goffi <goffi@goffi.org>
parents:
856
diff
changeset
|
168 ] |
514 | 169 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
170 |
514 | 171 def initialise(options): |
172 """Method to initialise global modules""" | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
173 # XXX: We need to configure logs before any log method is used, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
174 # so here is the best place. |
514 | 175 from sat.core import log_config |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
176 |
514 | 177 log_config.satConfigure(C.LOG_BACKEND_TWISTED, C, backend_data=options) |
178 from libervia.server import server | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
179 |
514 | 180 # we can't import this file from libervia.server.server because it's not a true module |
181 # (there is no __init__.py file, as required by twistd plugin system), so we set the | |
182 # global values from here | |
183 server.DATA_DIR_DEFAULT = DATA_DIR_DEFAULT | |
184 server.OPT_PARAMETERS_BOTH = OPT_PARAMETERS_BOTH | |
185 server.OPT_PARAMETERS_CFG = OPT_PARAMETERS_CFG | |
186 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
|
187 |
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
|
188 |
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 class Options(usage.Options): |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
360
diff
changeset
|
190 # optArgs is not really useful in our case, we need more than a flag |
514 | 191 optParameters = OPT_PARAMETERS_BOTH |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
360
diff
changeset
|
192 |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
360
diff
changeset
|
193 def __init__(self): |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
194 """Read SàT configuration file in order to overwrite the hard-coded default values |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
195 |
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
196 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
|
197 - hard-coded default values |
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
198 - values from SàT configuration files |
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
199 - 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
|
200 """ |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
201 # If we do it the reading later: after the command line options have been parsed, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
202 # there's no good way to know |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
203 # if the options values are the hard-coded ones or if they have been passed |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
204 # on the command line. |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
205 |
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
206 # FIXME: must be refactored + code can be factorised with backend |
811 | 207 config_parser = ConfigParser.SafeConfigParser() |
208 config_parser.read(C.CONFIG_FILES) | |
209 self.handleDeprecated(config_parser) | |
514 | 210 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
|
211 name = param[0] |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
360
diff
changeset
|
212 try: |
811 | 213 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
|
214 if isinstance(value, unicode): |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
215 value = value.encode("utf-8") |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
216 try: |
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
217 param[2] = param[4](value) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
218 except IndexError: # the coerce method is optional |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
219 param[2] = value |
811 | 220 except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
360
diff
changeset
|
221 pass |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
360
diff
changeset
|
222 usage.Options.__init__(self) |
817
cf1812a4445e
server: fixed empty_password_allowed_warning_dangerous_list option
Goffi <goffi@goffi.org>
parents:
814
diff
changeset
|
223 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
|
224 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
|
225 |
811 | 226 def handleDeprecated(self, config_parser): |
227 """display warning and/or change option when a deprecated option if found | |
228 | |
229 param config_parser(ConfigParser): read ConfigParser instance for sat.conf | |
230 """ | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
231 replacements = (("ssl_certificate", "tls_certificate"),) |
811 | 232 for old, new in replacements: |
233 try: | |
234 value = config.getConfig(config_parser, CONFIG_SECTION, old, Exception) | |
235 except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): | |
236 pass | |
237 else: | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
238 print(u"\n/!\\ Use of {old} is deprecated, please use {new} instead\n" |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
239 .format(old=old, new=new)) |
811 | 240 config_parser.set(CONFIG_SECTION, new, value) |
241 | |
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
|
242 |
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
|
243 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
|
244 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
|
245 |
512
750db9ff8525
server side: launching script improvments:
Goffi <goffi@goffi.org>
parents:
474
diff
changeset
|
246 tapname = C.APP_NAME_FILE |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
247 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
|
248 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
|
249 |
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
|
250 def makeService(self, options): |
1135
4426c328eb83
core: fixed reactor crash by installing reactor only in makeService
Goffi <goffi@goffi.org>
parents:
1132
diff
changeset
|
251 from twisted.internet import gireactor |
4426c328eb83
core: fixed reactor crash by installing reactor only in makeService
Goffi <goffi@goffi.org>
parents:
1132
diff
changeset
|
252 gireactor.install() |
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
|
253 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
|
254 # 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
|
255 # 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
|
256 # 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
|
257 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
|
258 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
|
259 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
|
260 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
|
261 if coerce_cb == coerceUnicode: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
262 options[opt[0]] = options[opt[0]].decode("utf-8") |
514 | 263 initialise(options.parent) |
264 from libervia.server import server | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1081
diff
changeset
|
265 |
810 | 266 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
|
267 |
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
|
268 |
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
|
269 # 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
|
270 serviceMaker = LiberviaMaker() |