Mercurial > libervia-web
annotate libervia/server/server.py @ 1466:cff720e26089
pages (blog/view): activate pagination when a single item is shown:
`previous_page_url` and `next_page_url` are set when `item_id` is used. For now, they are
both activated even if there is no item before or after, as it would request to make extra
request to check it. This may be improved in 0.9 by using internal cache.
fix 399
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 30 Sep 2021 17:04:22 +0200 |
parents | 87e48b6a1bbd |
children | d6062cccd4c0 |
rev | line source |
---|---|
1233 | 1 #!/usr/bin/env python3 |
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:
330
diff
changeset
|
2 |
1397
ed037818d6de
core (constants): renaming following global project renaming
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
3 # Libervia Web |
1396 | 4 # Copyright (C) 2011-2021 Jérôme Poisson <goffi@goffi.org> |
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:
330
diff
changeset
|
5 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
336
diff
changeset
|
6 # 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:
336
diff
changeset
|
7 # 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:
336
diff
changeset
|
8 # the Free Software Foundation, either version 3 of the License, or |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
336
diff
changeset
|
9 # (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:
330
diff
changeset
|
10 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
336
diff
changeset
|
11 # 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:
336
diff
changeset
|
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
336
diff
changeset
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
336
diff
changeset
|
14 # 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:
330
diff
changeset
|
15 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
336
diff
changeset
|
16 # 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:
336
diff
changeset
|
17 # 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:
330
diff
changeset
|
18 |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
19 import re |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
20 import os.path |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
21 import sys |
1216 | 22 import urllib.parse |
23 import urllib.request, urllib.error | |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
24 import time |
1203
251eba911d4d
server (websockets): fixed websocket handling on HTTPS connections:
Goffi <goffi@goffi.org>
parents:
1202
diff
changeset
|
25 import copy |
1459
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
26 from typing import Optional |
1242
8f39d98416c5
server: added a child for common cache
Goffi <goffi@goffi.org>
parents:
1240
diff
changeset
|
27 from pathlib import Path |
444
b64e528fb524
server side: use of bridge's getReady to be sure that backend is initialised at launch
Goffi <goffi@goffi.org>
parents:
438
diff
changeset
|
28 from twisted.application import service |
1152 | 29 from twisted.internet import reactor, defer, inotify |
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:
330
diff
changeset
|
30 from twisted.web import server |
858 | 31 from twisted.web import static |
32 from twisted.web import resource as web_resource | |
33 from twisted.web import util as web_util | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
34 from twisted.web import vhost |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
35 from . import proxy |
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:
330
diff
changeset
|
36 from twisted.python.components import registerAdapter |
917 | 37 from twisted.python import failure |
1152 | 38 from twisted.python import filepath |
750
8ac862f6e5b3
browser and server sides: allow to connect with a JID that is not registered on the local server
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
39 from twisted.words.protocols.jabber import jid |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
40 |
438
582c435dab6b
server side: new log system is used
Goffi <goffi@goffi.org>
parents:
435
diff
changeset
|
41 from sat.core.log import getLogger |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
42 |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
43 from sat_frontends.bridge.dbus_bridge import ( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
44 Bridge, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
45 BridgeExceptionNoService, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
46 const_TIMEOUT as BRIDGE_TIMEOUT, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
47 ) |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
48 from sat.core.i18n import _, D_ |
605
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
49 from sat.core import exceptions |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
50 from sat.tools import utils |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
51 from sat.tools import config |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
52 from sat.tools.common import regex |
917 | 53 from sat.tools.common import template |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
54 from sat.tools.common import uri as common_uri |
1282
0e4e413eb8db
server: user new OrderedSet to handle scripts:
Goffi <goffi@goffi.org>
parents:
1275
diff
changeset
|
55 from sat.tools.common.utils import recursive_update, OrderedSet |
1266
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
56 from sat.tools.common import data_format |
1274
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
57 from sat.tools.common import tls |
1362
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
58 from sat_frontends.bridge.bridge_frontend import BridgeException |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
59 import libervia |
995 | 60 from libervia.server import websockets |
984
f0fc28b3bd1e
server: moved LiberviaPage code in its own module
Goffi <goffi@goffi.org>
parents:
980
diff
changeset
|
61 from libervia.server.pages import LiberviaPage |
1063
4b69f69c6ffd
server: new ProgressHandler helper class, to handle progressing actions
Goffi <goffi@goffi.org>
parents:
1055
diff
changeset
|
62 from libervia.server.utils import quote, ProgressHandler |
1245 | 63 from libervia.server.tasks.manager import TasksManager |
985
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
64 from functools import partial |
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:
330
diff
changeset
|
65 |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
66 from libervia.server.constants import Const as C |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
67 from libervia.server import session_iface |
1287
1f26d8c2afc1
server: restricted_bridge first draft:
Goffi <goffi@goffi.org>
parents:
1282
diff
changeset
|
68 from .restricted_bridge import RestrictedBridge |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
69 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
70 log = getLogger(__name__) |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
71 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
72 |
1152 | 73 DEFAULT_MASK = (inotify.IN_CREATE | inotify.IN_MODIFY | inotify.IN_MOVE_SELF |
74 | inotify.IN_MOVED_TO) | |
75 | |
76 | |
1361
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
77 class SysExit(Exception): |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
78 |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
79 def __init__(self, exit_code, message=""): |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
80 self.exit_code = exit_code |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
81 self.message = message |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
82 |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
83 def __str__(self): |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
84 return f"System Exit({self.exit_code}): {self.message}" |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
85 |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
86 |
1152 | 87 class FilesWatcher(object): |
88 """Class to check files modifications using iNotify""" | |
89 _notifier = None | |
90 | |
91 def __init__(self, host): | |
92 self.host = host | |
93 | |
94 @property | |
95 def notifier(self): | |
96 if self._notifier == None: | |
97 notifier = self.__class__._notifier = inotify.INotify() | |
98 notifier.startReading() | |
99 return self._notifier | |
100 | |
1251
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
101 def _checkCallback(self, dir_path, callback, recursive): |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
102 # Twisted doesn't add callback if a watcher was already set on a path |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
103 # but in dev mode Libervia watches whole sites + internal path can be watched |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
104 # by tasks, so several callbacks must be called on some paths. |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
105 # This method check that the new callback is indeed present in the desired path |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
106 # and add it otherwise. |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
107 # FIXME: this should probably be fixed upstream |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
108 if recursive: |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
109 for child in dir_path.walk(): |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
110 if child.isdir(): |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
111 self._checkCallback(child, callback, recursive=False) |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
112 else: |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
113 watch_id = self.notifier._isWatched(dir_path) |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
114 if watch_id is None: |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
115 log.warning( |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
116 f"There is no watch ID for path {dir_path}, this should not happen" |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
117 ) |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
118 else: |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
119 watch_point = self.notifier._watchpoints[watch_id] |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
120 if callback not in watch_point.callbacks: |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
121 watch_point.callbacks.append(callback) |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
122 |
1152 | 123 def watchDir(self, dir_path, callback, mask=DEFAULT_MASK, auto_add=False, |
124 recursive=False, **kwargs): | |
1251
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
125 dir_path = str(dir_path) |
1216 | 126 log.info(_("Watching directory {dir_path}").format(dir_path=dir_path)) |
1251
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
127 wrapped_callback = lambda __, filepath, mask: callback( |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
128 self.host, filepath, inotify.humanReadableMask(mask), **kwargs) |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
129 callbacks = [wrapped_callback] |
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
130 dir_path = filepath.FilePath(dir_path) |
1152 | 131 self.notifier.watch( |
1251
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
132 dir_path, mask=mask, autoAdd=auto_add, recursive=recursive, |
1152 | 133 callbacks=callbacks) |
1251
a1606e2a92eb
server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
134 self._checkCallback(dir_path, wrapped_callback, recursive) |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
135 |
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:
330
diff
changeset
|
136 |
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:
330
diff
changeset
|
137 class LiberviaSession(server.Session): |
555
db1b330c1eb1
server_side: set the connection attempt timeout to the bridge timeout (2 minutes)
souliane <souliane@mailoo.org>
parents:
554
diff
changeset
|
138 sessionTimeout = C.SESSION_TIMEOUT |
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:
330
diff
changeset
|
139 |
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:
330
diff
changeset
|
140 def __init__(self, *args, **kwargs): |
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:
330
diff
changeset
|
141 self.__lock = False |
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:
330
diff
changeset
|
142 server.Session.__init__(self, *args, **kwargs) |
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:
330
diff
changeset
|
143 |
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:
330
diff
changeset
|
144 def lock(self): |
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:
330
diff
changeset
|
145 """Prevent session from expiring""" |
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:
330
diff
changeset
|
146 self.__lock = True |
1216 | 147 self._expireCall.reset(sys.maxsize) |
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:
330
diff
changeset
|
148 |
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:
330
diff
changeset
|
149 def unlock(self): |
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:
330
diff
changeset
|
150 """Allow session to expire again, and touch it""" |
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:
330
diff
changeset
|
151 self.__lock = False |
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:
330
diff
changeset
|
152 self.touch() |
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:
330
diff
changeset
|
153 |
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:
330
diff
changeset
|
154 def touch(self): |
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:
330
diff
changeset
|
155 if not self.__lock: |
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:
330
diff
changeset
|
156 server.Session.touch(self) |
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:
330
diff
changeset
|
157 |
451 | 158 |
858 | 159 class ProtectedFile(static.File): |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
160 """A static.File class which doesn't show directory listing""" |
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:
330
diff
changeset
|
161 |
1246 | 162 def __init__(self, path, *args, **kwargs): |
1196
a15ac511390c
server: changed defaultType for File resources to "application/octet-stream" instead of "text/html"
Goffi <goffi@goffi.org>
parents:
1191
diff
changeset
|
163 if "defaultType" not in kwargs and len(args) < 2: |
a15ac511390c
server: changed defaultType for File resources to "application/octet-stream" instead of "text/html"
Goffi <goffi@goffi.org>
parents:
1191
diff
changeset
|
164 # defaultType is second positional argument, and Twisted uses it |
a15ac511390c
server: changed defaultType for File resources to "application/octet-stream" instead of "text/html"
Goffi <goffi@goffi.org>
parents:
1191
diff
changeset
|
165 # in File.createSimilarFile, so we set kwargs only if it is missing |
a15ac511390c
server: changed defaultType for File resources to "application/octet-stream" instead of "text/html"
Goffi <goffi@goffi.org>
parents:
1191
diff
changeset
|
166 # in kwargs and it is not in a positional argument |
a15ac511390c
server: changed defaultType for File resources to "application/octet-stream" instead of "text/html"
Goffi <goffi@goffi.org>
parents:
1191
diff
changeset
|
167 kwargs["defaultType"] = "application/octet-stream" |
1246 | 168 super(ProtectedFile, self).__init__(str(path), *args, **kwargs) |
1196
a15ac511390c
server: changed defaultType for File resources to "application/octet-stream" instead of "text/html"
Goffi <goffi@goffi.org>
parents:
1191
diff
changeset
|
169 |
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:
330
diff
changeset
|
170 def directoryListing(self): |
858 | 171 return web_resource.NoResource() |
172 | |
173 | |
1216 | 174 def getChild(self, path, request): |
175 return super().getChild(path, request) | |
176 | |
177 def getChildWithDefault(self, path, request): | |
178 return super().getChildWithDefault(path, request) | |
179 | |
180 def getChildForRequest(self, request): | |
181 return super().getChildForRequest(request) | |
182 | |
1460
0ea54090e414
server: renamed `sat-app` to `libervia-app` following global renaming
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
183 |
858 | 184 class LiberviaRootResource(ProtectedFile): |
185 """Specialized resource for Libervia root | |
186 | |
187 handle redirections declared in sat.conf | |
188 """ | |
189 | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
190 def __init__(self, host, host_name, site_name, site_path, *args, **kwargs): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
191 ProtectedFile.__init__(self, *args, **kwargs) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
192 self.host = host |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
193 self.host_name = host_name |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
194 self.site_name = site_name |
1253
6d49fae517ba
pages: browser metadata + root `_browser`:
Goffi <goffi@goffi.org>
parents:
1251
diff
changeset
|
195 self.site_path = Path(site_path) |
1321
eb85ef26cb4a
server: use `bulma` theme as default for default site:
Goffi <goffi@goffi.org>
parents:
1305
diff
changeset
|
196 self.default_theme = self.getConfig('theme') |
eb85ef26cb4a
server: use `bulma` theme as default for default site:
Goffi <goffi@goffi.org>
parents:
1305
diff
changeset
|
197 if self.default_theme is None: |
eb85ef26cb4a
server: use `bulma` theme as default for default site:
Goffi <goffi@goffi.org>
parents:
1305
diff
changeset
|
198 if not host_name: |
eb85ef26cb4a
server: use `bulma` theme as default for default site:
Goffi <goffi@goffi.org>
parents:
1305
diff
changeset
|
199 # FIXME: we use bulma theme by default for main site for now |
eb85ef26cb4a
server: use `bulma` theme as default for default site:
Goffi <goffi@goffi.org>
parents:
1305
diff
changeset
|
200 # as the development is focusing on this one, and default theme may |
eb85ef26cb4a
server: use `bulma` theme as default for default site:
Goffi <goffi@goffi.org>
parents:
1305
diff
changeset
|
201 # be broken |
eb85ef26cb4a
server: use `bulma` theme as default for default site:
Goffi <goffi@goffi.org>
parents:
1305
diff
changeset
|
202 self.default_theme = 'bulma' |
eb85ef26cb4a
server: use `bulma` theme as default for default site:
Goffi <goffi@goffi.org>
parents:
1305
diff
changeset
|
203 else: |
eb85ef26cb4a
server: use `bulma` theme as default for default site:
Goffi <goffi@goffi.org>
parents:
1305
diff
changeset
|
204 self.default_theme = C.TEMPLATE_THEME_DEFAULT |
1258 | 205 self.site_themes = set() |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
206 self.named_pages = {} |
1246 | 207 self.browser_modules = {} |
1256
08cd652dea14
server, pages, tasks (brython): common_scripts:
Goffi <goffi@goffi.org>
parents:
1253
diff
changeset
|
208 # template dynamic data used in all pages |
1282
0e4e413eb8db
server: user new OrderedSet to handle scripts:
Goffi <goffi@goffi.org>
parents:
1275
diff
changeset
|
209 self.dyn_data_common = {"scripts": OrderedSet()} |
1258 | 210 for theme, data in host.renderer.getThemesData(site_name).items(): |
211 # we check themes for browser metadata, and merge them here if found | |
212 self.site_themes.add(theme) | |
213 browser_meta = data.get('browser_meta') | |
214 if browser_meta is not None: | |
215 log.debug(f"merging browser metadata from theme {theme}: {browser_meta}") | |
216 recursive_update(self.browser_modules, browser_meta) | |
217 browser_path = data.get('browser_path') | |
218 if browser_path is not None: | |
219 self.browser_modules.setdefault('themes_browser_paths', set()).add( | |
220 browser_path) | |
221 try: | |
222 next(browser_path.glob("*.py")) | |
223 except StopIteration: | |
224 pass | |
225 else: | |
226 log.debug(f"found brython script(s) for theme {theme}") | |
227 self.browser_modules.setdefault('brython', []).append( | |
228 { | |
229 "path": browser_path, | |
230 "url_hash": None, | |
231 "url_prefix": f"__t_{theme}" | |
232 } | |
233 ) | |
234 | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
235 self.uri_callbacks = {} |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
236 self.pages_redirects = {} |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
237 self.cached_urls = {} |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
238 self.main_menu = None |
1460
0ea54090e414
server: renamed `sat-app` to `libervia-app` following global renaming
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
239 # map Libervia application names => data |
0ea54090e414
server: renamed `sat-app` to `libervia-app` following global renaming
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
240 self.libervia_apps = {} |
1257
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
241 self.build_path = host.getBuildPath(site_name) |
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
242 self.build_path.mkdir(parents=True, exist_ok=True) |
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
243 self.dev_build_path = host.getBuildPath(site_name, dev=True) |
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
244 self.dev_build_path.mkdir(parents=True, exist_ok=True) |
1246 | 245 self.putChild( |
246 C.BUILD_DIR.encode(), | |
247 ProtectedFile( | |
1257
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
248 self.build_path, |
1246 | 249 defaultType="application/octet-stream"), |
250 ) | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
251 |
1216 | 252 def __str__(self): |
1275
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
253 return ( |
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
254 f"Root resource for {self.host_name or 'default host'} using " |
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
255 f"{self.site_name or 'default site'} at {self.site_path} and deserving " |
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
256 f"files at {self.path}" |
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
257 ) |
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
258 |
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
259 def getConfig(self, key, default=None, value_type=None): |
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
260 """Retrieve configuration for this site |
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
261 |
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
262 params are the same as for [Libervia.getConfig] |
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
263 """ |
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
264 return self.host.getConfig(self, key, default, value_type) |
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
265 |
1293
de3b15d68bb6
pages: expose `templates_root_url` to scripts
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
266 def getFrontURL(self, theme): |
de3b15d68bb6
pages: expose `templates_root_url` to scripts
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
267 return Path( |
de3b15d68bb6
pages: expose `templates_root_url` to scripts
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
268 '/', |
de3b15d68bb6
pages: expose `templates_root_url` to scripts
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
269 C.TPL_RESOURCE, |
de3b15d68bb6
pages: expose `templates_root_url` to scripts
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
270 self.site_name or C.SITE_NAME_DEFAULT, |
de3b15d68bb6
pages: expose `templates_root_url` to scripts
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
271 C.TEMPLATE_TPL_DIR, |
de3b15d68bb6
pages: expose `templates_root_url` to scripts
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
272 theme) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
273 |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
274 def addResourceToPath(self, path: str, resource: web_resource.Resource) -> None: |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
275 """Add a resource to the given path |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
276 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
277 A "NoResource" will be used for all intermediate segments |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
278 """ |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
279 segments, __, last_segment = path.rpartition("/") |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
280 url_segments = segments.split("/") if segments else [] |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
281 current = self |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
282 for segment in url_segments: |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
283 resource = web_resource.NoResource() |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
284 current.putChild(segment, resource) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
285 current = resource |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
286 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
287 current.putChild( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
288 last_segment.encode('utf-8'), |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
289 resource |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
290 ) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
291 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
292 async def _startApp(self, app_name, extra=None): |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
293 if extra is None: |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
294 extra = {} |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
295 log.info(_( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
296 "starting application {app_name}").format(app_name=app_name)) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
297 await self.host.bridgeCall( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
298 "applicationStart", app_name, data_format.serialise(extra) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
299 ) |
1460
0ea54090e414
server: renamed `sat-app` to `libervia-app` following global renaming
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
300 app_data = self.libervia_apps[app_name] = data_format.deserialise( |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
301 await self.host.bridgeCall( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
302 "applicationExposedGet", app_name, "", "")) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
303 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
304 try: |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
305 web_port = int(app_data['ports']['web'].split(':')[1]) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
306 except (KeyError, ValueError): |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
307 log.warning(_( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
308 "no web port found for application {app_name!r}, can't use it " |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
309 ).format(app_name=app_name)) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
310 raise exceptions.DataError("no web port found") |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
311 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
312 try: |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
313 url_prefix = app_data['url_prefix'].strip().rstrip('/') |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
314 except (KeyError, AttributeError) as e: |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
315 log.warning(_( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
316 "no URL prefix specified for this application, we can't embed it: {msg}") |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
317 .format(msg=e)) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
318 raise exceptions.DataError("no URL prefix") |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
319 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
320 if not url_prefix.startswith('/'): |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
321 raise exceptions.DataError( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
322 f"invalid URL prefix, it must start with '/': {url_prefix!r}") |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
323 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
324 res = proxy.SatReverseProxyResource( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
325 "localhost", |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
326 web_port, |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
327 url_prefix.encode() |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
328 ) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
329 self.addResourceToPath(url_prefix, res) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
330 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
331 return app_data |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
332 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
333 async def _initRedirections(self, options): |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
334 url_redirections = options["url_redirections_dict"] |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
335 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
336 url_redirections = url_redirections.get(self.site_name, {}) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
337 |
858 | 338 ## redirections |
339 self.redirections = {} | |
1037 | 340 self.inv_redirections = {} # new URL to old URL map |
341 | |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
342 for old, new_data_list in url_redirections.items(): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
343 # several redirections can be used for one path by using a list. |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
344 # The redirection will be done using first item of the list, and all items |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
345 # will be used for inverse redirection. |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
346 # e.g. if a => [b, c], a will redirect to c, and b and c will both be |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
347 # equivalent to a |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
348 if not isinstance(new_data_list, list): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
349 new_data_list = [new_data_list] |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
350 for new_data in new_data_list: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
351 # new_data can be a dictionary or a unicode url |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
352 if isinstance(new_data, dict): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
353 # new_data dict must contain either "url", "page" or "path" key |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
354 # (exclusive) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
355 # if "path" is used, a file url is constructed with it |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
356 if (( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
357 len( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
358 {"path", "url", "page"}.intersection(list(new_data.keys())) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
359 ) != 1 |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
360 )): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
361 raise ValueError( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
362 'You must have one and only one of "url", "page" or "path" ' |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
363 'key in your url_redirections_dict data' |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
364 ) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
365 if "url" in new_data: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
366 new = new_data["url"] |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
367 elif "page" in new_data: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
368 new = new_data |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
369 new["type"] = "page" |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
370 new.setdefault("path_args", []) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
371 if not isinstance(new["path_args"], list): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
372 log.error( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
373 _('"path_args" in redirection of {old} must be a list. ' |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
374 'Ignoring the redirection'.format(old=old))) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
375 continue |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
376 new.setdefault("query_args", {}) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
377 if not isinstance(new["query_args"], dict): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
378 log.error( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
379 _( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
380 '"query_args" in redirection of {old} must be a ' |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
381 'dictionary. Ignoring the redirection' |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
382 ).format(old=old) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
383 ) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
384 continue |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
385 new["path_args"] = [quote(a) for a in new["path_args"]] |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
386 # we keep an inversed dict of page redirection |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
387 # (page/path_args => redirecting URL) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
388 # so getURL can return the redirecting URL if the same arguments |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
389 # are used # making the URL consistent |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
390 args_hash = tuple(new["path_args"]) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
391 self.pages_redirects.setdefault(new_data["page"], {}).setdefault( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
392 args_hash, |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
393 old |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
394 ) |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
395 |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
396 # we need lists in query_args because it will be used |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
397 # as it in request.path_args |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
398 for k, v in new["query_args"].items(): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
399 if isinstance(v, str): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
400 new["query_args"][k] = [v] |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
401 elif "path" in new_data: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
402 new = "file:{}".format(urllib.parse.quote(new_data["path"])) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
403 elif isinstance(new_data, str): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
404 new = new_data |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
405 new_data = {} |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
406 else: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
407 log.error( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
408 _("ignoring invalid redirection value: {new_data}").format( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
409 new_data=new_data |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
410 ) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
411 ) |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
412 continue |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
413 |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
414 # some normalization |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
415 if not old.strip(): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
416 # root URL special case |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
417 old = "" |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
418 elif not old.startswith("/"): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
419 log.error( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
420 _("redirected url must start with '/', got {value}. Ignoring") |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
421 .format(value=old) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
422 ) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
423 continue |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
424 else: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
425 old = self._normalizeURL(old) |
979 | 426 |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
427 if isinstance(new, dict): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
428 # dict are handled differently, they contain data |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
429 # which ared use dynamically when the request is done |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
430 self.redirections.setdefault(old, new) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
431 if not old: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
432 if new["type"] == "page": |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
433 log.info( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
434 _("Root URL redirected to page {name}").format( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
435 name=new["page"] |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
436 ) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
437 ) |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
438 else: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
439 if new["type"] == "page": |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
440 page = self.getPageByName(new["page"]) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
441 url = page.getURL(*new.get("path_args", [])) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
442 self.inv_redirections[url] = old |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
443 continue |
979 | 444 |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
445 # at this point we have a redirection URL in new, we can parse it |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
446 new_url = urllib.parse.urlsplit(new) |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
447 |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
448 # we handle the known URL schemes |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
449 if new_url.scheme == "xmpp": |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
450 location = self.getPagePathFromURI(new) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
451 if location is None: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
452 log.warning( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
453 _("ignoring redirection, no page found to handle this URI: " |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
454 "{uri}").format(uri=new)) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
455 continue |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
456 request_data = self._getRequestData(location) |
1037 | 457 self.inv_redirections[location] = old |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
458 |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
459 elif new_url.scheme in ("", "http", "https"): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
460 # direct redirection |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
461 if new_url.netloc: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
462 raise NotImplementedError( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
463 "netloc ({netloc}) is not implemented yet for " |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
464 "url_redirections_dict, it is not possible to redirect to an " |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
465 "external website".format(netloc=new_url.netloc)) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
466 location = urllib.parse.urlunsplit( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
467 ("", "", new_url.path, new_url.query, new_url.fragment) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
468 ) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
469 request_data = self._getRequestData(location) |
1037 | 470 self.inv_redirections[location] = old |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
471 |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
472 elif new_url.scheme == "file": |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
473 # file or directory |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
474 if new_url.netloc: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
475 raise NotImplementedError( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
476 "netloc ({netloc}) is not implemented for url redirection to " |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
477 "file system, it is not possible to redirect to an external " |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
478 "host".format( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
479 netloc=new_url.netloc)) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
480 path = urllib.parse.unquote(new_url.path) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
481 if not os.path.isabs(path): |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
482 raise ValueError( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
483 "file redirection must have an absolute path: e.g. " |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
484 "file:/path/to/my/file") |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
485 # for file redirection, we directly put child here |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
486 resource_class = ( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
487 ProtectedFile if new_data.get("protected", True) else static.File |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
488 ) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
489 res = resource_class(path, defaultType="application/octet-stream") |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
490 self.addResourceToPath(old, res) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
491 log.info("[{host_name}] Added redirection from /{old} to file system " |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
492 "path {path}".format(host_name=self.host_name, |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
493 old=old, |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
494 path=path)) |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
495 |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
496 # we don't want to use redirection system, so we continue here |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
497 continue |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
498 |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
499 elif new_url.scheme == "libervia-app": |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
500 # a Libervia application |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
501 |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
502 app_name = urllib.parse.unquote(new_url.path).lower().strip() |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
503 extra = {"url_prefix": f"/{old}"} |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
504 try: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
505 await self._startApp(app_name, extra) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
506 except Exception as e: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
507 log.warning(_( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
508 "Can't launch {app_name!r} for path /{old}: {e}").format( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
509 app_name=app_name, old=old, e=e)) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
510 continue |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
511 |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
512 log.info("[{host_name}] Added redirection from /{old} to application " |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
513 "{app_name}".format( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
514 host_name=self.host_name, |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
515 old=old, |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
516 app_name=app_name)) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
517 |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
518 # normal redirection system is not used here |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
519 continue |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
520 else: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
521 raise NotImplementedError( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
522 "{scheme}: scheme is not managed for url_redirections_dict".format( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
523 scheme=new_url.scheme |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
524 ) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
525 ) |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
526 |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
527 self.redirections.setdefault(old, request_data) |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
528 if not old: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
529 log.info(_("[{host_name}] Root URL redirected to {uri}") |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
530 .format(host_name=self.host_name, |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
531 uri=request_data[1])) |
858 | 532 |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
533 # the default root URL, if not redirected |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
534 if not "" in self.redirections: |
1202
3f791fbc1643
server: if "redirections" is not set, use "/login" page as default
Goffi <goffi@goffi.org>
parents:
1199
diff
changeset
|
535 self.redirections[""] = self._getRequestData(C.LIBERVIA_PAGE_START) |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
536 |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
537 async def _setMenu(self, menus): |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
538 menus = menus.get(self.site_name, []) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
539 main_menu = [] |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
540 for menu in menus: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
541 if not menu: |
1216 | 542 msg = _("menu item can't be empty") |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
543 log.error(msg) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
544 raise ValueError(msg) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
545 elif isinstance(menu, list): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
546 if len(menu) != 2: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
547 msg = _( |
1216 | 548 "menu item as list must be in the form [page_name, absolue URL]" |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
549 ) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
550 log.error(msg) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
551 raise ValueError(msg) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
552 page_name, url = menu |
1460
0ea54090e414
server: renamed `sat-app` to `libervia-app` following global renaming
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
553 elif menu.startswith("libervia-app:"): |
1462
87e48b6a1bbd
server: fix `libervia-app` name parsing following prefix change
Goffi <goffi@goffi.org>
parents:
1460
diff
changeset
|
554 app_name = menu[13:].strip().lower() |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
555 app_data = await self._startApp(app_name) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
556 front_url = app_data['front_url'] |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
557 options = self.host.options |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
558 url_redirections = options["url_redirections_dict"].setdefault( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
559 self.site_name, {}) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
560 if front_url in url_redirections: |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
561 raise exceptions.ConflictError( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
562 f"There is already a redirection from {front_url!r}, can't add " |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
563 f"{app_name!r}") |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
564 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
565 url_redirections[front_url] = { |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
566 "page": 'embed_app', |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
567 "path_args": [app_name] |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
568 } |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
569 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
570 page_name = app_data.get('web_label', app_name).title() |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
571 url = front_url |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
572 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
573 log.debug( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
574 f"Application {app_name} added to menu of {self.site_name}" |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
575 ) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
576 else: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
577 page_name = menu |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
578 try: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
579 url = self.getPageByName(page_name).url |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
580 except KeyError as e: |
1216 | 581 log_msg = _("Can'find a named page ({msg}), please check " |
582 "menu_json in configuration.").format(msg=e.args[0]) | |
1131
9cf592d1e6aa
server: better error handling when a named page mentioned in menu_json is missing
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
583 log.error(log_msg) |
9cf592d1e6aa
server: better error handling when a named page mentioned in menu_json is missing
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
584 raise exceptions.ConfigError(log_msg) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
585 main_menu.append((page_name, url)) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
586 self.main_menu = main_menu |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
587 |
858 | 588 def _normalizeURL(self, url, lower=True): |
589 """Return URL normalized for self.redirections dict | |
590 | |
591 @param url(unicode): URL to normalize | |
592 @param lower(bool): lower case of url if True | |
593 @return (str): normalized URL | |
594 """ | |
595 if lower: | |
596 url = url.lower() | |
1216 | 597 return "/".join((p for p in url.split("/") if p)) |
858 | 598 |
599 def _getRequestData(self, uri): | |
600 """Return data needed to redirect request | |
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:
330
diff
changeset
|
601 |
858 | 602 @param url(unicode): destination url |
603 @return (tuple(list[str], str, str, dict): tuple with | |
604 splitted path as in Request.postpath | |
605 uri as in Request.uri | |
606 path as in Request.path | |
607 args as in Request.args | |
608 """ | |
1216 | 609 uri = uri |
858 | 610 # XXX: we reuse code from twisted.web.http.py here |
611 # as we need to have the same behaviour | |
1216 | 612 x = uri.split("?", 1) |
858 | 613 |
614 if len(x) == 1: | |
615 path = uri | |
616 args = {} | |
617 else: | |
618 path, argstring = x | |
1216 | 619 args = urllib.parse.parse_qs(argstring, True) |
858 | 620 |
621 # XXX: splitted path case must not be changed, as it may be significant | |
622 # (e.g. for blog items) | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
623 return ( |
1216 | 624 self._normalizeURL(path, lower=False).split("/"), |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
625 uri, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
626 path, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
627 args, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
628 ) |
858 | 629 |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
630 def _redirect(self, request, request_data): |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
631 """Redirect an URL by rewritting request |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
632 |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
633 this is *NOT* a HTTP redirection, but equivalent to URL rewritting |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
634 @param request(web.http.request): original request |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
635 @param request_data(tuple): data returned by self._getRequestData |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
636 @return (web_resource.Resource): resource to use |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
637 """ |
979 | 638 # recursion check |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
639 try: |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
640 request._redirected |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
641 except AttributeError: |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
642 pass |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
643 else: |
979 | 644 try: |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
645 __, uri, __, __ = request_data |
979 | 646 except ValueError: |
1216 | 647 uri = "" |
648 log.error(D_( "recursive redirection, please fix this URL:\n" | |
649 "{old} ==> {new}").format( | |
650 old=request.uri.decode("utf-8"), new=uri)) | |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
651 return web_resource.NoResource() |
979 | 652 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
653 request._redirected = True # here to avoid recursive redirections |
979 | 654 |
655 if isinstance(request_data, dict): | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
656 if request_data["type"] == "page": |
979 | 657 try: |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
658 page = self.getPageByName(request_data["page"]) |
979 | 659 except KeyError: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
660 log.error( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
661 _( |
1216 | 662 'Can\'t find page named "{name}" requested in redirection' |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
663 ).format(name=request_data["page"]) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
664 ) |
979 | 665 return web_resource.NoResource() |
1216 | 666 path_args = [pa.encode('utf-8') for pa in request_data["path_args"]] |
667 request.postpath = path_args + request.postpath | |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
668 |
979 | 669 try: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
670 request.args.update(request_data["query_args"]) |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
671 except (TypeError, ValueError): |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
672 log.error( |
1216 | 673 _("Invalid args in redirection: {query_args}").format( |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
674 query_args=request_data["query_args"] |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
675 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
676 ) |
979 | 677 return web_resource.NoResource() |
678 return page | |
679 else: | |
1216 | 680 raise exceptions.InternalError("unknown request_data type") |
979 | 681 else: |
682 path_list, uri, path, args = request_data | |
1216 | 683 path_list = [p.encode('utf-8') for p in path_list] |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
684 log.debug( |
1216 | 685 "Redirecting URL {old} to {new}".format( |
686 old=request.uri.decode('utf-8'), new=uri | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
687 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
688 ) |
979 | 689 # we change the request to reflect the new url |
1037 | 690 request.postpath = path_list[1:] + request.postpath |
1158
fb4b4da61132
backend: fixed args transmission on page redirection.
Goffi <goffi@goffi.org>
parents:
1153
diff
changeset
|
691 request.args.update(args) |
979 | 692 |
693 # we start again to look for a child with the new url | |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
694 return self.getChildWithDefault(path_list[0], request) |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
695 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
696 def getPageByName(self, name): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
697 """Retrieve page instance from its name |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
698 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
699 @param name(unicode): name of the page |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
700 @return (LiberviaPage): page instance |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
701 @raise KeyError: the page doesn't exist |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
702 """ |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
703 return self.named_pages[name] |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
704 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
705 def getPagePathFromURI(self, uri): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
706 """Retrieve page URL from xmpp: URI |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
707 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
708 @param uri(unicode): URI with a xmpp: scheme |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
709 @return (unicode,None): absolute path (starting from root "/") to page handling |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
710 the URI. |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
711 None is returned if no page has been registered for this URI |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
712 """ |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
713 uri_data = common_uri.parseXMPPUri(uri) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
714 try: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
715 page, cb = self.uri_callbacks[uri_data["type"], uri_data["sub_type"]] |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
716 except KeyError: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
717 url = None |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
718 else: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
719 url = cb(page, uri_data) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
720 if url is None: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
721 # no handler found |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
722 # we try to find a more generic one |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
723 try: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
724 page, cb = self.uri_callbacks[uri_data["type"], None] |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
725 except KeyError: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
726 pass |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
727 else: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
728 url = cb(page, uri_data) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
729 return url |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
730 |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
731 def getChildWithDefault(self, name, request): |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
732 # XXX: this method is overriden only for root url |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
733 # which is the only ones who need to be handled before other children |
1216 | 734 if name == b"" and not request.postpath: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
735 return self._redirect(request, self.redirections[""]) |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
736 return super(LiberviaRootResource, self).getChildWithDefault(name, request) |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
737 |
858 | 738 def getChild(self, name, request): |
739 resource = super(LiberviaRootResource, self).getChild(name, request) | |
740 | |
741 if isinstance(resource, web_resource.NoResource): | |
742 # if nothing was found, we try our luck with redirections | |
743 # XXX: we want redirections to happen only if everything else failed | |
1047
3f6f4d907c30
server: better redirection (fixed issue in remaining path arguments)
Goffi <goffi@goffi.org>
parents:
1046
diff
changeset
|
744 path_elt = request.prepath + request.postpath |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
745 for idx in range(len(path_elt), -1, -1): |
1216 | 746 test_url = b"/".join(path_elt[:idx]).decode('utf-8').lower() |
1047
3f6f4d907c30
server: better redirection (fixed issue in remaining path arguments)
Goffi <goffi@goffi.org>
parents:
1046
diff
changeset
|
747 if test_url in self.redirections: |
3f6f4d907c30
server: better redirection (fixed issue in remaining path arguments)
Goffi <goffi@goffi.org>
parents:
1046
diff
changeset
|
748 request_data = self.redirections[test_url] |
3f6f4d907c30
server: better redirection (fixed issue in remaining path arguments)
Goffi <goffi@goffi.org>
parents:
1046
diff
changeset
|
749 request.postpath = path_elt[idx:] |
979 | 750 return self._redirect(request, request_data) |
858 | 751 |
752 return resource | |
753 | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
754 def putChild(self, path, resource): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
755 """Add a child to the root resource""" |
1216 | 756 if not isinstance(path, bytes): |
757 raise ValueError("path must be specified in bytes") | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
758 if not isinstance(resource, web_resource.EncodingResourceWrapper): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
759 # FIXME: check that no information is leaked (c.f. https://twistedmatrix.com/documents/current/web/howto/using-twistedweb.html#request-encoders) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
760 resource = web_resource.EncodingResourceWrapper( |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
761 resource, [server.GzipEncoderFactory()]) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
762 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
763 super(LiberviaRootResource, self).putChild(path, resource) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
764 |
858 | 765 def createSimilarFile(self, path): |
766 # XXX: this method need to be overriden to avoid recreating a LiberviaRootResource | |
767 | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
768 f = LiberviaRootResource.__base__( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
769 path, self.defaultType, self.ignoredExts, self.registry |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
770 ) |
858 | 771 # refactoring by steps, here - constructor should almost certainly take these |
772 f.processors = self.processors | |
773 f.indexNames = self.indexNames[:] | |
774 f.childNotFound = self.childNotFound | |
775 return f | |
451 | 776 |
777 | |
554
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
778 class WaitingRequests(dict): |
796
fad9c9f82ae3
browser and server sides: alert the user after he created a new profile using his XMPP account credentials
souliane <souliane@mailoo.org>
parents:
794
diff
changeset
|
779 def setRequest(self, request, profile, register_with_ext_jid=False): |
554
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
780 """Add the given profile to the waiting list. |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
781 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
782 @param request (server.Request): the connection request |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
783 @param profile (str): %(doc_profile)s |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
784 @param register_with_ext_jid (bool): True if we will try to register the |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
785 profile with an external XMPP account credentials |
554
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
786 """ |
555
db1b330c1eb1
server_side: set the connection attempt timeout to the bridge timeout (2 minutes)
souliane <souliane@mailoo.org>
parents:
554
diff
changeset
|
787 dc = reactor.callLater(BRIDGE_TIMEOUT, self.purgeRequest, profile) |
796
fad9c9f82ae3
browser and server sides: alert the user after he created a new profile using his XMPP account credentials
souliane <souliane@mailoo.org>
parents:
794
diff
changeset
|
788 self[profile] = (request, dc, register_with_ext_jid) |
554
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
789 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
790 def purgeRequest(self, profile): |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
791 """Remove the given profile from the waiting list. |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
792 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
793 @param profile (str): %(doc_profile)s |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
794 """ |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
795 try: |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
796 dc = self[profile][1] |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
797 except KeyError: |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
798 return |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
799 if dc.active(): |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
800 dc.cancel() |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
801 del self[profile] |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
802 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
803 def getRequest(self, profile): |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
804 """Get the waiting request for the given profile. |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
805 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
806 @param profile (str): %(doc_profile)s |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
807 @return: the waiting request or None |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
808 """ |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
809 return self[profile][0] if profile in self else None |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
810 |
796
fad9c9f82ae3
browser and server sides: alert the user after he created a new profile using his XMPP account credentials
souliane <souliane@mailoo.org>
parents:
794
diff
changeset
|
811 def getRegisterWithExtJid(self, profile): |
fad9c9f82ae3
browser and server sides: alert the user after he created a new profile using his XMPP account credentials
souliane <souliane@mailoo.org>
parents:
794
diff
changeset
|
812 """Get the value of the register_with_ext_jid parameter. |
fad9c9f82ae3
browser and server sides: alert the user after he created a new profile using his XMPP account credentials
souliane <souliane@mailoo.org>
parents:
794
diff
changeset
|
813 |
fad9c9f82ae3
browser and server sides: alert the user after he created a new profile using his XMPP account credentials
souliane <souliane@mailoo.org>
parents:
794
diff
changeset
|
814 @param profile (str): %(doc_profile)s |
fad9c9f82ae3
browser and server sides: alert the user after he created a new profile using his XMPP account credentials
souliane <souliane@mailoo.org>
parents:
794
diff
changeset
|
815 @return: bool or None |
fad9c9f82ae3
browser and server sides: alert the user after he created a new profile using his XMPP account credentials
souliane <souliane@mailoo.org>
parents:
794
diff
changeset
|
816 """ |
fad9c9f82ae3
browser and server sides: alert the user after he created a new profile using his XMPP account credentials
souliane <souliane@mailoo.org>
parents:
794
diff
changeset
|
817 return self[profile][2] if profile in self else None |
fad9c9f82ae3
browser and server sides: alert the user after he created a new profile using his XMPP account credentials
souliane <souliane@mailoo.org>
parents:
794
diff
changeset
|
818 |
554
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
819 |
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:
330
diff
changeset
|
820 class Libervia(service.Service): |
995 | 821 debug = defer.Deferred.debug # True if twistd/Libervia is launched in debug mode |
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:
330
diff
changeset
|
822 |
810 | 823 def __init__(self, options): |
824 self.options = options | |
1236 | 825 |
826 def _init(self): | |
827 # we do init here and not in __init__ to avoid doule initialisation with twistd | |
828 # this _init is called in startService | |
444
b64e528fb524
server side: use of bridge's getReady to be sure that backend is initialised at launch
Goffi <goffi@goffi.org>
parents:
438
diff
changeset
|
829 self.initialised = defer.Deferred() |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
830 self.waiting_profiles = WaitingRequests() # FIXME: should be removed |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
831 self._main_conf = None |
1152 | 832 self.files_watcher = FilesWatcher(self) |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
833 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
834 if self.options["base_url_ext"]: |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
835 self.base_url_ext = self.options.pop("base_url_ext") |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
836 if self.base_url_ext[-1] != "/": |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
837 self.base_url_ext += "/" |
1216 | 838 self.base_url_ext_data = urllib.parse.urlsplit(self.base_url_ext) |
881
6bdee34fa2f4
server: added base_url_ext option to handle different external URLs (e.g.: if there is a proxy)
Goffi <goffi@goffi.org>
parents:
875
diff
changeset
|
839 else: |
6bdee34fa2f4
server: added base_url_ext option to handle different external URLs (e.g.: if there is a proxy)
Goffi <goffi@goffi.org>
parents:
875
diff
changeset
|
840 self.base_url_ext = None |
884
763da94ba28b
blog (atom): base_url_ext can now only specify scheme, or netloc, or path, it will be used to complete data coming from request's path
Goffi <goffi@goffi.org>
parents:
881
diff
changeset
|
841 # we split empty string anyway so we can do things like |
763da94ba28b
blog (atom): base_url_ext can now only specify scheme, or netloc, or path, it will be used to complete data coming from request's path
Goffi <goffi@goffi.org>
parents:
881
diff
changeset
|
842 # scheme = self.base_url_ext_data.scheme or 'https' |
1216 | 843 self.base_url_ext_data = urllib.parse.urlsplit("") |
884
763da94ba28b
blog (atom): base_url_ext can now only specify scheme, or netloc, or path, it will be used to complete data coming from request's path
Goffi <goffi@goffi.org>
parents:
881
diff
changeset
|
844 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
845 if not self.options["port_https_ext"]: |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
846 self.options["port_https_ext"] = self.options["port_https"] |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
847 |
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:
330
diff
changeset
|
848 self._cleanup = [] |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
849 |
451 | 850 self.sessions = {} # key = session value = user |
851 self.prof_connected = set() # Profiles connected | |
985
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
852 self.ns_map = {} # map of short name to namespaces |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
853 |
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:
330
diff
changeset
|
854 ## bridge ## |
1367
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
855 self._bridge_retry = self.options['bridge-retries'] |
1126
7cd89277a129
server: fixed missing backend detection
Goffi <goffi@goffi.org>
parents:
1124
diff
changeset
|
856 self.bridge = Bridge() |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
857 self.bridge.bridgeConnect(callback=self._bridgeCb, errback=self._bridgeEb) |
553
8492c2bb463b
server_side: enable HTTP gzip compression
souliane <souliane@mailoo.org>
parents:
522
diff
changeset
|
858 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
859 @property |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
860 def roots(self): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
861 """Return available virtual host roots |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
862 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
863 Root resources are only returned once, even if they are present for multiple |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
864 named vhosts. Order is not relevant, except for default vhost which is always |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
865 returned first. |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
866 @return (list[web_resource.Resource]): all vhost root resources |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
867 """ |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
868 roots = list(set(self.vhost_root.hosts.values())) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
869 default = self.vhost_root.default |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
870 if default is not None and default not in roots: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
871 roots.insert(0, default) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
872 return roots |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
873 |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
874 @property |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
875 def main_conf(self): |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
876 """SafeConfigParser instance opened on configuration file (sat.conf)""" |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
877 if self._main_conf is None: |
1240 | 878 self._main_conf = config.parseMainConf(log_filenames=True) |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
879 return self._main_conf |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
880 |
1147
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
881 def getConfig(self, site_root_res, key, default=None, value_type=None): |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
882 """Retrieve configuration associated to a site |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
883 |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
884 Section is automatically set to site name |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
885 @param site_root_res(LiberviaRootResource): resource of the site in use |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
886 @param key(unicode): key to use |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
887 @param default: value to use if not found (see [config.getConfig]) |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
888 @param value_type(unicode, None): filter to use on value |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
889 Note that filters are already automatically used when the key finish |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
890 by a well known suffix ("_path", "_list", "_dict", or "_json") |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
891 None to use no filter, else can be: |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
892 - "path": a path is expected, will be normalized and expanded |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
893 |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
894 """ |
1275
334d044f2713
server: default theme can now be specified in site section of `sat.conf` with `theme` key
Goffi <goffi@goffi.org>
parents:
1274
diff
changeset
|
895 section = site_root_res.site_name.lower().strip() or C.CONFIG_SECTION |
1147
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
896 value = config.getConfig(self.main_conf, section, key, default=default) |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
897 if value_type is not None: |
1216 | 898 if value_type == 'path': |
1147
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
899 v_filter = lambda v: os.path.abspath(os.path.expanduser(v)) |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
900 else: |
1216 | 901 raise ValueError("unknown value type {value_type}".format( |
1147
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
902 value_type = value_type)) |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
903 if isinstance(value, list): |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
904 value = [v_filter(v) for v in value] |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
905 elif isinstance(value, dict): |
1216 | 906 value = {k:v_filter(v) for k,v in list(value.items())} |
1147
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
907 elif value is not None: |
1217
fe9782391f63
server: fixed value filtering in getConfig
Goffi <goffi@goffi.org>
parents:
1216
diff
changeset
|
908 value = v_filter(value) |
1147
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
909 return value |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
910 |
985
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
911 def _namespacesGetCb(self, ns_map): |
1383
81b472bcf0a1
server: be sure to have strings for ns_map
Goffi <goffi@goffi.org>
parents:
1370
diff
changeset
|
912 self.ns_map = {str(k): str(v) for k,v in ns_map.items()} |
985
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
913 |
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
914 def _namespacesGetEb(self, failure_): |
1216 | 915 log.error(_("Can't get namespaces map: {msg}").format(msg=failure_)) |
985
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
916 |
1130
8a7d75c18d40
server: fixed front_url_filter in templates renderer
Goffi <goffi@goffi.org>
parents:
1129
diff
changeset
|
917 @template.contextfilter |
1127
9234f29053b0
server, pages: update to handle multi sites themes, first draft:
Goffi <goffi@goffi.org>
parents:
1126
diff
changeset
|
918 def _front_url_filter(self, ctx, relative_url): |
1216 | 919 template_data = ctx['template_data'] |
1292
e30e96958fb7
server: use C.SITE_NAME_DEFAULT instead of "sat" when suitable
Goffi <goffi@goffi.org>
parents:
1287
diff
changeset
|
920 return os.path.join( |
e30e96958fb7
server: use C.SITE_NAME_DEFAULT instead of "sat" when suitable
Goffi <goffi@goffi.org>
parents:
1287
diff
changeset
|
921 '/', C.TPL_RESOURCE, template_data.site or C.SITE_NAME_DEFAULT, |
1127
9234f29053b0
server, pages: update to handle multi sites themes, first draft:
Goffi <goffi@goffi.org>
parents:
1126
diff
changeset
|
922 C.TEMPLATE_TPL_DIR, template_data.theme, relative_url) |
9234f29053b0
server, pages: update to handle multi sites themes, first draft:
Goffi <goffi@goffi.org>
parents:
1126
diff
changeset
|
923 |
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:
1131
diff
changeset
|
924 def _moveFirstLevelToDict(self, options, key, keys_to_keep): |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
925 """Read a config option and put value at first level into u'' dict |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
926 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
927 This is useful to put values for Libervia official site directly in dictionary, |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
928 and to use site_name as keys when external sites are used. |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
929 options will be modified in place |
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:
1131
diff
changeset
|
930 @param options(dict): options to modify |
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:
1131
diff
changeset
|
931 @param key(unicode): setting key to modify |
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:
1131
diff
changeset
|
932 @param keys_to_keep(list(unicode)): keys allowed in first level |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
933 """ |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
934 try: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
935 conf = options[key] |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
936 except KeyError: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
937 return |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
938 if not isinstance(conf, dict): |
1216 | 939 options[key] = {'': conf} |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
940 return |
1216 | 941 default_dict = conf.get('', {}) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
942 to_delete = [] |
1216 | 943 for key, value in conf.items(): |
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:
1131
diff
changeset
|
944 if key not in keys_to_keep: |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
945 default_dict[key] = value |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
946 to_delete.append(key) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
947 for key in to_delete: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
948 del conf[key] |
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:
1131
diff
changeset
|
949 if default_dict: |
1216 | 950 conf[''] = default_dict |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
951 |
1362
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
952 async def checkAndConnectServiceProfile(self): |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
953 passphrase = self.options["passphrase"] |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
954 if not passphrase: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
955 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
956 C.EXIT_BAD_ARG, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
957 _("No passphrase set for service profile, please check installation " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
958 "documentation.") |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
959 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
960 try: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
961 s_prof_connected = await self.bridgeCall("isConnected", C.SERVICE_PROFILE) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
962 except BridgeException as e: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
963 if e.classname == "ProfileUnknownError": |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
964 log.info("Service profile doesn't exist, creating it.") |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
965 try: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
966 xmpp_domain = await self.bridgeCall("getConfig", "", "xmpp_domain") |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
967 xmpp_domain = xmpp_domain.strip() |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
968 if not xmpp_domain: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
969 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
970 C.EXIT_BAD_ARG, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
971 _('"xmpp_domain" must be set to create new accounts, please ' |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
972 'check documentation') |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
973 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
974 service_profile_jid_s = f"{C.SERVICE_PROFILE}@{xmpp_domain}" |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
975 await self.bridgeCall( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
976 "inBandAccountNew", |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
977 service_profile_jid_s, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
978 passphrase, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
979 "", |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
980 xmpp_domain, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
981 0, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
982 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
983 except BridgeException as e: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
984 if e.condition == "conflict": |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
985 log.info( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
986 _("Service's profile JID {profile_jid} already exists") |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
987 .format(profile_jid=service_profile_jid_s) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
988 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
989 elif e.classname == "UnknownMethod": |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
990 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
991 C.EXIT_BRIDGE_ERROR, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
992 _("Can't create service profile XMPP account, In-Band " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
993 "Registration plugin is not activated, you'll have to " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
994 "create the {profile!r} profile with {profile_jid!r} JID " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
995 "manually.").format( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
996 profile=C.SERVICE_PROFILE, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
997 profile_jid=service_profile_jid_s) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
998 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
999 elif e.condition == "service-unavailable": |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1000 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1001 C.EXIT_BRIDGE_ERROR, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1002 _("Can't create service profile XMPP account, In-Band " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1003 "Registration is not activated on your server, you'll have " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1004 "to create the {profile!r} profile with {profile_jid!r} JID " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1005 "manually.\nNote that you'll need to activate In-Band " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1006 "Registation on your server if you want users to be able " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1007 "to create new account from {app_name}, please check " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1008 "documentation.").format( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1009 profile=C.SERVICE_PROFILE, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1010 profile_jid=service_profile_jid_s, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1011 app_name=C.APP_NAME) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1012 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1013 elif e.condition == "not-acceptable": |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1014 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1015 C.EXIT_BRIDGE_ERROR, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1016 _("Can't create service profile XMPP account, your XMPP " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1017 "server doesn't allow us to create new accounts with " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1018 "In-Band Registration please check XMPP server " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1019 "configuration: {reason}" |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1020 ).format( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1021 profile=C.SERVICE_PROFILE, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1022 profile_jid=service_profile_jid_s, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1023 reason=e.message) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1024 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1025 |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1026 else: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1027 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1028 C.EXIT_BRIDGE_ERROR, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1029 _("Can't create service profile XMPP account, you'll have " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1030 "do to it manually: {reason}").format(reason=e.message) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1031 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1032 try: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1033 await self.bridgeCall("profileCreate", C.SERVICE_PROFILE, passphrase) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1034 await self.bridgeCall( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1035 "profileStartSession", passphrase, C.SERVICE_PROFILE) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1036 await self.bridgeCall( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1037 "setParam", "JabberID", service_profile_jid_s, "Connection", -1, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1038 C.SERVICE_PROFILE) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1039 await self.bridgeCall( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1040 "setParam", "Password", passphrase, "Connection", -1, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1041 C.SERVICE_PROFILE) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1042 except BridgeException as e: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1043 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1044 C.EXIT_BRIDGE_ERROR, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1045 _("Can't create service profile XMPP account, you'll have " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1046 "do to it manually: {reason}").format(reason=e.message) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1047 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1048 log.info(_("Service profile has been successfully created")) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1049 s_prof_connected = False |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1050 else: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1051 raise SysExit(C.EXIT_BRIDGE_ERROR, e.message) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1052 |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1053 if not s_prof_connected: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1054 try: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1055 await self.bridgeCall( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1056 "connect", |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1057 C.SERVICE_PROFILE, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1058 passphrase, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1059 {}, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1060 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1061 except BridgeException as e: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1062 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1063 C.EXIT_BRIDGE_ERROR, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1064 _("Connection of service profile failed: {reason}").format(reason=e) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1065 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1066 |
1245 | 1067 async def backendReady(self): |
1397
ed037818d6de
core (constants): renaming following global project renaming
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
1068 log.info(f"Libervia Web v{self.full_version}") |
1362
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1069 |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1070 # settings |
1364
df40708c4c76
server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents:
1362
diff
changeset
|
1071 if self.options['dev-mode']: |
1216 | 1072 log.info(_("Developer mode activated")) |
1362
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1073 self.media_dir = await self.bridgeCall("getConfig", "", "media_dir") |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1074 self.local_dir = await self.bridgeCall("getConfig", "", "local_dir") |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1075 self.cache_root_dir = os.path.join(self.local_dir, C.CACHE_DIR) |
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:
1131
diff
changeset
|
1076 self.renderer = template.Renderer(self, self._front_url_filter) |
1216 | 1077 sites_names = list(self.renderer.sites_paths.keys()) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1078 |
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:
1131
diff
changeset
|
1079 self._moveFirstLevelToDict(self.options, "url_redirections_dict", sites_names) |
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:
1131
diff
changeset
|
1080 self._moveFirstLevelToDict(self.options, "menu_json", sites_names) |
1359
2da573bf3f8b
server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents:
1354
diff
changeset
|
1081 self._moveFirstLevelToDict(self.options, "menu_extra_json", sites_names) |
2da573bf3f8b
server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents:
1354
diff
changeset
|
1082 menu = self.options["menu_json"] |
2da573bf3f8b
server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents:
1354
diff
changeset
|
1083 if not '' in menu: |
2da573bf3f8b
server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents:
1354
diff
changeset
|
1084 menu[''] = C.DEFAULT_MENU |
2da573bf3f8b
server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents:
1354
diff
changeset
|
1085 for site, value in self.options["menu_extra_json"].items(): |
2da573bf3f8b
server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents:
1354
diff
changeset
|
1086 menu[site].extend(value) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1087 |
1362
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1088 # service profile |
1370 | 1089 if not self.options['build-only']: |
1369
b5f2565c4bac
server: don't check or connect service profile when `--build-only` is set
Goffi <goffi@goffi.org>
parents:
1368
diff
changeset
|
1090 await self.checkAndConnectServiceProfile() |
1362
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1091 |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1092 # restricted bridge, the one used by browser code |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1093 self.restricted_bridge = RestrictedBridge(self) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1094 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1095 # we create virtual hosts and import Libervia pages into them |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1096 self.vhost_root = vhost.NameVirtualHost() |
1253
6d49fae517ba
pages: browser metadata + root `_browser`:
Goffi <goffi@goffi.org>
parents:
1251
diff
changeset
|
1097 default_site_path = Path(libervia.__file__).parent.resolve() |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1098 # self.sat_root is official Libervia site |
1253
6d49fae517ba
pages: browser metadata + root `_browser`:
Goffi <goffi@goffi.org>
parents:
1251
diff
changeset
|
1099 root_path = default_site_path / C.TEMPLATE_STATIC_DIR |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1100 self.sat_root = default_root = LiberviaRootResource( |
1246 | 1101 host=self, host_name='', site_name='', |
1102 site_path=default_site_path, path=root_path) | |
1364
df40708c4c76
server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents:
1362
diff
changeset
|
1103 if self.options['dev-mode']: |
1153 | 1104 self.files_watcher.watchDir( |
1105 default_site_path, auto_add=True, recursive=True, | |
1106 callback=LiberviaPage.onFileChange, site_root=self.sat_root, | |
1107 site_path=default_site_path) | |
1245 | 1108 LiberviaPage.importPages(self, self.sat_root) |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1109 tasks_manager = TasksManager(self, self.sat_root) |
1245 | 1110 await tasks_manager.parseTasks() |
1111 await tasks_manager.runTasks() | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1112 # FIXME: handle _setMenu in a more generic way, taking care of external sites |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
1113 await self.sat_root._setMenu(self.options["menu_json"]) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1114 self.vhost_root.default = default_root |
1216 | 1115 existing_vhosts = {b'': default_root} |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1116 |
1216 | 1117 for host_name, site_name in self.options["vhosts_dict"].items(): |
1246 | 1118 if site_name == C.SITE_NAME_DEFAULT: |
1119 raise ValueError( | |
1120 f"{C.DEFAULT_SITE_NAME} is reserved and can't be used in vhosts_dict") | |
1216 | 1121 encoded_site_name = site_name.encode('utf-8') |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1122 try: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1123 site_path = self.renderer.sites_paths[site_name] |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1124 except KeyError: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1125 log.warning(_( |
1216 | 1126 "host {host_name} link to non existing site {site_name}, ignoring " |
1127 "it").format(host_name=host_name, site_name=site_name)) | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1128 continue |
1216 | 1129 if encoded_site_name in existing_vhosts: |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1130 # we have an alias host, we re-use existing resource |
1216 | 1131 res = existing_vhosts[encoded_site_name] |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1132 else: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1133 # for root path we first check if there is a global static dir |
1257
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1134 # if not, we use default template's static dir |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1135 root_path = os.path.join(site_path, C.TEMPLATE_STATIC_DIR) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1136 if not os.path.isdir(root_path): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1137 root_path = os.path.join( |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1138 site_path, C.TEMPLATE_TPL_DIR, C.TEMPLATE_THEME_DEFAULT, |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1139 C.TEMPLATE_STATIC_DIR) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1140 res = LiberviaRootResource( |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1141 host=self, |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1142 host_name=host_name, |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1143 site_name=site_name, |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1144 site_path=site_path, |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1145 path=root_path) |
1153 | 1146 |
1216 | 1147 existing_vhosts[encoded_site_name] = res |
1191 | 1148 |
1364
df40708c4c76
server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents:
1362
diff
changeset
|
1149 if self.options['dev-mode']: |
1153 | 1150 self.files_watcher.watchDir( |
1151 site_path, auto_add=True, recursive=True, | |
1152 callback=LiberviaPage.onFileChange, site_root=res, | |
1153 site_path=site_path) | |
1191 | 1154 |
1155 LiberviaPage.importPages(self, res) | |
1156 # FIXME: default pages are accessible if not overriden by external website | |
1157 # while necessary for login or re-using existing pages | |
1158 # we may want to disable access to the page by direct URL | |
1159 # (e.g. /blog disabled except if called by external site) | |
1160 LiberviaPage.importPages(self, res, root_path=default_site_path) | |
1245 | 1161 tasks_manager = TasksManager(self, res) |
1162 await tasks_manager.parseTasks() | |
1163 await tasks_manager.runTasks() | |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
1164 await res._setMenu(self.options["menu_json"]) |
1191 | 1165 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1166 self.vhost_root.addHost(host_name.encode('utf-8'), res) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1167 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1168 templates_res = web_resource.Resource() |
1216 | 1169 self.putChildAll(C.TPL_RESOURCE.encode('utf-8'), templates_res) |
1170 for site_name, site_path in self.renderer.sites_paths.items(): | |
1292
e30e96958fb7
server: use C.SITE_NAME_DEFAULT instead of "sat" when suitable
Goffi <goffi@goffi.org>
parents:
1287
diff
changeset
|
1171 templates_res.putChild(site_name.encode() or C.SITE_NAME_DEFAULT.encode(), |
e30e96958fb7
server: use C.SITE_NAME_DEFAULT instead of "sat" when suitable
Goffi <goffi@goffi.org>
parents:
1287
diff
changeset
|
1172 static.File(site_path)) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1173 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1174 d = self.bridgeCall("namespacesGet") |
985
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
1175 d.addCallback(self._namespacesGetCb) |
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
1176 d.addErrback(self._namespacesGetEb) |
858 | 1177 |
995 | 1178 # websocket |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1179 if self.options["connection_type"] in ("https", "both"): |
995 | 1180 wss = websockets.LiberviaPageWSProtocol.getResource(self, secure=True) |
1216 | 1181 self.putChildAll(b'wss', wss) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1182 if self.options["connection_type"] in ("http", "both"): |
995 | 1183 ws = websockets.LiberviaPageWSProtocol.getResource(self, secure=False) |
1216 | 1184 self.putChildAll(b'ws', ws) |
995 | 1185 |
1186 ## following signal is needed for cache handling in Libervia pages | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1187 self.bridge.register_signal( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1188 "psEventRaw", partial(LiberviaPage.onNodeEvent, self), "plugin" |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1189 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1190 self.bridge.register_signal( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1191 "messageNew", partial(LiberviaPage.onSignal, self, "messageNew") |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1192 ) |
917 | 1193 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1194 # Progress handling |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1195 self.bridge.register_signal( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1196 "progressStarted", partial(ProgressHandler._signal, "started") |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1197 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1198 self.bridge.register_signal( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1199 "progressFinished", partial(ProgressHandler._signal, "finished") |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1200 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1201 self.bridge.register_signal( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1202 "progressError", partial(ProgressHandler._signal, "error") |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1203 ) |
1063
4b69f69c6ffd
server: new ProgressHandler helper class, to handle progressing actions
Goffi <goffi@goffi.org>
parents:
1055
diff
changeset
|
1204 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1205 # media dirs |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1206 # FIXME: get rid of dirname and "/" in C.XXX_DIR |
1216 | 1207 self.putChildAll(os.path.dirname(C.MEDIA_DIR).encode('utf-8'), |
1208 ProtectedFile(self.media_dir)) | |
1242
8f39d98416c5
server: added a child for common cache
Goffi <goffi@goffi.org>
parents:
1240
diff
changeset
|
1209 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1210 self.cache_resource = web_resource.NoResource() |
1216 | 1211 self.putChildAll(C.CACHE_DIR.encode('utf-8'), self.cache_resource) |
1242
8f39d98416c5
server: added a child for common cache
Goffi <goffi@goffi.org>
parents:
1240
diff
changeset
|
1212 self.cache_resource.putChild( |
8f39d98416c5
server: added a child for common cache
Goffi <goffi@goffi.org>
parents:
1240
diff
changeset
|
1213 b"common", ProtectedFile(str(self.cache_root_dir / Path("common")))) |
858 | 1214 |
1037 | 1215 # redirections |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1216 for root in self.roots: |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
1217 await root._initRedirections(self.options) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1218 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1219 # no need to keep url_redirections_dict, it will not be used anymore |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1220 del self.options["url_redirections_dict"] |
858 | 1221 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1222 server.Request.defaultContentType = "text/html; charset=utf-8" |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1223 wrapped = web_resource.EncodingResourceWrapper( |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1224 self.vhost_root, [server.GzipEncoderFactory()] |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1225 ) |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1226 self.site = server.Site(wrapped) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1227 self.site.sessionFactory = LiberviaSession |
444
b64e528fb524
server side: use of bridge's getReady to be sure that backend is initialised at launch
Goffi <goffi@goffi.org>
parents:
438
diff
changeset
|
1228 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1229 def _bridgeCb(self): |
1367
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1230 del self._bridge_retry |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1231 self.bridge.getReady( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1232 lambda: self.initialised.callback(None), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1233 lambda failure: self.initialised.errback(Exception(failure)), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1234 ) |
1245 | 1235 self.initialised.addCallback(lambda __: defer.ensureDeferred(self.backendReady())) |
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:
330
diff
changeset
|
1236 |
1126
7cd89277a129
server: fixed missing backend detection
Goffi <goffi@goffi.org>
parents:
1124
diff
changeset
|
1237 def _bridgeEb(self, failure_): |
7cd89277a129
server: fixed missing backend detection
Goffi <goffi@goffi.org>
parents:
1124
diff
changeset
|
1238 if isinstance(failure_, BridgeExceptionNoService): |
1367
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1239 if self._bridge_retry: |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1240 if self._bridge_retry < 0: |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1241 print(_("Can't connect to bridge, will retry indefinitely. " |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1242 "Next try in 1s.")) |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1243 else: |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1244 self._bridge_retry -= 1 |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1245 print( |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1246 _( |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1247 "Can't connect to bridge, will retry in 1 s ({retries_left} " |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1248 "trie(s) left)." |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1249 ).format(retries_left=self._bridge_retry) |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1250 ) |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1251 time.sleep(1) |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1252 self.bridge.bridgeConnect(callback=self._bridgeCb, errback=self._bridgeEb) |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1253 return |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1254 |
1216 | 1255 print("Can't connect to SàT backend, are you sure it's launched ?") |
1126
7cd89277a129
server: fixed missing backend detection
Goffi <goffi@goffi.org>
parents:
1124
diff
changeset
|
1256 else: |
1216 | 1257 log.error("Can't connect to bridge: {}".format(failure)) |
1126
7cd89277a129
server: fixed missing backend detection
Goffi <goffi@goffi.org>
parents:
1124
diff
changeset
|
1258 sys.exit(1) |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1259 |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1260 @property |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1261 def version(self): |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1262 """Return the short version of Libervia""" |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1263 return C.APP_VERSION |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1264 |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1265 @property |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1266 def full_version(self): |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1267 """Return the full version of Libervia (with extra data when in dev mode)""" |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1268 version = self.version |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1269 if version[-1] == "D": |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1270 # we are in debug version, we add extra data |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1271 try: |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1272 return self._version_cache |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1273 except AttributeError: |
1216 | 1274 self._version_cache = "{} ({})".format( |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1275 version, utils.getRepositoryData(libervia) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1276 ) |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1277 return self._version_cache |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1278 else: |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1279 return version |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1280 |
935
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1281 def bridgeCall(self, method_name, *args, **kwargs): |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1282 """Call an asynchronous bridge method and return a deferred |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1283 |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1284 @param method_name: name of the method as a unicode |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1285 @return: a deferred which trigger the result |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1286 |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1287 """ |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1288 d = defer.Deferred() |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1289 |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1290 def _callback(*args): |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1291 if not args: |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1292 d.callback(None) |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1293 else: |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1294 if len(args) != 1: |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1295 Exception("Multiple return arguments not supported") |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1296 d.callback(args[0]) |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1297 |
1138
ef565839dada
server: don't convert failure in errback to jsonrpclib.Fault anymore:
Goffi <goffi@goffi.org>
parents:
1132
diff
changeset
|
1298 def _errback(failure_): |
ef565839dada
server: don't convert failure in errback to jsonrpclib.Fault anymore:
Goffi <goffi@goffi.org>
parents:
1132
diff
changeset
|
1299 d.errback(failure.Failure(failure_)) |
935
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1300 |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1301 kwargs["callback"] = _callback |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1302 kwargs["errback"] = _errback |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1303 getattr(self.bridge, method_name)(*args, **kwargs) |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1304 return d |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
1305 |
1266
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1306 async def _logged(self, profile, request): |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1307 """Set everything when a user just logged in |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1308 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1309 @param profile |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1310 @param request |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1311 @return: a constant indicating the state: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1312 - C.PROFILE_LOGGED |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1313 - C.PROFILE_LOGGED_EXT_JID |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1314 @raise exceptions.ConflictError: session is already active |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1315 """ |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1316 register_with_ext_jid = self.waiting_profiles.getRegisterWithExtJid(profile) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1317 self.waiting_profiles.purgeRequest(profile) |
1090
9c41b7e91172
server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents:
1066
diff
changeset
|
1318 session = request.getSession() |
9c41b7e91172
server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents:
1066
diff
changeset
|
1319 sat_session = session_iface.ISATSession(session) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1320 if sat_session.profile: |
1216 | 1321 log.error(_("/!\\ Session has already a profile, this should NEVER happen!")) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1322 raise failure.Failure(exceptions.ConflictError("Already active")) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1323 |
1305
db9ea167c409
pages: `profile` is now exposed to scripts
Goffi <goffi@goffi.org>
parents:
1293
diff
changeset
|
1324 # XXX: we force string because python D-Bus has its own string type (dbus.String) |
db9ea167c409
pages: `profile` is now exposed to scripts
Goffi <goffi@goffi.org>
parents:
1293
diff
changeset
|
1325 # which may cause trouble when exposing it to scripts |
db9ea167c409
pages: `profile` is now exposed to scripts
Goffi <goffi@goffi.org>
parents:
1293
diff
changeset
|
1326 sat_session.profile = str(profile) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1327 self.prof_connected.add(profile) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1328 cache_dir = os.path.join( |
1216 | 1329 self.cache_root_dir, "profiles", regex.pathEscape(profile) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1330 ) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1331 # FIXME: would be better to have a global /cache URL which redirect to |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1332 # profile's cache directory, without uuid |
1216 | 1333 self.cache_resource.putChild(sat_session.uuid.encode('utf-8'), |
1334 ProtectedFile(cache_dir)) | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1335 log.debug( |
1216 | 1336 _("profile cache resource added from {uuid} to {path}").format( |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1337 uuid=sat_session.uuid, path=cache_dir |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1338 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1339 ) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1340 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1341 def onExpire(): |
1216 | 1342 log.info("Session expired (profile={profile})".format(profile=profile)) |
1343 self.cache_resource.delEntity(sat_session.uuid.encode('utf-8')) | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1344 log.debug( |
1216 | 1345 _("profile cache resource {uuid} deleted").format(uuid=sat_session.uuid) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1346 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1347 # and now we disconnect the profile |
1098
01e95ec9df9e
server, pages: fixed blocking calls to bridge by using bridgeCall instead
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
1348 self.bridgeCall("disconnect", profile) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1349 |
1090
9c41b7e91172
server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents:
1066
diff
changeset
|
1350 session.notifyOnExpire(onExpire) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1351 |
1090
9c41b7e91172
server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents:
1066
diff
changeset
|
1352 # FIXME: those session infos should be returned by connect or isConnected |
1266
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1353 infos = await self.bridgeCall("sessionInfosGet", profile) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1354 sat_session.jid = jid.JID(infos["jid"]) |
1266
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1355 own_bare_jid_s = sat_session.jid.userhost() |
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1356 own_id_raw = await self.bridgeCall( |
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1357 "identityGet", own_bare_jid_s, [], True, profile) |
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1358 sat_session.identities[own_bare_jid_s] = data_format.deserialise(own_id_raw) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1359 sat_session.backend_started = int(infos["started"]) |
1090
9c41b7e91172
server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents:
1066
diff
changeset
|
1360 |
9c41b7e91172
server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents:
1066
diff
changeset
|
1361 state = C.PROFILE_LOGGED_EXT_JID if register_with_ext_jid else C.PROFILE_LOGGED |
1266
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1362 return state |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1363 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1364 @defer.inlineCallbacks |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1365 def connect(self, request, login, password): |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1366 """log user in |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1367 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1368 If an other user was already logged, it will be unlogged first |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1369 @param request(server.Request): request linked to the session |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1370 @param login(unicode): user login |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1371 can be profile name |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1372 can be profile@[libervia_domain.ext] |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1373 can be a jid (a new profile will be created with this jid if needed) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1374 @param password(unicode): user password |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1375 @return (unicode, None): C.SESSION_ACTIVE: if session was aleady active else |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1376 self._logged value |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1377 @raise exceptions.DataError: invalid login |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1378 @raise exceptions.ProfileUnknownError: this login doesn't exist |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1379 @raise exceptions.PermissionError: a login is not accepted (e.g. empty password |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1380 not allowed) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1381 @raise exceptions.NotReady: a profile connection is already waiting |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1382 @raise exceptions.TimeoutError: didn't received and answer from Bridge |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1383 @raise exceptions.InternalError: unknown error |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1384 @raise ValueError(C.PROFILE_AUTH_ERROR): invalid login and/or password |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1385 @raise ValueError(C.XMPP_AUTH_ERROR): invalid XMPP account password |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1386 """ |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1387 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1388 # XXX: all security checks must be done here, even if present in javascript |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1389 if login.startswith("@"): |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1390 raise failure.Failure(exceptions.DataError("No profile_key allowed")) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1391 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1392 if login.startswith("guest@@") and login.count("@") == 2: |
1100
5976dcd42591
pages (g): use server's connect method to connect instead of bridge, this way normal Libervia workflow is used, and session attributes are initialised.
Goffi <goffi@goffi.org>
parents:
1099
diff
changeset
|
1393 log.debug("logging a guest account") |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1394 elif "@" in login: |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1395 if login.count("@") != 1: |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1396 raise failure.Failure( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1397 exceptions.DataError("Invalid login: {login}".format(login=login)) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1398 ) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1399 try: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1400 login_jid = jid.JID(login) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1401 except (RuntimeError, jid.InvalidFormat, AttributeError): |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1402 raise failure.Failure(exceptions.DataError("No profile_key allowed")) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1403 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1404 # FIXME: should it be cached? |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1405 new_account_domain = yield self.bridgeCall("getNewAccountDomain") |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1406 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1407 if login_jid.host == new_account_domain: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1408 # redirect "user@libervia.org" to the "user" profile |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1409 login = login_jid.user |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1410 login_jid = None |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1411 else: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1412 login_jid = None |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1413 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1414 try: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1415 profile = yield self.bridgeCall("profileNameGet", login) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1416 except Exception: # XXX: ProfileUnknownError wouldn't work, it's encapsulated |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1417 # FIXME: find a better way to handle bridge errors |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1418 if ( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1419 login_jid is not None and login_jid.user |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1420 ): # try to create a new sat profile using the XMPP credentials |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1421 if not self.options["allow_registration"]: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1422 log.warning( |
1216 | 1423 "Trying to register JID account while registration is not " |
1424 "allowed") | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1425 raise failure.Failure( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1426 exceptions.DataError( |
1216 | 1427 "JID login while registration is not allowed" |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1428 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1429 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1430 profile = login # FIXME: what if there is a resource? |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1431 connect_method = "asyncConnectWithXMPPCredentials" |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1432 register_with_ext_jid = True |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1433 else: # non existing username |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1434 raise failure.Failure(exceptions.ProfileUnknownError()) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1435 else: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1436 if profile != login or ( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1437 not password |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1438 and profile |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1439 not in self.options["empty_password_allowed_warning_dangerous_list"] |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1440 ): |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1441 # profiles with empty passwords are restricted to local frontends |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1442 raise exceptions.PermissionError |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1443 register_with_ext_jid = False |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1444 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1445 connect_method = "connect" |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1446 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1447 # we check if there is not already an active session |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1448 sat_session = session_iface.ISATSession(request.getSession()) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1449 if sat_session.profile: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1450 # yes, there is |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1451 if sat_session.profile != profile: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1452 # it's a different profile, we need to disconnect it |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1453 log.warning(_( |
1216 | 1454 "{new_profile} requested login, but {old_profile} was already " |
1455 "connected, disconnecting {old_profile}").format( | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1456 old_profile=sat_session.profile, new_profile=profile)) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1457 self.purgeSession(request) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1458 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1459 if self.waiting_profiles.getRequest(profile): |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1460 # FIXME: check if and when this can happen |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1461 raise failure.Failure(exceptions.NotReady("Already waiting")) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1462 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1463 self.waiting_profiles.setRequest(request, profile, register_with_ext_jid) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1464 try: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1465 connected = yield self.bridgeCall(connect_method, profile, password) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1466 except Exception as failure_: |
1204
a2df53dfbf46
server: handle unexpected exceptions on connect:
Goffi <goffi@goffi.org>
parents:
1203
diff
changeset
|
1467 fault = getattr(failure_, 'classname', None) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1468 self.waiting_profiles.purgeRequest(profile) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1469 if fault in ("PasswordError", "ProfileUnknownError"): |
1216 | 1470 log.info("Profile {profile} doesn't exist or the submitted password is " |
1471 "wrong".format( profile=profile)) | |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1472 raise failure.Failure(ValueError(C.PROFILE_AUTH_ERROR)) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1473 elif fault == "SASLAuthError": |
1216 | 1474 log.info("The XMPP password of profile {profile} is wrong" |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1475 .format(profile=profile)) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1476 raise failure.Failure(ValueError(C.XMPP_AUTH_ERROR)) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1477 elif fault == "NoReply": |
1216 | 1478 log.info(_("Did not receive a reply (the timeout expired or the " |
1479 "connection is broken)")) | |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1480 raise exceptions.TimeOutError |
1204
a2df53dfbf46
server: handle unexpected exceptions on connect:
Goffi <goffi@goffi.org>
parents:
1203
diff
changeset
|
1481 elif fault is None: |
1216 | 1482 log.info(_("Unexepected failure: {failure_}").format(failure_=failure)) |
1204
a2df53dfbf46
server: handle unexpected exceptions on connect:
Goffi <goffi@goffi.org>
parents:
1203
diff
changeset
|
1483 raise failure_ |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1484 else: |
1216 | 1485 log.error('Unmanaged fault class "{fault}" in errback for the ' |
1486 'connection of profile {profile}'.format( | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1487 fault=fault, profile=profile)) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1488 raise failure.Failure(exceptions.InternalError(fault)) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1489 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1490 if connected: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1491 # profile is already connected in backend |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1492 # do we have a corresponding session in Libervia? |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1493 sat_session = session_iface.ISATSession(request.getSession()) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1494 if sat_session.profile: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1495 # yes, session is active |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1496 if sat_session.profile != profile: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1497 # existing session should have been ended above |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1498 # so this line should never be reached |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1499 log.error(_( |
1216 | 1500 "session profile [{session_profile}] differs from login " |
1501 "profile [{profile}], this should not happen!") | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1502 .format(session_profile=sat_session.profile, profile=profile)) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1503 raise exceptions.InternalError("profile mismatch") |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1504 defer.returnValue(C.SESSION_ACTIVE) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1505 log.info( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1506 _( |
1216 | 1507 "profile {profile} was already connected in backend".format( |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1508 profile=profile |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1509 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1510 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1511 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1512 # no, we have to create it |
1090
9c41b7e91172
server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents:
1066
diff
changeset
|
1513 |
1266
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1514 state = yield defer.ensureDeferred(self._logged(profile, request)) |
1090
9c41b7e91172
server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents:
1066
diff
changeset
|
1515 defer.returnValue(state) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1516 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1517 def registerNewAccount(self, request, login, password, email): |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1518 """Create a new account, or return error |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1519 @param request(server.Request): request linked to the session |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1520 @param login(unicode): new account requested login |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1521 @param email(unicode): new account email |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1522 @param password(unicode): new account password |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1523 @return(unicode): a constant indicating the state: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1524 - C.BAD_REQUEST: something is wrong in the request (bad arguments) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1525 - C.INVALID_INPUT: one of the data is not valid |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1526 - C.REGISTRATION_SUCCEED: new account has been successfully registered |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1527 - C.ALREADY_EXISTS: the given profile already exists |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1528 - C.INTERNAL_ERROR or any unmanaged fault string |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1529 @raise PermissionError: registration is now allowed in server configuration |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1530 """ |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1531 if not self.options["allow_registration"]: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1532 log.warning( |
1216 | 1533 _("Registration received while it is not allowed, hack attempt?") |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1534 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1535 raise failure.Failure( |
1216 | 1536 exceptions.PermissionError("Registration is not allowed on this server") |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1537 ) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1538 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1539 if ( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1540 not re.match(C.REG_LOGIN_RE, login) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1541 or not re.match(C.REG_EMAIL_RE, email, re.IGNORECASE) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1542 or len(password) < C.PASSWORD_MIN_LENGTH |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1543 ): |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1544 return C.INVALID_INPUT |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1545 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1546 def registered(result): |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1547 return C.REGISTRATION_SUCCEED |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1548 |
1184
eee7a896cf0e
server: show BridgeException traceback on unknown registering status
Goffi <goffi@goffi.org>
parents:
1182
diff
changeset
|
1549 def registeringError(failure_): |
1164
ef3adc3f2078
handle invalid certificate on registration + fixed error handling on registration
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
1550 # FIXME: better error handling for bridge error is needed |
1184
eee7a896cf0e
server: show BridgeException traceback on unknown registering status
Goffi <goffi@goffi.org>
parents:
1182
diff
changeset
|
1551 status = failure_.value.fullname.split('.')[-1] |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1552 if status == "ConflictError": |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1553 return C.ALREADY_EXISTS |
1164
ef3adc3f2078
handle invalid certificate on registration + fixed error handling on registration
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
1554 elif status == "InvalidCertificate": |
ef3adc3f2078
handle invalid certificate on registration + fixed error handling on registration
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
1555 return C.INVALID_CERTIFICATE |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1556 elif status == "InternalError": |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1557 return C.INTERNAL_ERROR |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1558 else: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1559 log.error( |
1216 | 1560 _("Unknown registering error status: {status}\n{traceback}").format( |
1184
eee7a896cf0e
server: show BridgeException traceback on unknown registering status
Goffi <goffi@goffi.org>
parents:
1182
diff
changeset
|
1561 status=status, traceback=failure_.value.message |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1562 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1563 ) |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1564 return status |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1565 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1566 d = self.bridgeCall("registerSatAccount", email, password, login) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1567 d.addCallback(registered) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1568 d.addErrback(registeringError) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1569 return d |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1570 |
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:
330
diff
changeset
|
1571 def addCleanup(self, callback, *args, **kwargs): |
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:
330
diff
changeset
|
1572 """Add cleaning method to call when service is stopped |
961
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1573 |
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:
330
diff
changeset
|
1574 cleaning method will be called in reverse order of they insertion |
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:
330
diff
changeset
|
1575 @param callback: callable to call on service stop |
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:
330
diff
changeset
|
1576 @param *args: list of arguments of the callback |
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:
330
diff
changeset
|
1577 @param **kwargs: list of keyword arguments of the callback""" |
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:
330
diff
changeset
|
1578 self._cleanup.insert(0, (callback, args, kwargs)) |
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:
330
diff
changeset
|
1579 |
1361
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1580 def initEb(self, failure): |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1581 from twisted.application import app |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1582 if failure.check(SysExit): |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1583 if failure.value.message: |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1584 log.error(failure.value.message) |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1585 app._exitCode = failure.value.exit_code |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1586 reactor.stop() |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1587 else: |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1588 log.error(_("Init error: {msg}").format(msg=failure)) |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1589 app._exitCode = C.EXIT_INTERNAL_ERROR |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1590 reactor.stop() |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1591 return failure |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1592 |
1368 | 1593 def _buildOnlyCb(self, __): |
1594 log.info(_("Stopping here due to --build-only flag")) | |
1595 self.stop() | |
1596 | |
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:
330
diff
changeset
|
1597 def startService(self): |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1598 """Connect the profile for Libervia and start the HTTP(S) server(s)""" |
1236 | 1599 self._init() |
1368 | 1600 if self.options['build-only']: |
1601 self.initialised.addCallback(self._buildOnlyCb) | |
1602 else: | |
1603 self.initialised.addCallback(self._startService) | |
1361
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1604 self.initialised.addErrback(self.initEb) |
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:
330
diff
changeset
|
1605 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1606 ## URLs ## |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
1607 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1608 def putChildSAT(self, path, resource): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1609 """Add a child to the sat resource""" |
1216 | 1610 if not isinstance(path, bytes): |
1611 raise ValueError("path must be specified in bytes") | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1612 self.sat_root.putChild(path, resource) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1613 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1614 def putChildAll(self, path, resource): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1615 """Add a child to all vhost root resources""" |
1216 | 1616 if not isinstance(path, bytes): |
1617 raise ValueError("path must be specified in bytes") | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1618 # we wrap before calling putChild, to avoid having useless multiple instances |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1619 # of the resource |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1620 # FIXME: check that no information is leaked (c.f. https://twistedmatrix.com/documents/current/web/howto/using-twistedweb.html#request-encoders) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1621 wrapped_res = web_resource.EncodingResourceWrapper( |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1622 resource, [server.GzipEncoderFactory()]) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1623 for root in self.roots: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1624 root.putChild(path, wrapped_res) |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1625 |
1257
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1626 def getBuildPath(self, site_name: str, dev: bool=False) -> Path: |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1627 """Generate build path for a given site name |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1628 |
1257
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1629 @param site_name: name of the site |
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1630 @param dev: return dev build dir if True, production one otherwise |
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1631 dev build dir is used for installing dependencies needed temporarily (e.g. |
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1632 to compile files), while production build path is the one served by the |
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1633 HTTP server, where final files are downloaded. |
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1634 @return: path to the build directory |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1635 """ |
1257
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1636 sub_dir = C.DEV_BUILD_DIR if dev else C.PRODUCTION_BUILD_DIR |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1637 build_path_elts = [ |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1638 config.getConfig(self.main_conf, "", "local_dir"), |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1639 C.CACHE_DIR, |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1640 C.LIBERVIA_CACHE, |
1257
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1641 sub_dir, |
1246 | 1642 regex.pathEscape(site_name or C.SITE_NAME_DEFAULT)] |
1643 build_path = Path("/".join(build_path_elts)) | |
1644 return build_path.expanduser().resolve() | |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1645 |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1646 def getExtBaseURLData(self, request): |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1647 """Retrieve external base URL Data |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1648 |
1435
396d5606477f
server (proxy): add "Forwarded" and "X-Forwarded-xxx" headers to reverse proxy
Goffi <goffi@goffi.org>
parents:
1397
diff
changeset
|
1649 this method try to retrieve the base URL found by external user |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1650 It does by checking in this order: |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1651 - base_url_ext option from configuration |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1652 - proxy x-forwarder-host headers |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1653 - URL of the request |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1654 @return (urlparse.SplitResult): SplitResult instance with only scheme and |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1655 netloc filled |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1656 """ |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1657 ext_data = self.base_url_ext_data |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1658 url_path = request.URLPath() |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1659 if not ext_data.scheme or not ext_data.netloc: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1660 # ext_data is not specified, we check headers |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1661 if request.requestHeaders.hasHeader("x-forwarded-host"): |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1662 # we are behing a proxy |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1663 # we fill proxy_scheme and proxy_netloc value |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1664 proxy_host = request.requestHeaders.getRawHeaders("x-forwarded-host")[0] |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1665 try: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1666 proxy_server = request.requestHeaders.getRawHeaders( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1667 "x-forwarded-server" |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1668 )[0] |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1669 except TypeError: |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1670 # no x-forwarded-server found, we use proxy_host |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1671 proxy_netloc = proxy_host |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1672 else: |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1673 # if the proxy host has a port, we use it with server name |
1216 | 1674 proxy_port = urllib.parse.urlsplit("//{}".format(proxy_host)).port |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1675 proxy_netloc = ( |
1216 | 1676 "{}:{}".format(proxy_server, proxy_port) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1677 if proxy_port is not None |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1678 else proxy_server |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1679 ) |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1680 try: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1681 proxy_scheme = request.requestHeaders.getRawHeaders( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1682 "x-forwarded-proto" |
1224
62bf4f87c249
server: some encoding fixes following python 3 port
Goffi <goffi@goffi.org>
parents:
1218
diff
changeset
|
1683 )[0] |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1684 except TypeError: |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1685 proxy_scheme = None |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1686 else: |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1687 proxy_scheme, proxy_netloc = None, None |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1688 else: |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1689 proxy_scheme, proxy_netloc = None, None |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1690 |
1216 | 1691 return urllib.parse.SplitResult( |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1692 ext_data.scheme or proxy_scheme or url_path.scheme.decode("utf-8"), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1693 ext_data.netloc or proxy_netloc or url_path.netloc.decode("utf-8"), |
1216 | 1694 ext_data.path or "/", |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1695 "", |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1696 "", |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1697 ) |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1698 |
1459
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1699 def getExtBaseURL( |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1700 self, |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1701 request: server.Request, |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1702 path: str = "", |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1703 query: str = "", |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1704 fragment: str = "", |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1705 scheme: Optional[str] = None, |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1706 ) -> str: |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1707 """Get external URL according to given elements |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1708 |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1709 external URL is the URL seen by external user |
1459
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1710 @param path: same as for urlsplit.urlsplit |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1711 path will be prefixed to follow found external URL if suitable |
1459
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1712 @param params: same as for urlsplit.urlsplit |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1713 @param query: same as for urlsplit.urlsplit |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1714 @param fragment: same as for urlsplit.urlsplit |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1715 @param scheme: if not None, will override scheme from base URL |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1716 @return: external URL |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1717 """ |
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1718 split_result = self.getExtBaseURLData(request) |
1216 | 1719 return urllib.parse.urlunsplit( |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1720 ( |
1216 | 1721 split_result.scheme if scheme is None else scheme, |
1722 split_result.netloc, | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1723 os.path.join(split_result.path, path), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1724 query, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1725 fragment, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1726 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1727 ) |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1728 |
1458
db13f5c768a0
server: `checkRedirection`: fix range variable + type hints + arg name:
Goffi <goffi@goffi.org>
parents:
1457
diff
changeset
|
1729 def checkRedirection(self, vhost_root: LiberviaRootResource, url_path: str) -> str: |
1037 | 1730 """check is a part of the URL prefix is redirected then replace it |
1731 | |
1458
db13f5c768a0
server: `checkRedirection`: fix range variable + type hints + arg name:
Goffi <goffi@goffi.org>
parents:
1457
diff
changeset
|
1732 @param vhost_root: root of this virtual host |
db13f5c768a0
server: `checkRedirection`: fix range variable + type hints + arg name:
Goffi <goffi@goffi.org>
parents:
1457
diff
changeset
|
1733 @param url_path: path of the url to check |
db13f5c768a0
server: `checkRedirection`: fix range variable + type hints + arg name:
Goffi <goffi@goffi.org>
parents:
1457
diff
changeset
|
1734 @return: possibly redirected URL which should link to the same location |
1037 | 1735 """ |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1736 inv_redirections = vhost_root.inv_redirections |
1458
db13f5c768a0
server: `checkRedirection`: fix range variable + type hints + arg name:
Goffi <goffi@goffi.org>
parents:
1457
diff
changeset
|
1737 url_parts = url_path.strip("/").split("/") |
db13f5c768a0
server: `checkRedirection`: fix range variable + type hints + arg name:
Goffi <goffi@goffi.org>
parents:
1457
diff
changeset
|
1738 for idx in range(len(url_parts), 0, -1): |
1216 | 1739 test_url = "/" + "/".join(url_parts[:idx]) |
1037 | 1740 if test_url in inv_redirections: |
1741 rem_url = url_parts[idx:] | |
1099
ea0d41ef3719
server: return absolute page in checkRedirection
Goffi <goffi@goffi.org>
parents:
1098
diff
changeset
|
1742 return os.path.join( |
1216 | 1743 "/", "/".join([inv_redirections[test_url]] + rem_url) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1744 ) |
1458
db13f5c768a0
server: `checkRedirection`: fix range variable + type hints + arg name:
Goffi <goffi@goffi.org>
parents:
1457
diff
changeset
|
1745 return url_path |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1746 |
920
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1747 ## Sessions ## |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1748 |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1749 def purgeSession(self, request): |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1750 """helper method to purge a session during request handling""" |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1751 session = request.session |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1752 if session is not None: |
1216 | 1753 log.debug(_("session purge")) |
920
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1754 session.expire() |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1755 # FIXME: not clean but it seems that it's the best way to reset |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1756 # session during request handling |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1757 request._secureSession = request._insecureSession = None |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1758 |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1759 def getSessionData(self, request, *args): |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1760 """helper method to retrieve session data |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1761 |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1762 @param request(server.Request): request linked to the session |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1763 @param *args(zope.interface.Interface): interface of the session to get |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1764 @return (iterator(data)): requested session data |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1765 """ |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1766 session = request.getSession() |
924
94f88277c2e7
libervia (pages): getSessionData return one session if used with one argument, else an iterator
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
1767 if len(args) == 1: |
94f88277c2e7
libervia (pages): getSessionData return one session if used with one argument, else an iterator
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
1768 return args[0](session) |
94f88277c2e7
libervia (pages): getSessionData return one session if used with one argument, else an iterator
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
1769 else: |
94f88277c2e7
libervia (pages): getSessionData return one session if used with one argument, else an iterator
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
1770 return (iface(session) for iface in args) |
920
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1771 |
1093
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1772 @defer.inlineCallbacks |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1773 def getAffiliation(self, request, service, node): |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1774 """retrieve pubsub node affiliation for current user |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1775 |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1776 use cache first, and request pubsub service if not cache is found |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1777 @param request(server.Request): request linked to the session |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1778 @param service(jid.JID): pubsub service |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1779 @param node(unicode): pubsub node |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1780 @return (unicode): affiliation |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1781 """ |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1782 sat_session = self.getSessionData(request, session_iface.ISATSession) |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1783 if sat_session.profile is None: |
1216 | 1784 raise exceptions.InternalError("profile must be set to use this method") |
1093
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1785 affiliation = sat_session.getAffiliation(service, node) |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1786 if affiliation is not None: |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1787 defer.returnValue(affiliation) |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1788 else: |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1789 try: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1790 affiliations = yield self.bridgeCall( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1791 "psAffiliationsGet", service.full(), node, sat_session.profile |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1792 ) |
1093
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1793 except Exception as e: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1794 log.warning( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1795 "Can't retrieve affiliation for {service}/{node}: {reason}".format( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1796 service=service, node=node, reason=e |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1797 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1798 ) |
1216 | 1799 affiliation = "" |
1093
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1800 else: |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1801 try: |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1802 affiliation = affiliations[node] |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1803 except KeyError: |
1216 | 1804 affiliation = "" |
1093
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1805 sat_session.setAffiliation(service, node, affiliation) |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1806 defer.returnValue(affiliation) |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1807 |
995 | 1808 ## Websocket (dynamic pages) ## |
1809 | |
1810 def getWebsocketURL(self, request): | |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1811 base_url_split = self.getExtBaseURLData(request) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1812 if base_url_split.scheme.endswith("s"): |
1216 | 1813 scheme = "wss" |
995 | 1814 else: |
1216 | 1815 scheme = "ws" |
995 | 1816 |
1006
d0b27d1e2d50
server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents:
1003
diff
changeset
|
1817 return self.getExtBaseURL(request, path=scheme, scheme=scheme) |
995 | 1818 |
1819 def registerWSToken(self, token, page, request): | |
1203
251eba911d4d
server (websockets): fixed websocket handling on HTTPS connections:
Goffi <goffi@goffi.org>
parents:
1202
diff
changeset
|
1820 # we make a shallow copy of request to avoid losing request.channel when |
251eba911d4d
server (websockets): fixed websocket handling on HTTPS connections:
Goffi <goffi@goffi.org>
parents:
1202
diff
changeset
|
1821 # connection is lost (which would result as request.isSecure() being always |
251eba911d4d
server (websockets): fixed websocket handling on HTTPS connections:
Goffi <goffi@goffi.org>
parents:
1202
diff
changeset
|
1822 # False). See #327 |
251eba911d4d
server (websockets): fixed websocket handling on HTTPS connections:
Goffi <goffi@goffi.org>
parents:
1202
diff
changeset
|
1823 request._signal_id = id(request) |
251eba911d4d
server (websockets): fixed websocket handling on HTTPS connections:
Goffi <goffi@goffi.org>
parents:
1202
diff
changeset
|
1824 websockets.LiberviaPageWSProtocol.registerToken(token, page, copy.copy(request)) |
995 | 1825 |
1019
34240d08f682
pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents:
1012
diff
changeset
|
1826 ## Various utils ## |
34240d08f682
pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents:
1012
diff
changeset
|
1827 |
34240d08f682
pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents:
1012
diff
changeset
|
1828 def getHTTPDate(self, timestamp=None): |
34240d08f682
pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents:
1012
diff
changeset
|
1829 now = time.gmtime(timestamp) |
1216 | 1830 fmt_date = "{day_name}, %d {month_name} %Y %H:%M:%S GMT".format( |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1831 day_name=C.HTTP_DAYS[now.tm_wday], month_name=C.HTTP_MONTH[now.tm_mon - 1] |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1832 ) |
1019
34240d08f682
pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents:
1012
diff
changeset
|
1833 return time.strftime(fmt_date, now) |
34240d08f682
pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents:
1012
diff
changeset
|
1834 |
813
6e27604ec95a
server: added --tls_private_key and --tls_chain options. --tls_certificate .pem file will be used for private_key if --tls_private_key is not specified.
Goffi <goffi@goffi.org>
parents:
812
diff
changeset
|
1835 ## service management ## |
6e27604ec95a
server: added --tls_private_key and --tls_chain options. --tls_certificate .pem file will be used for private_key if --tls_private_key is not specified.
Goffi <goffi@goffi.org>
parents:
812
diff
changeset
|
1836 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1837 def _startService(self, __=None): |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
1838 """Actually start the HTTP(S) server(s) after the profile for Libervia is connected. |
813
6e27604ec95a
server: added --tls_private_key and --tls_chain options. --tls_certificate .pem file will be used for private_key if --tls_private_key is not specified.
Goffi <goffi@goffi.org>
parents:
812
diff
changeset
|
1839 |
6e27604ec95a
server: added --tls_private_key and --tls_chain options. --tls_certificate .pem file will be used for private_key if --tls_private_key is not specified.
Goffi <goffi@goffi.org>
parents:
812
diff
changeset
|
1840 @raise ImportError: OpenSSL is not available |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
1841 @raise IOError: the certificate file doesn't exist |
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
1842 @raise OpenSSL.crypto.Error: the certificate file is invalid |
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
1843 """ |
950
67a59552f3e3
server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents:
937
diff
changeset
|
1844 # now that we have service profile connected, we add resource for its cache |
67a59552f3e3
server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents:
937
diff
changeset
|
1845 service_path = regex.pathEscape(C.SERVICE_PROFILE) |
1216 | 1846 cache_dir = os.path.join(self.cache_root_dir, "profiles", service_path) |
1847 self.cache_resource.putChild(service_path.encode('utf-8'), | |
1848 ProtectedFile(cache_dir)) | |
1849 self.service_cache_url = "/" + os.path.join(C.CACHE_DIR, service_path) | |
1055
c2037b44f84e
server: fixed cache_dir for service profile in session interface
Goffi <goffi@goffi.org>
parents:
1054
diff
changeset
|
1850 session_iface.SATSession.service_cache_url = self.service_cache_url |
950
67a59552f3e3
server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents:
937
diff
changeset
|
1851 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1852 if self.options["connection_type"] in ("https", "both"): |
1274
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1853 try: |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1854 tls.TLSOptionsCheck(self.options) |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1855 context_factory = tls.getTLSContextFactory(self.options) |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1856 except exceptions.ConfigError as e: |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1857 log.warning( |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1858 f"There is a problem in TLS settings in your configuration file: {e}") |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1859 self.quit(2) |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1860 except exceptions.DataError as e: |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1861 log.warning( |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1862 f"Can't set TLS: {e}") |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1863 self.quit(1) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1864 reactor.listenSSL(self.options["port_https"], self.site, context_factory) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1865 if self.options["connection_type"] in ("http", "both"): |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1866 if ( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1867 self.options["connection_type"] == "both" |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1868 and self.options["redirect_to_https"] |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1869 ): |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1870 reactor.listenTCP( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1871 self.options["port"], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1872 server.Site( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1873 RedirectToHTTPS( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1874 self.options["port"], self.options["port_https_ext"] |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1875 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1876 ), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1877 ) |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1878 else: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1879 reactor.listenTCP(self.options["port"], self.site) |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1880 |
1108
7ec1ba86d38d
server: replaced blocking calls to bridge by bridgeCall which is not blocking
Goffi <goffi@goffi.org>
parents:
1106
diff
changeset
|
1881 @defer.inlineCallbacks |
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:
330
diff
changeset
|
1882 def stopService(self): |
473
d1565906f228
server_side: fixed some forgotten print statement
Goffi <goffi@goffi.org>
parents:
472
diff
changeset
|
1883 log.info(_("launching cleaning methods")) |
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:
330
diff
changeset
|
1884 for callback, args, kwargs in self._cleanup: |
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:
330
diff
changeset
|
1885 callback(*args, **kwargs) |
859
0e9341e537d6
server: catch exceptions on service profile connection check, and show an helping message if an error is caught
Goffi <goffi@goffi.org>
parents:
858
diff
changeset
|
1886 try: |
1108
7ec1ba86d38d
server: replaced blocking calls to bridge by bridgeCall which is not blocking
Goffi <goffi@goffi.org>
parents:
1106
diff
changeset
|
1887 yield self.bridgeCall("disconnect", C.SERVICE_PROFILE) |
859
0e9341e537d6
server: catch exceptions on service profile connection check, and show an helping message if an error is caught
Goffi <goffi@goffi.org>
parents:
858
diff
changeset
|
1888 except Exception: |
1216 | 1889 log.warning("Can't disconnect service profile") |
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:
330
diff
changeset
|
1890 |
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:
330
diff
changeset
|
1891 def run(self): |
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:
330
diff
changeset
|
1892 reactor.run() |
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:
330
diff
changeset
|
1893 |
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:
330
diff
changeset
|
1894 def stop(self): |
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:
330
diff
changeset
|
1895 reactor.stop() |
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:
330
diff
changeset
|
1896 |
812
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
1897 def quit(self, exit_code=None): |
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
1898 """Exit app when reactor is running |
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
1899 |
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
1900 @param exit_code(None, int): exit code |
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
1901 """ |
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
1902 self.stop() |
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
1903 sys.exit(exit_code or 0) |
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
1904 |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1905 |
858 | 1906 class RedirectToHTTPS(web_resource.Resource): |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1907 def __init__(self, old_port, new_port): |
858 | 1908 web_resource.Resource.__init__(self) |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1909 self.isLeaf = True |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1910 self.old_port = old_port |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1911 self.new_port = new_port |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1912 |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1913 def render(self, request): |
1354 | 1914 netloc = request.URLPath().netloc.decode().replace( |
1915 f":{self.old_port}", f":{self.new_port}" | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1916 ) |
1354 | 1917 url = f"https://{netloc}{request.uri.decode()}" |
1918 return web_util.redirectTo(url.encode(), request) | |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1919 |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1920 |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
1921 registerAdapter(session_iface.SATSession, server.Session, session_iface.ISATSession) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1922 registerAdapter( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1923 session_iface.SATGuestSession, server.Session, session_iface.ISATGuestSession |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1924 ) |