annotate twisted/plugins/libervia_server.py @ 1406:cffa3ae4d0aa

pages (blog/view): move URL friendly code to backend tools: - the code to render an URL friendly is now in `sat.tools.common.regex` - user friendly extra text is now only displayed when no `-` is found in ID. This is a temporary transition behaviour because new blog items IDs are now user friendly by default, and thus extra text is not wanted anymore. For older IDs it is still needed though, and the presence of `-` is used to guess when an ID is user friendly or not.
author Goffi <goffi@goffi.org>
date Fri, 16 Apr 2021 18:44:49 +0200
parents 388558a30cf8
children 1f66a363f1a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1239
f511f8fbbf8a fixed shebangs
Goffi <goffi@goffi.org>
parents: 1221
diff changeset
1 #!/usr/bin/env python3
f511f8fbbf8a fixed shebangs
Goffi <goffi@goffi.org>
parents: 1221
diff changeset
2
1397
ed037818d6de core (constants): renaming following global project renaming
Goffi <goffi@goffi.org>
parents: 1378
diff changeset
3 # Libervia Web: Libervia web frontend
ed037818d6de core (constants): renaming following global project renaming
Goffi <goffi@goffi.org>
parents: 1378
diff changeset
4 # Copyright (C) 2013-2021 Jérôme Poisson <goffi@goffi.org>
818
f8a7a046ff9c copyright update
Goffi <goffi@goffi.org>
parents: 817
diff changeset
5 # 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
6 # 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
7
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
8 # 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
9 # 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
10 # 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
11 # (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
12
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
13 # 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
14 # 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
15 # 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
16 # 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
17
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
18 # 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
19 # 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
20
437
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
21 from twisted.internet import defer
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
22
437
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
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
28
437
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
29 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
30 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
31 except ImportError:
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
32 pass
fa3b65b68971 server side: ipdb is used instead of pdb in debug mode
Goffi <goffi@goffi.org>
parents: 433
diff changeset
33
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
34 import os.path
856
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
35 import libervia
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
36 import sat
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
37
449
981ed669d3b3 /!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents: 446
diff changeset
38 from libervia.server.constants import Const as C
470
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
39
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
40 from sat.core.i18n import _
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
41 from sat.tools import config
438
582c435dab6b server side: new log system is used
Goffi <goffi@goffi.org>
parents: 437
diff changeset
42
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
43 from zope.interface import implementer
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
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.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
46 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
47 from twisted.application.service import IServiceMaker
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
48 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
49
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
50
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
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
53
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
54 sys.stderr.write(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
55 """sat module version ({sat_version}) and {current_app} version ({current_version}) mismatch
856
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
56
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
57 sat module is located at {sat_path}
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
58 libervia module is located at {libervia_path}
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
59
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
60 Please be sure to have the same version running
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
61 """.format(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
62 sat_version=sat.__version__,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
63 current_app=C.APP_NAME,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
64 current_version=libervia.__version__,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
65 sat_path=os.path.dirname(sat.__file__),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
66 libervia_path=os.path.dirname(libervia.__file__),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
67 ).encode(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
68 "utf-8"
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
69 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
70 )
856
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
71 sys.stderr.flush()
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
72 # we call os._exit to avoid help to be printed by twisted
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
73 import os
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
74
856
fd438e51bda8 server: version check:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
75 os._exit(1)
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
76
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 coerceConnectionType(value): # called from Libervia.OPT_PARAMETERS
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
79 assert isinstance(value, str)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
80 allowed_values = ("http", "https", "both")
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
81 if value not in allowed_values:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
82 raise ValueError(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
83 "%(given)s not in %(expected)s"
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
84 % {"given": value, "expected": str(allowed_values)}
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
85 )
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
86 return value
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
87
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
88
870
a05f3b24f2ec server: use C.bool for bool options instead of simple int
Goffi <goffi@goffi.org>
parents: 863
diff changeset
89 def coerceBool(value):
a05f3b24f2ec server: use C.bool for bool options instead of simple int
Goffi <goffi@goffi.org>
parents: 863
diff changeset
90 return C.bool(value)
a05f3b24f2ec server: use C.bool for bool options instead of simple int
Goffi <goffi@goffi.org>
parents: 863
diff changeset
91
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
92
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
93 def coerceUnicode(value):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
94 assert isinstance(value, str)
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 # 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
96 # 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
97 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
98
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
99
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
100 DATA_DIR_DEFAULT = ''
1363
c3dac1e11341 server: options can now be specified with environment variables:
Goffi <goffi@goffi.org>
parents: 1359
diff changeset
101 # prefix used for environment variables
c3dac1e11341 server: options can now be specified with environment variables:
Goffi <goffi@goffi.org>
parents: 1359
diff changeset
102 ENV_PREFIX = "LIBERVIA_"
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
103 # 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
104 # see https://twistedmatrix.com/documents/current/api/twisted.python.usage.Options.html
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
105 OPT_PARAMETERS_BOTH = [['connection_type', 't', 'https', _("'http', 'https' or 'both' "
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
106 "(to launch both servers)."),
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
107 coerceConnectionType],
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
108 ['port', 'p', 8080,
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
109 _('The port number to listen HTTP on.'), int],
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
110 ['port_https', 's', 8443,
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
111 _('The port number to listen HTTPS on.'), int],
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
112 ['port_https_ext', 'e', 0, _('The external port number used for '
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
113 'HTTPS (0 means port_https value).'), int],
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
114 ['tls_private_key', '', '', _('TLS certificate private key (PEM '
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
115 'format)'), coerceUnicode],
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
116 ['tls_certificate', 'c', 'libervia.pem', _('TLS public '
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
117 'certificate or private key and public certificate combined '
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
118 '(PEM format)'), coerceUnicode],
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
119 ['tls_chain', '', '', _('TLS certificate intermediate chain (PEM '
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
120 'format)'), coerceUnicode],
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
121 ['redirect_to_https', 'r', True, _('Automatically redirect from '
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
122 'HTTP to HTTPS.'), coerceBool],
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
123 ['security_warning', 'w', True, _('Warn user that he is about to '
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
124 'connect on HTTP.'), coerceBool],
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
125 ['passphrase', 'k', '', (_("Passphrase for the SàT profile "
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
126 "named '%s'") % C.SERVICE_PROFILE),
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
127 coerceUnicode],
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
128 ['allow_registration', '', True, _('Allow user to register new '
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
129 'account'), coerceBool],
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
130 ['base_url_ext', '', '',
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
131 _('The external URL to use as base URL'),
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
132 coerceUnicode],
1367
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1366
diff changeset
133 ['bridge-retries', '', 10,
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1366
diff changeset
134 _('Number of tries to connect to bridge before giving up'), int],
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
135 ]
1366
f61e95438050 server: don't encode options help messages, this is not needed anymore since we moved to Python 3
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
136
857
e17b15f1f260 server: added url_redirections_dict and url_redirections_profile in options
Goffi <goffi@goffi.org>
parents: 856
diff changeset
137 # 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
138 OPT_PARAMETERS_CFG = [
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
139 ["empty_password_allowed_warning_dangerous_list", None, "", None],
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1125
diff changeset
140 ["vhosts_dict", None, {}, None],
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
141 ["url_redirections_dict", None, {}, None],
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
142 ["menu_json", None, {'': C.DEFAULT_MENU}, None],
1359
2da573bf3f8b server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents: 1275
diff changeset
143 ["menu_extra_json", None, {}, None],
1378
e3e303a30a74 pages (tickets): renamed "tickets" to "lists":
Goffi <goffi@goffi.org>
parents: 1368
diff changeset
144 ["lists_directory_json", None, None, None],
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
145 ["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
146 ]
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
147
1364
df40708c4c76 server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents: 1363
diff changeset
148 # Flags are in command line only
df40708c4c76 server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents: 1363
diff changeset
149 OPT_FLAGS = [
1368
9624c2a89a92 server: new `--build-only` flag:
Goffi <goffi@goffi.org>
parents: 1367
diff changeset
150 ['build-only', 'B', _("Only build website, don't run the server")],
1364
df40708c4c76 server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents: 1363
diff changeset
151 ['dev-mode', 'D', _('Developer mode, automatically reload modified pages')],
df40708c4c76 server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents: 1363
diff changeset
152 ]
df40708c4c76 server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents: 1363
diff changeset
153
df40708c4c76 server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents: 1363
diff changeset
154
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
155
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
156 def initialise(options):
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
157 """Method to initialise global modules"""
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
158 # 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
159 # so here is the best place.
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
160 from sat.core import log_config
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
161
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
162 log_config.satConfigure(C.LOG_BACKEND_TWISTED, C, backend_data=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
163
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
164
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
165 class Options(usage.Options):
415
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
166 # 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
167 optParameters = OPT_PARAMETERS_BOTH
1364
df40708c4c76 server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents: 1363
diff changeset
168 optFlags = OPT_FLAGS
415
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
169
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
170 def __init__(self):
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
171 """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
172
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
173 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
174 - hard-coded default values
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
175 - values from SàT configuration files
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
176 - 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
177 """
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
178 # 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
179 # there's no good way to know
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
180 # 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
181 # on the command line.
470
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
182
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
183 # FIXME: must be refactored + code can be factorised with backend
1402
388558a30cf8 core (config): use component (i.e. "web") as config section
Goffi <goffi@goffi.org>
parents: 1400
diff changeset
184 config_parser = config.parseMainConf()
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
185 self.handleDeprecated(config_parser)
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
186 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
187 name = param[0]
1363
c3dac1e11341 server: options can now be specified with environment variables:
Goffi <goffi@goffi.org>
parents: 1359
diff changeset
188 env_name = f"{ENV_PREFIX}{name.upper()}"
415
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
189 try:
1363
c3dac1e11341 server: options can now be specified with environment variables:
Goffi <goffi@goffi.org>
parents: 1359
diff changeset
190 value = os.getenv(env_name)
c3dac1e11341 server: options can now be specified with environment variables:
Goffi <goffi@goffi.org>
parents: 1359
diff changeset
191 if value is None:
c3dac1e11341 server: options can now be specified with environment variables:
Goffi <goffi@goffi.org>
parents: 1359
diff changeset
192 value = config.getConfig(
c3dac1e11341 server: options can now be specified with environment variables:
Goffi <goffi@goffi.org>
parents: 1359
diff changeset
193 config_parser, C.CONFIG_SECTION, name, Exception)
470
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
194 try:
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
195 param[2] = param[4](value)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
196 except IndexError: # the coerce method is optional
470
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 466
diff changeset
197 param[2] = value
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
198 except (configparser.NoSectionError, configparser.NoOptionError):
415
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
199 pass
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 360
diff changeset
200 usage.Options.__init__(self)
817
cf1812a4445e server: fixed empty_password_allowed_warning_dangerous_list option
Goffi <goffi@goffi.org>
parents: 814
diff changeset
201 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
202 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
203
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
204 def handleDeprecated(self, config_parser):
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
205 """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
206
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
207 param config_parser(ConfigParser): read ConfigParser instance for sat.conf
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
208 """
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
209 replacements = (("ssl_certificate", "tls_certificate"),)
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
210 for old, new in replacements:
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
211 try:
1275
334d044f2713 server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents: 1239
diff changeset
212 value = config.getConfig(config_parser, C.CONFIG_SECTION, old, Exception)
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
213 except (configparser.NoSectionError, configparser.NoOptionError):
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
214 pass
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
215 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
216 print(("\n/!\\ Use of {old} is deprecated, please use {new} instead\n"
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
217 .format(old=old, new=new)))
1275
334d044f2713 server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents: 1239
diff changeset
218 config_parser.set(C.CONFIG_SECTION, new, value)
811
b1826adbeeff server: tls_certificate option:
Goffi <goffi@goffi.org>
parents: 810
diff changeset
219
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
220
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
221 @implementer(IServiceMaker, IPlugin)
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
222 class LiberviaMaker(object):
449
981ed669d3b3 /!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents: 446
diff changeset
223
512
750db9ff8525 server side: launching script improvments:
Goffi <goffi@goffi.org>
parents: 474
diff changeset
224 tapname = C.APP_NAME_FILE
1397
ed037818d6de core (constants): renaming following global project renaming
Goffi <goffi@goffi.org>
parents: 1378
diff changeset
225 description = _("The web frontend of Libervia")
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
226 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
227
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
228 def makeService(self, options):
1135
4426c328eb83 core: fixed reactor crash by installing reactor only in makeService
Goffi <goffi@goffi.org>
parents: 1132
diff changeset
229 from twisted.internet import gireactor
4426c328eb83 core: fixed reactor crash by installing reactor only in makeService
Goffi <goffi@goffi.org>
parents: 1132
diff changeset
230 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
231 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
232 # 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
233 # 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
234 # 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
235 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
236 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
237 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
238 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
239 if coerce_cb == coerceUnicode:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
240 if not isinstance(options[opt[0]], str):
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
241 print(f"FIXME: {opt[0]} is not unicode")
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1199
diff changeset
242 options[opt[0]] = options[opt[0]].decode("utf-8")
514
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
243 initialise(options.parent)
530c88c1deee server_side: plugin refactoring:
Goffi <goffi@goffi.org>
parents: 512
diff changeset
244 from libervia.server import server
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1081
diff changeset
245
810
3905bc24eb17 server: proper options handling
Goffi <goffi@goffi.org>
parents: 712
diff changeset
246 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
247
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
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
249 # 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
250 serviceMaker = LiberviaMaker()