Mercurial > libervia-web
annotate libervia/server/server.py @ 1504:409d10211b20
server, browser: dynamic pages refactoring:
dynamic pages has been reworked, to change the initial basic implementation.
Pages are now dynamic by default, and a websocket is established by the first connected
page of a session. The socket is used to transmit bridge signals, and then the signal is
broadcasted to other tabs using broadcast channel.
If the connecting tab is closed, an other one is chosen.
Some tests are made to retry connecting in case of problem, and sometimes reload the pages
(e.g. if profile is connected).
Signals (or other data) are cached during reconnection phase, to avoid lost of data.
All previous partial rendering mechanism have been removed, chat page is temporarily not
working anymore, but will be eventually redone (one of the goal of this work is to have
proper chat).
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 01 Mar 2023 18:02:44 +0100 |
parents | 6643855770a5 |
children | a169cbc315f0 |
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 |
1484
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
520 elif new_url.scheme == "proxy": |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
521 # a reverse proxy |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
522 host, port = new_url.hostname, new_url.port |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
523 if host is None or port is None: |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
524 raise ValueError( |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
525 "invalid host or port in proxy redirection, please check your " |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
526 "configuration: {new_url.geturl()}" |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
527 ) |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
528 url_prefix = (new_url.path or old).rstrip('/') |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
529 res = proxy.SatReverseProxyResource( |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
530 host, |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
531 port, |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
532 url_prefix.encode(), |
1454
fc91b78b71db
server: handle "proxy" scheme in configuration
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
533 ) |
1484
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
534 self.addResourceToPath(old, res) |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
535 log.info( |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
536 f"[{self.host_name}] Added redirection from /{old} to reverse proxy " |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
537 f"{new_url.netloc} with URL prefix {url_prefix}/" |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
538 ) |
1454
fc91b78b71db
server: handle "proxy" scheme in configuration
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
539 |
1484
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
540 # normal redirection system is not used here |
6643855770a5
server: fix indentation following merge
Goffi <goffi@goffi.org>
parents:
1483
diff
changeset
|
541 continue |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
542 else: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
543 raise NotImplementedError( |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
544 "{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
|
545 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
|
546 ) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
547 ) |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
548 |
1457
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
549 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
|
550 if not old: |
792a2e902ee9
server: fix inverse URL redirection for root path + allow multiple inverse redirections:
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
551 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
|
552 .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
|
553 uri=request_data[1])) |
858 | 554 |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
555 # the default root URL, if not redirected |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
556 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
|
557 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
|
558 |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
559 async def _setMenu(self, menus): |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
560 menus = menus.get(self.site_name, []) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
561 main_menu = [] |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
562 for menu in menus: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
563 if not menu: |
1216 | 564 msg = _("menu item can't be empty") |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
565 log.error(msg) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
566 raise ValueError(msg) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
567 elif isinstance(menu, list): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
568 if len(menu) != 2: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
569 msg = _( |
1216 | 570 "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
|
571 ) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
572 log.error(msg) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
573 raise ValueError(msg) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
574 page_name, url = menu |
1460
0ea54090e414
server: renamed `sat-app` to `libervia-app` following global renaming
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
575 elif menu.startswith("libervia-app:"): |
1462
87e48b6a1bbd
server: fix `libervia-app` name parsing following prefix change
Goffi <goffi@goffi.org>
parents:
1460
diff
changeset
|
576 app_name = menu[13:].strip().lower() |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
577 app_data = await self._startApp(app_name) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
578 front_url = app_data['front_url'] |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
579 options = self.host.options |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
580 url_redirections = options["url_redirections_dict"].setdefault( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
581 self.site_name, {}) |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
582 if front_url in url_redirections: |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
583 raise exceptions.ConflictError( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
584 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
|
585 f"{app_name!r}") |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
586 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
587 url_redirections[front_url] = { |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
588 "page": 'embed_app', |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
589 "path_args": [app_name] |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
590 } |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
591 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
592 page_name = app_data.get('web_label', app_name).title() |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
593 url = front_url |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
594 |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
595 log.debug( |
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
596 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
|
597 ) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
598 else: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
599 page_name = menu |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
600 try: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
601 url = self.getPageByName(page_name).url |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
602 except KeyError as e: |
1216 | 603 log_msg = _("Can'find a named page ({msg}), please check " |
604 "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
|
605 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
|
606 raise exceptions.ConfigError(log_msg) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
607 main_menu.append((page_name, url)) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
608 self.main_menu = main_menu |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
609 |
858 | 610 def _normalizeURL(self, url, lower=True): |
611 """Return URL normalized for self.redirections dict | |
612 | |
613 @param url(unicode): URL to normalize | |
614 @param lower(bool): lower case of url if True | |
615 @return (str): normalized URL | |
616 """ | |
617 if lower: | |
618 url = url.lower() | |
1216 | 619 return "/".join((p for p in url.split("/") if p)) |
858 | 620 |
621 def _getRequestData(self, uri): | |
622 """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
|
623 |
858 | 624 @param url(unicode): destination url |
625 @return (tuple(list[str], str, str, dict): tuple with | |
626 splitted path as in Request.postpath | |
627 uri as in Request.uri | |
628 path as in Request.path | |
629 args as in Request.args | |
630 """ | |
1216 | 631 uri = uri |
858 | 632 # XXX: we reuse code from twisted.web.http.py here |
633 # as we need to have the same behaviour | |
1216 | 634 x = uri.split("?", 1) |
858 | 635 |
636 if len(x) == 1: | |
637 path = uri | |
638 args = {} | |
639 else: | |
640 path, argstring = x | |
1216 | 641 args = urllib.parse.parse_qs(argstring, True) |
858 | 642 |
643 # XXX: splitted path case must not be changed, as it may be significant | |
644 # (e.g. for blog items) | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
645 return ( |
1216 | 646 self._normalizeURL(path, lower=False).split("/"), |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
647 uri, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
648 path, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
649 args, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
650 ) |
858 | 651 |
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
|
652 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
|
653 """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
|
654 |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
655 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
|
656 @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
|
657 @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
|
658 @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
|
659 """ |
979 | 660 # 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
|
661 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
|
662 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
|
663 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
|
664 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
|
665 else: |
979 | 666 try: |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
667 __, uri, __, __ = request_data |
979 | 668 except ValueError: |
1216 | 669 uri = "" |
670 log.error(D_( "recursive redirection, please fix this URL:\n" | |
671 "{old} ==> {new}").format( | |
672 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
|
673 return web_resource.NoResource() |
979 | 674 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
675 request._redirected = True # here to avoid recursive redirections |
979 | 676 |
677 if isinstance(request_data, dict): | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
678 if request_data["type"] == "page": |
979 | 679 try: |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
680 page = self.getPageByName(request_data["page"]) |
979 | 681 except KeyError: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
682 log.error( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
683 _( |
1216 | 684 '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
|
685 ).format(name=request_data["page"]) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
686 ) |
979 | 687 return web_resource.NoResource() |
1216 | 688 path_args = [pa.encode('utf-8') for pa in request_data["path_args"]] |
689 request.postpath = path_args + request.postpath | |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
690 |
979 | 691 try: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
692 request.args.update(request_data["query_args"]) |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
693 except (TypeError, ValueError): |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
694 log.error( |
1216 | 695 _("Invalid args in redirection: {query_args}").format( |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
696 query_args=request_data["query_args"] |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
697 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
698 ) |
979 | 699 return web_resource.NoResource() |
700 return page | |
701 else: | |
1216 | 702 raise exceptions.InternalError("unknown request_data type") |
979 | 703 else: |
704 path_list, uri, path, args = request_data | |
1216 | 705 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
|
706 log.debug( |
1216 | 707 "Redirecting URL {old} to {new}".format( |
708 old=request.uri.decode('utf-8'), new=uri | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
709 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
710 ) |
979 | 711 # we change the request to reflect the new url |
1037 | 712 request.postpath = path_list[1:] + request.postpath |
1158
fb4b4da61132
backend: fixed args transmission on page redirection.
Goffi <goffi@goffi.org>
parents:
1153
diff
changeset
|
713 request.args.update(args) |
979 | 714 |
715 # 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
|
716 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
|
717 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
718 def getPageByName(self, name): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
719 """Retrieve page instance from its name |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
720 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
721 @param name(unicode): name of the page |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
722 @return (LiberviaPage): page instance |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
723 @raise KeyError: the page doesn't exist |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
724 """ |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
725 return self.named_pages[name] |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
726 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
727 def getPagePathFromURI(self, uri): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
728 """Retrieve page URL from xmpp: URI |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
729 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
730 @param uri(unicode): URI with a xmpp: scheme |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
731 @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
|
732 the URI. |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
733 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
|
734 """ |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
735 uri_data = common_uri.parseXMPPUri(uri) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
736 try: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
737 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
|
738 except KeyError: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
739 url = None |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
740 else: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
741 url = cb(page, uri_data) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
742 if url is None: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
743 # no handler found |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
744 # we try to find a more generic one |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
745 try: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
746 page, cb = self.uri_callbacks[uri_data["type"], None] |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
747 except KeyError: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
748 pass |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
749 else: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
750 url = cb(page, uri_data) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
751 return url |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
752 |
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
|
753 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
|
754 # 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
|
755 # which is the only ones who need to be handled before other children |
1216 | 756 if name == b"" and not request.postpath: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
757 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
|
758 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
|
759 |
858 | 760 def getChild(self, name, request): |
761 resource = super(LiberviaRootResource, self).getChild(name, request) | |
762 | |
763 if isinstance(resource, web_resource.NoResource): | |
764 # if nothing was found, we try our luck with redirections | |
765 # 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
|
766 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
|
767 for idx in range(len(path_elt), -1, -1): |
1216 | 768 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
|
769 if test_url in self.redirections: |
3f6f4d907c30
server: better redirection (fixed issue in remaining path arguments)
Goffi <goffi@goffi.org>
parents:
1046
diff
changeset
|
770 request_data = self.redirections[test_url] |
3f6f4d907c30
server: better redirection (fixed issue in remaining path arguments)
Goffi <goffi@goffi.org>
parents:
1046
diff
changeset
|
771 request.postpath = path_elt[idx:] |
979 | 772 return self._redirect(request, request_data) |
858 | 773 |
774 return resource | |
775 | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
776 def putChild(self, path, resource): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
777 """Add a child to the root resource""" |
1216 | 778 if not isinstance(path, bytes): |
779 raise ValueError("path must be specified in bytes") | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
780 if not isinstance(resource, web_resource.EncodingResourceWrapper): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
781 # 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
|
782 resource = web_resource.EncodingResourceWrapper( |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
783 resource, [server.GzipEncoderFactory()]) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
784 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
785 super(LiberviaRootResource, self).putChild(path, resource) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
786 |
858 | 787 def createSimilarFile(self, path): |
788 # XXX: this method need to be overriden to avoid recreating a LiberviaRootResource | |
789 | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
790 f = LiberviaRootResource.__base__( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
791 path, self.defaultType, self.ignoredExts, self.registry |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
792 ) |
858 | 793 # refactoring by steps, here - constructor should almost certainly take these |
794 f.processors = self.processors | |
795 f.indexNames = self.indexNames[:] | |
796 f.childNotFound = self.childNotFound | |
797 return f | |
451 | 798 |
799 | |
554
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
800 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
|
801 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
|
802 """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
|
803 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
804 @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
|
805 @param profile (str): %(doc_profile)s |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
806 @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
|
807 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
|
808 """ |
555
db1b330c1eb1
server_side: set the connection attempt timeout to the bridge timeout (2 minutes)
souliane <souliane@mailoo.org>
parents:
554
diff
changeset
|
809 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
|
810 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
|
811 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
812 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
|
813 """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
|
814 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
815 @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
|
816 """ |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
817 try: |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
818 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
|
819 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
|
820 return |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
821 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
|
822 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
|
823 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
|
824 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
825 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
|
826 """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
|
827 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
828 @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
|
829 @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
|
830 """ |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
831 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
|
832 |
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
|
833 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
|
834 """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
|
835 |
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
|
836 @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
|
837 @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
|
838 """ |
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
|
839 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
|
840 |
554
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
841 |
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
|
842 class Libervia(service.Service): |
995 | 843 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
|
844 |
810 | 845 def __init__(self, options): |
846 self.options = options | |
1504
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
847 websockets.host = self |
1236 | 848 |
849 def _init(self): | |
850 # we do init here and not in __init__ to avoid doule initialisation with twistd | |
851 # 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
|
852 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
|
853 self.waiting_profiles = WaitingRequests() # FIXME: should be removed |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
854 self._main_conf = None |
1152 | 855 self.files_watcher = FilesWatcher(self) |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
856 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
857 if self.options["base_url_ext"]: |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
858 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
|
859 if self.base_url_ext[-1] != "/": |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
860 self.base_url_ext += "/" |
1216 | 861 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
|
862 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
|
863 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
|
864 # 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
|
865 # scheme = self.base_url_ext_data.scheme or 'https' |
1216 | 866 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
|
867 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
868 if not self.options["port_https_ext"]: |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
869 self.options["port_https_ext"] = self.options["port_https"] |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
870 |
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
|
871 self._cleanup = [] |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
872 |
451 | 873 self.sessions = {} # key = session value = user |
874 self.prof_connected = set() # Profiles connected | |
985
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
875 self.ns_map = {} # map of short name to namespaces |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
876 |
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
|
877 ## bridge ## |
1367
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
878 self._bridge_retry = self.options['bridge-retries'] |
1126
7cd89277a129
server: fixed missing backend detection
Goffi <goffi@goffi.org>
parents:
1124
diff
changeset
|
879 self.bridge = Bridge() |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
880 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
|
881 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
882 @property |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
883 def roots(self): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
884 """Return available virtual host roots |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
885 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
886 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
|
887 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
|
888 returned first. |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
889 @return (list[web_resource.Resource]): all vhost root resources |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
890 """ |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
891 roots = list(set(self.vhost_root.hosts.values())) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
892 default = self.vhost_root.default |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
893 if default is not None and default not in roots: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
894 roots.insert(0, default) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
895 return roots |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
896 |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
897 @property |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
898 def main_conf(self): |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
899 """SafeConfigParser instance opened on configuration file (sat.conf)""" |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
900 if self._main_conf is None: |
1240 | 901 self._main_conf = config.parseMainConf(log_filenames=True) |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
902 return self._main_conf |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
903 |
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
|
904 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
|
905 """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
|
906 |
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 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
|
908 @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
|
909 @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
|
910 @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
|
911 @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
|
912 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
|
913 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
|
914 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
|
915 - "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
|
916 |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
917 """ |
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
|
918 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
|
919 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
|
920 if value_type is not None: |
1216 | 921 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
|
922 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
|
923 else: |
1216 | 924 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
|
925 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
|
926 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
|
927 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
|
928 elif isinstance(value, dict): |
1216 | 929 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
|
930 elif value is not None: |
1217
fe9782391f63
server: fixed value filtering in getConfig
Goffi <goffi@goffi.org>
parents:
1216
diff
changeset
|
931 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
|
932 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
|
933 |
985
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
934 def _namespacesGetCb(self, ns_map): |
1383
81b472bcf0a1
server: be sure to have strings for ns_map
Goffi <goffi@goffi.org>
parents:
1370
diff
changeset
|
935 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
|
936 |
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
937 def _namespacesGetEb(self, failure_): |
1216 | 938 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
|
939 |
1130
8a7d75c18d40
server: fixed front_url_filter in templates renderer
Goffi <goffi@goffi.org>
parents:
1129
diff
changeset
|
940 @template.contextfilter |
1127
9234f29053b0
server, pages: update to handle multi sites themes, first draft:
Goffi <goffi@goffi.org>
parents:
1126
diff
changeset
|
941 def _front_url_filter(self, ctx, relative_url): |
1216 | 942 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
|
943 return os.path.join( |
e30e96958fb7
server: use C.SITE_NAME_DEFAULT instead of "sat" when suitable
Goffi <goffi@goffi.org>
parents:
1287
diff
changeset
|
944 '/', 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
|
945 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
|
946 |
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
|
947 def _moveFirstLevelToDict(self, options, key, keys_to_keep): |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
948 """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
|
949 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
950 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
|
951 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
|
952 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
|
953 @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
|
954 @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
|
955 @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
|
956 """ |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
957 try: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
958 conf = options[key] |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
959 except KeyError: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
960 return |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
961 if not isinstance(conf, dict): |
1216 | 962 options[key] = {'': conf} |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
963 return |
1216 | 964 default_dict = conf.get('', {}) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
965 to_delete = [] |
1216 | 966 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
|
967 if key not in keys_to_keep: |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
968 default_dict[key] = value |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
969 to_delete.append(key) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
970 for key in to_delete: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
971 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
|
972 if default_dict: |
1216 | 973 conf[''] = default_dict |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
974 |
1362
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
975 async def checkAndConnectServiceProfile(self): |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
976 passphrase = self.options["passphrase"] |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
977 if not passphrase: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
978 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
979 C.EXIT_BAD_ARG, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
980 _("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
|
981 "documentation.") |
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 try: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
984 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
|
985 except BridgeException as e: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
986 if e.classname == "ProfileUnknownError": |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
987 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
|
988 try: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
989 xmpp_domain = await self.bridgeCall("getConfig", "", "xmpp_domain") |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
990 xmpp_domain = xmpp_domain.strip() |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
991 if not xmpp_domain: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
992 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
993 C.EXIT_BAD_ARG, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
994 _('"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
|
995 'check documentation') |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
996 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
997 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
|
998 await self.bridgeCall( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
999 "inBandAccountNew", |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1000 service_profile_jid_s, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1001 passphrase, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1002 "", |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1003 xmpp_domain, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1004 0, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1005 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1006 except BridgeException as e: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1007 if e.condition == "conflict": |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1008 log.info( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1009 _("Service's profile JID {profile_jid} already exists") |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1010 .format(profile_jid=service_profile_jid_s) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1011 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1012 elif e.classname == "UnknownMethod": |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1013 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1014 C.EXIT_BRIDGE_ERROR, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1015 _("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
|
1016 "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
|
1017 "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
|
1018 "manually.").format( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1019 profile=C.SERVICE_PROFILE, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1020 profile_jid=service_profile_jid_s) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1021 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1022 elif e.condition == "service-unavailable": |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1023 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1024 C.EXIT_BRIDGE_ERROR, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1025 _("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
|
1026 "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
|
1027 "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
|
1028 "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
|
1029 "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
|
1030 "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
|
1031 "documentation.").format( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1032 profile=C.SERVICE_PROFILE, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1033 profile_jid=service_profile_jid_s, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1034 app_name=C.APP_NAME) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1035 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1036 elif e.condition == "not-acceptable": |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1037 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1038 C.EXIT_BRIDGE_ERROR, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1039 _("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
|
1040 "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
|
1041 "In-Band Registration please check XMPP server " |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1042 "configuration: {reason}" |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1043 ).format( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1044 profile=C.SERVICE_PROFILE, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1045 profile_jid=service_profile_jid_s, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1046 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 |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1049 else: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1050 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1051 C.EXIT_BRIDGE_ERROR, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1052 _("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
|
1053 "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
|
1054 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1055 try: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1056 await self.bridgeCall("profileCreate", C.SERVICE_PROFILE, passphrase) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1057 await self.bridgeCall( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1058 "profileStartSession", passphrase, C.SERVICE_PROFILE) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1059 await self.bridgeCall( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1060 "setParam", "JabberID", service_profile_jid_s, "Connection", -1, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1061 C.SERVICE_PROFILE) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1062 await self.bridgeCall( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1063 "setParam", "Password", passphrase, "Connection", -1, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1064 C.SERVICE_PROFILE) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1065 except BridgeException as e: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1066 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1067 C.EXIT_BRIDGE_ERROR, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1068 _("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
|
1069 "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
|
1070 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1071 log.info(_("Service profile has been successfully created")) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1072 s_prof_connected = False |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1073 else: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1074 raise SysExit(C.EXIT_BRIDGE_ERROR, e.message) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1075 |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1076 if not s_prof_connected: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1077 try: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1078 await self.bridgeCall( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1079 "connect", |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1080 C.SERVICE_PROFILE, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1081 passphrase, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1082 {}, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1083 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1084 except BridgeException as e: |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1085 raise SysExit( |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1086 C.EXIT_BRIDGE_ERROR, |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1087 _("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
|
1088 ) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1089 |
1245 | 1090 async def backendReady(self): |
1397
ed037818d6de
core (constants): renaming following global project renaming
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
1091 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
|
1092 |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1093 # settings |
1364
df40708c4c76
server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents:
1362
diff
changeset
|
1094 if self.options['dev-mode']: |
1216 | 1095 log.info(_("Developer mode activated")) |
1362
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1096 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
|
1097 self.local_dir = await self.bridgeCall("getConfig", "", "local_dir") |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1098 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
|
1099 self.renderer = template.Renderer(self, self._front_url_filter) |
1216 | 1100 sites_names = list(self.renderer.sites_paths.keys()) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1101 |
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
|
1102 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
|
1103 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
|
1104 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
|
1105 menu = self.options["menu_json"] |
2da573bf3f8b
server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents:
1354
diff
changeset
|
1106 if not '' in menu: |
2da573bf3f8b
server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents:
1354
diff
changeset
|
1107 menu[''] = C.DEFAULT_MENU |
2da573bf3f8b
server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents:
1354
diff
changeset
|
1108 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
|
1109 menu[site].extend(value) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1110 |
1362
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1111 # service profile |
1370 | 1112 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
|
1113 await self.checkAndConnectServiceProfile() |
1362
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1114 |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1115 # restricted bridge, the one used by browser code |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1116 self.restricted_bridge = RestrictedBridge(self) |
45ebeea1bacd
server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
1117 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1118 # we create virtual hosts and import Libervia pages into them |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1119 self.vhost_root = vhost.NameVirtualHost() |
1253
6d49fae517ba
pages: browser metadata + root `_browser`:
Goffi <goffi@goffi.org>
parents:
1251
diff
changeset
|
1120 default_site_path = Path(libervia.__file__).parent.resolve() |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1121 # self.sat_root is official Libervia site |
1253
6d49fae517ba
pages: browser metadata + root `_browser`:
Goffi <goffi@goffi.org>
parents:
1251
diff
changeset
|
1122 root_path = default_site_path / C.TEMPLATE_STATIC_DIR |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1123 self.sat_root = default_root = LiberviaRootResource( |
1246 | 1124 host=self, host_name='', site_name='', |
1125 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
|
1126 if self.options['dev-mode']: |
1153 | 1127 self.files_watcher.watchDir( |
1128 default_site_path, auto_add=True, recursive=True, | |
1129 callback=LiberviaPage.onFileChange, site_root=self.sat_root, | |
1130 site_path=default_site_path) | |
1245 | 1131 LiberviaPage.importPages(self, self.sat_root) |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1132 tasks_manager = TasksManager(self, self.sat_root) |
1245 | 1133 await tasks_manager.parseTasks() |
1134 await tasks_manager.runTasks() | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1135 # 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
|
1136 await self.sat_root._setMenu(self.options["menu_json"]) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1137 self.vhost_root.default = default_root |
1216 | 1138 existing_vhosts = {b'': default_root} |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1139 |
1216 | 1140 for host_name, site_name in self.options["vhosts_dict"].items(): |
1246 | 1141 if site_name == C.SITE_NAME_DEFAULT: |
1142 raise ValueError( | |
1143 f"{C.DEFAULT_SITE_NAME} is reserved and can't be used in vhosts_dict") | |
1216 | 1144 encoded_site_name = site_name.encode('utf-8') |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1145 try: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1146 site_path = self.renderer.sites_paths[site_name] |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1147 except KeyError: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1148 log.warning(_( |
1216 | 1149 "host {host_name} link to non existing site {site_name}, ignoring " |
1150 "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
|
1151 continue |
1216 | 1152 if encoded_site_name in existing_vhosts: |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1153 # we have an alias host, we re-use existing resource |
1216 | 1154 res = existing_vhosts[encoded_site_name] |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1155 else: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1156 # 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
|
1157 # if not, we use default template's static dir |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1158 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
|
1159 if not os.path.isdir(root_path): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1160 root_path = os.path.join( |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1161 site_path, C.TEMPLATE_TPL_DIR, C.TEMPLATE_THEME_DEFAULT, |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1162 C.TEMPLATE_STATIC_DIR) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1163 res = LiberviaRootResource( |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1164 host=self, |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1165 host_name=host_name, |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1166 site_name=site_name, |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1167 site_path=site_path, |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1168 path=root_path) |
1153 | 1169 |
1216 | 1170 existing_vhosts[encoded_site_name] = res |
1191 | 1171 |
1364
df40708c4c76
server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents:
1362
diff
changeset
|
1172 if self.options['dev-mode']: |
1153 | 1173 self.files_watcher.watchDir( |
1174 site_path, auto_add=True, recursive=True, | |
1175 callback=LiberviaPage.onFileChange, site_root=res, | |
1176 site_path=site_path) | |
1191 | 1177 |
1178 LiberviaPage.importPages(self, res) | |
1179 # FIXME: default pages are accessible if not overriden by external website | |
1180 # while necessary for login or re-using existing pages | |
1181 # we may want to disable access to the page by direct URL | |
1182 # (e.g. /blog disabled except if called by external site) | |
1183 LiberviaPage.importPages(self, res, root_path=default_site_path) | |
1245 | 1184 tasks_manager = TasksManager(self, res) |
1185 await tasks_manager.parseTasks() | |
1186 await tasks_manager.runTasks() | |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
1187 await res._setMenu(self.options["menu_json"]) |
1191 | 1188 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1189 self.vhost_root.addHost(host_name.encode('utf-8'), res) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1190 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1191 templates_res = web_resource.Resource() |
1216 | 1192 self.putChildAll(C.TPL_RESOURCE.encode('utf-8'), templates_res) |
1193 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
|
1194 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
|
1195 static.File(site_path)) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1196 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1197 d = self.bridgeCall("namespacesGet") |
985
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
1198 d.addCallback(self._namespacesGetCb) |
64826e69f365
pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
984
diff
changeset
|
1199 d.addErrback(self._namespacesGetEb) |
858 | 1200 |
995 | 1201 # websocket |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1202 if self.options["connection_type"] in ("https", "both"): |
1504
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1203 wss = websockets.LiberviaPageWSProtocol.getResource(secure=True) |
1216 | 1204 self.putChildAll(b'wss', wss) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1205 if self.options["connection_type"] in ("http", "both"): |
1504
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1206 ws = websockets.LiberviaPageWSProtocol.getResource(secure=False) |
1216 | 1207 self.putChildAll(b'ws', ws) |
995 | 1208 |
1209 ## 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
|
1210 self.bridge.register_signal( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1211 "psEventRaw", partial(LiberviaPage.onNodeEvent, self), "plugin" |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1212 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1213 self.bridge.register_signal( |
1504
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1214 "messageNew", partial(self.on_signal, "messageNew") |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1215 ) |
917 | 1216 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1217 # Progress handling |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1218 self.bridge.register_signal( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1219 "progressStarted", partial(ProgressHandler._signal, "started") |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1220 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1221 self.bridge.register_signal( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1222 "progressFinished", partial(ProgressHandler._signal, "finished") |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1223 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1224 self.bridge.register_signal( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1225 "progressError", partial(ProgressHandler._signal, "error") |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1226 ) |
1063
4b69f69c6ffd
server: new ProgressHandler helper class, to handle progressing actions
Goffi <goffi@goffi.org>
parents:
1055
diff
changeset
|
1227 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1228 # media dirs |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1229 # FIXME: get rid of dirname and "/" in C.XXX_DIR |
1216 | 1230 self.putChildAll(os.path.dirname(C.MEDIA_DIR).encode('utf-8'), |
1231 ProtectedFile(self.media_dir)) | |
1242
8f39d98416c5
server: added a child for common cache
Goffi <goffi@goffi.org>
parents:
1240
diff
changeset
|
1232 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1233 self.cache_resource = web_resource.NoResource() |
1216 | 1234 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
|
1235 self.cache_resource.putChild( |
8f39d98416c5
server: added a child for common cache
Goffi <goffi@goffi.org>
parents:
1240
diff
changeset
|
1236 b"common", ProtectedFile(str(self.cache_root_dir / Path("common")))) |
858 | 1237 |
1037 | 1238 # redirections |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1239 for root in self.roots: |
1360
389a83eefe62
server: SàT applications integration:
Goffi <goffi@goffi.org>
parents:
1359
diff
changeset
|
1240 await root._initRedirections(self.options) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1241 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1242 # 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
|
1243 del self.options["url_redirections_dict"] |
858 | 1244 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1245 server.Request.defaultContentType = "text/html; charset=utf-8" |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1246 wrapped = web_resource.EncodingResourceWrapper( |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1247 self.vhost_root, [server.GzipEncoderFactory()] |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1248 ) |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1249 self.site = server.Site(wrapped) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1250 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
|
1251 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1252 def _bridgeCb(self): |
1367
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1253 del self._bridge_retry |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1254 self.bridge.getReady( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1255 lambda: self.initialised.callback(None), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1256 lambda failure: self.initialised.errback(Exception(failure)), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1257 ) |
1245 | 1258 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
|
1259 |
1126
7cd89277a129
server: fixed missing backend detection
Goffi <goffi@goffi.org>
parents:
1124
diff
changeset
|
1260 def _bridgeEb(self, failure_): |
7cd89277a129
server: fixed missing backend detection
Goffi <goffi@goffi.org>
parents:
1124
diff
changeset
|
1261 if isinstance(failure_, BridgeExceptionNoService): |
1367
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1262 if self._bridge_retry: |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1263 if self._bridge_retry < 0: |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1264 print(_("Can't connect to bridge, will retry indefinitely. " |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1265 "Next try in 1s.")) |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1266 else: |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1267 self._bridge_retry -= 1 |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1268 print( |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1269 _( |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1270 "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
|
1271 "trie(s) left)." |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1272 ).format(retries_left=self._bridge_retry) |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1273 ) |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1274 time.sleep(1) |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1275 self.bridge.bridgeConnect(callback=self._bridgeCb, errback=self._bridgeEb) |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1276 return |
ce5cfe004d4e
server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
1277 |
1216 | 1278 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
|
1279 else: |
1216 | 1280 log.error("Can't connect to bridge: {}".format(failure)) |
1126
7cd89277a129
server: fixed missing backend detection
Goffi <goffi@goffi.org>
parents:
1124
diff
changeset
|
1281 sys.exit(1) |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1282 |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1283 @property |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1284 def version(self): |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1285 """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
|
1286 return C.APP_VERSION |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1287 |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1288 @property |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1289 def full_version(self): |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1290 """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
|
1291 version = self.version |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1292 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
|
1293 # 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
|
1294 try: |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1295 return self._version_cache |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1296 except AttributeError: |
1216 | 1297 self._version_cache = "{} ({})".format( |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1298 version, utils.getRepositoryData(libervia) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1299 ) |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1300 return self._version_cache |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1301 else: |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1302 return version |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
1303 |
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
|
1304 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
|
1305 """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
|
1306 |
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
|
1307 @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
|
1308 @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
|
1309 |
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
|
1310 """ |
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
|
1311 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
|
1312 |
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
|
1313 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
|
1314 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
|
1315 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
|
1316 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
|
1317 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
|
1318 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
|
1319 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
|
1320 |
1138
ef565839dada
server: don't convert failure in errback to jsonrpclib.Fault anymore:
Goffi <goffi@goffi.org>
parents:
1132
diff
changeset
|
1321 def _errback(failure_): |
ef565839dada
server: don't convert failure in errback to jsonrpclib.Fault anymore:
Goffi <goffi@goffi.org>
parents:
1132
diff
changeset
|
1322 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
|
1323 |
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
|
1324 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
|
1325 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
|
1326 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
|
1327 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
|
1328 |
1504
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1329 def on_signal(self, signal_name, *args): |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1330 profile = args[-1] |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1331 if not profile: |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1332 log.error(f"got signal without profile: {signal_name}, {args}") |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1333 return |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1334 try: |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1335 sockets = websockets.LiberviaPageWSProtocol.profile_map[profile] |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1336 except KeyError: |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1337 log.debug(f"no socket opened for profile {profile}") |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1338 return |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1339 for socket in sockets: |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1340 socket.send("bridge", {"signal": signal_name, "args": args}) |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1341 |
1266
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1342 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
|
1343 """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
|
1344 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1345 @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
|
1346 @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
|
1347 @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
|
1348 - 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
|
1349 - 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
|
1350 @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
|
1351 """ |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1352 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
|
1353 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
|
1354 session = request.getSession() |
9c41b7e91172
server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents:
1066
diff
changeset
|
1355 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
|
1356 if sat_session.profile: |
1216 | 1357 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
|
1358 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
|
1359 |
1305
db9ea167c409
pages: `profile` is now exposed to scripts
Goffi <goffi@goffi.org>
parents:
1293
diff
changeset
|
1360 # 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
|
1361 # 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
|
1362 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
|
1363 self.prof_connected.add(profile) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1364 cache_dir = os.path.join( |
1216 | 1365 self.cache_root_dir, "profiles", regex.pathEscape(profile) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1366 ) |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1367 # 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
|
1368 # profile's cache directory, without uuid |
1216 | 1369 self.cache_resource.putChild(sat_session.uuid.encode('utf-8'), |
1370 ProtectedFile(cache_dir)) | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1371 log.debug( |
1216 | 1372 _("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
|
1373 uuid=sat_session.uuid, path=cache_dir |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1374 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1375 ) |
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
|
1376 |
1504
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1377 def on_expire(): |
1216 | 1378 log.info("Session expired (profile={profile})".format(profile=profile)) |
1379 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
|
1380 log.debug( |
1216 | 1381 _("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
|
1382 ) |
1504
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1383 sat_session.on_expire() |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1384 if sat_session.ws_socket is not None: |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1385 sat_session.ws_socket.close() |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1386 # 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
|
1387 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
|
1388 |
1504
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1389 session.notifyOnExpire(on_expire) |
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
|
1390 |
1090
9c41b7e91172
server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents:
1066
diff
changeset
|
1391 # 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
|
1392 infos = await self.bridgeCall("sessionInfosGet", profile) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1393 sat_session.jid = jid.JID(infos["jid"]) |
1266
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1394 own_bare_jid_s = sat_session.jid.userhost() |
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1395 own_id_raw = await self.bridgeCall( |
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1396 "identityGet", own_bare_jid_s, [], True, profile) |
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1397 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
|
1398 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
|
1399 |
9c41b7e91172
server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents:
1066
diff
changeset
|
1400 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
|
1401 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
|
1402 |
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 @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
|
1404 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
|
1405 """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
|
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 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
|
1408 @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
|
1409 @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
|
1410 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
|
1411 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
|
1412 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
|
1413 @param password(unicode): user password |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1414 @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
|
1415 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
|
1416 @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
|
1417 @raise exceptions.ProfileUnknownError: this login doesn't exist |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1418 @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
|
1419 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
|
1420 @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
|
1421 @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
|
1422 @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
|
1423 @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
|
1424 @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
|
1425 """ |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1426 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1427 # 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
|
1428 if login.startswith("@"): |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1429 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
|
1430 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1431 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
|
1432 log.debug("logging a guest account") |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1433 elif "@" in login: |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1434 if login.count("@") != 1: |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1435 raise failure.Failure( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1436 exceptions.DataError("Invalid login: {login}".format(login=login)) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1437 ) |
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
|
1438 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
|
1439 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
|
1440 except (RuntimeError, jid.InvalidFormat, AttributeError): |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1441 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
|
1442 |
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 # 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
|
1444 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
|
1445 |
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 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
|
1447 # 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
|
1448 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
|
1449 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
|
1450 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
|
1451 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
|
1452 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1453 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
|
1454 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
|
1455 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
|
1456 # 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
|
1457 if ( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1458 login_jid is not None and login_jid.user |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1459 ): # 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
|
1460 if not self.options["allow_registration"]: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1461 log.warning( |
1216 | 1462 "Trying to register JID account while registration is not " |
1463 "allowed") | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1464 raise failure.Failure( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1465 exceptions.DataError( |
1216 | 1466 "JID login while registration is not allowed" |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1467 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1468 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1469 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
|
1470 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
|
1471 register_with_ext_jid = True |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1472 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
|
1473 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
|
1474 else: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1475 if profile != login or ( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1476 not password |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1477 and profile |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1478 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
|
1479 ): |
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 # 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
|
1481 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
|
1482 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
|
1483 |
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 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
|
1485 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1486 # 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
|
1487 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
|
1488 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
|
1489 # 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
|
1490 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
|
1491 # 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
|
1492 log.warning(_( |
1216 | 1493 "{new_profile} requested login, but {old_profile} was already " |
1494 "connected, disconnecting {old_profile}").format( | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1495 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
|
1496 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
|
1497 |
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 if self.waiting_profiles.getRequest(profile): |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1499 # 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
|
1500 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
|
1501 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1502 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
|
1503 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
|
1504 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
|
1505 except Exception as failure_: |
1204
a2df53dfbf46
server: handle unexpected exceptions on connect:
Goffi <goffi@goffi.org>
parents:
1203
diff
changeset
|
1506 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
|
1507 self.waiting_profiles.purgeRequest(profile) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1508 if fault in ("PasswordError", "ProfileUnknownError"): |
1216 | 1509 log.info("Profile {profile} doesn't exist or the submitted password is " |
1510 "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
|
1511 raise failure.Failure(ValueError(C.PROFILE_AUTH_ERROR)) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1512 elif fault == "SASLAuthError": |
1216 | 1513 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
|
1514 .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
|
1515 raise failure.Failure(ValueError(C.XMPP_AUTH_ERROR)) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1516 elif fault == "NoReply": |
1216 | 1517 log.info(_("Did not receive a reply (the timeout expired or the " |
1518 "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
|
1519 raise exceptions.TimeOutError |
1204
a2df53dfbf46
server: handle unexpected exceptions on connect:
Goffi <goffi@goffi.org>
parents:
1203
diff
changeset
|
1520 elif fault is None: |
1216 | 1521 log.info(_("Unexepected failure: {failure_}").format(failure_=failure)) |
1204
a2df53dfbf46
server: handle unexpected exceptions on connect:
Goffi <goffi@goffi.org>
parents:
1203
diff
changeset
|
1522 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
|
1523 else: |
1216 | 1524 log.error('Unmanaged fault class "{fault}" in errback for the ' |
1525 'connection of profile {profile}'.format( | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1526 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
|
1527 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
|
1528 |
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 if connected: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1530 # 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
|
1531 # 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
|
1532 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
|
1533 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
|
1534 # 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
|
1535 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
|
1536 # 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
|
1537 # so this line should never be reached |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1538 log.error(_( |
1216 | 1539 "session profile [{session_profile}] differs from login " |
1540 "profile [{profile}], this should not happen!") | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1541 .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
|
1542 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
|
1543 defer.returnValue(C.SESSION_ACTIVE) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1544 log.info( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1545 _( |
1216 | 1546 "profile {profile} was already connected in backend".format( |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1547 profile=profile |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1548 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1549 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1550 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1551 # 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
|
1552 |
1266
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1258
diff
changeset
|
1553 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
|
1554 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
|
1555 |
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 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
|
1557 """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
|
1558 @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
|
1559 @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
|
1560 @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
|
1561 @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
|
1562 @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
|
1563 - 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
|
1564 - 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
|
1565 - 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
|
1566 - 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
|
1567 - 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
|
1568 @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
|
1569 """ |
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 if not self.options["allow_registration"]: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1571 log.warning( |
1216 | 1572 _("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
|
1573 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1574 raise failure.Failure( |
1216 | 1575 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
|
1576 ) |
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
|
1577 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1578 if ( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1579 not re.match(C.REG_LOGIN_RE, login) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1580 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
|
1581 or len(password) < C.PASSWORD_MIN_LENGTH |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1582 ): |
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
|
1583 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
|
1584 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1585 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
|
1586 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
|
1587 |
1184
eee7a896cf0e
server: show BridgeException traceback on unknown registering status
Goffi <goffi@goffi.org>
parents:
1182
diff
changeset
|
1588 def registeringError(failure_): |
1164
ef3adc3f2078
handle invalid certificate on registration + fixed error handling on registration
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
1589 # 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
|
1590 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
|
1591 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
|
1592 return C.ALREADY_EXISTS |
1164
ef3adc3f2078
handle invalid certificate on registration + fixed error handling on registration
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
1593 elif status == "InvalidCertificate": |
ef3adc3f2078
handle invalid certificate on registration + fixed error handling on registration
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
1594 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
|
1595 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
|
1596 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
|
1597 else: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1598 log.error( |
1216 | 1599 _("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
|
1600 status=status, traceback=failure_.value.message |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1601 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1602 ) |
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
|
1603 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
|
1604 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1605 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
|
1606 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
|
1607 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
|
1608 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
|
1609 |
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
|
1610 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
|
1611 """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
|
1612 |
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
|
1613 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
|
1614 @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
|
1615 @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
|
1616 @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
|
1617 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
|
1618 |
1361
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1619 def initEb(self, failure): |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1620 from twisted.application import app |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1621 if failure.check(SysExit): |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1622 if failure.value.message: |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1623 log.error(failure.value.message) |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1624 app._exitCode = failure.value.exit_code |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1625 reactor.stop() |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1626 else: |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1627 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
|
1628 app._exitCode = C.EXIT_INTERNAL_ERROR |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1629 reactor.stop() |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1630 return failure |
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1631 |
1368 | 1632 def _buildOnlyCb(self, __): |
1633 log.info(_("Stopping here due to --build-only flag")) | |
1634 self.stop() | |
1635 | |
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
|
1636 def startService(self): |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1637 """Connect the profile for Libervia and start the HTTP(S) server(s)""" |
1236 | 1638 self._init() |
1368 | 1639 if self.options['build-only']: |
1640 self.initialised.addCallback(self._buildOnlyCb) | |
1641 else: | |
1642 self.initialised.addCallback(self._startService) | |
1361
626b7bbb7f90
server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents:
1360
diff
changeset
|
1643 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
|
1644 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1645 ## URLs ## |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
1646 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1647 def putChildSAT(self, path, resource): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1648 """Add a child to the sat resource""" |
1216 | 1649 if not isinstance(path, bytes): |
1650 raise ValueError("path must be specified in bytes") | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1651 self.sat_root.putChild(path, resource) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1652 |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1653 def putChildAll(self, path, resource): |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1654 """Add a child to all vhost root resources""" |
1216 | 1655 if not isinstance(path, bytes): |
1656 raise ValueError("path must be specified in bytes") | |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1657 # 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
|
1658 # of the resource |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1659 # 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
|
1660 wrapped_res = web_resource.EncodingResourceWrapper( |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1661 resource, [server.GzipEncoderFactory()]) |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1662 for root in self.roots: |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1663 root.putChild(path, wrapped_res) |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1664 |
1257
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1665 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
|
1666 """Generate build path for a given site name |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1667 |
1257
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1668 @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
|
1669 @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
|
1670 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
|
1671 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
|
1672 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
|
1673 @return: path to the build directory |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1674 """ |
1257
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1675 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
|
1676 build_path_elts = [ |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1677 config.getConfig(self.main_conf, "", "local_dir"), |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1678 C.CACHE_DIR, |
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1679 C.LIBERVIA_CACHE, |
1257
1ec41ac1e7cf
server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
1680 sub_dir, |
1246 | 1681 regex.pathEscape(site_name or C.SITE_NAME_DEFAULT)] |
1682 build_path = Path("/".join(build_path_elts)) | |
1683 return build_path.expanduser().resolve() | |
1146
76d75423ef53
server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents:
1144
diff
changeset
|
1684 |
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
|
1685 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
|
1686 """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
|
1687 |
1435
396d5606477f
server (proxy): add "Forwarded" and "X-Forwarded-xxx" headers to reverse proxy
Goffi <goffi@goffi.org>
parents:
1397
diff
changeset
|
1688 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
|
1689 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
|
1690 - 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
|
1691 - 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
|
1692 - URL of the request |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1693 @return (urlparse.SplitResult): SplitResult instance with only scheme and |
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1694 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
|
1695 """ |
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
|
1696 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
|
1697 url_path = request.URLPath() |
1467
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1698 |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1699 try: |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1700 forwarded = request.requestHeaders.getRawHeaders( |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1701 "forwarded" |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1702 )[0] |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1703 except TypeError: |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1704 # we try deprecated headers |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1705 try: |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1706 proxy_netloc = request.requestHeaders.getRawHeaders( |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1707 "x-forwarded-host" |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1708 )[0] |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1709 except TypeError: |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1710 proxy_netloc = None |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1711 try: |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1712 proxy_scheme = request.requestHeaders.getRawHeaders( |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1713 "x-forwarded-proto" |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1714 )[0] |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1715 except TypeError: |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1716 proxy_scheme = None |
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 else: |
1467
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1718 fwd_data = { |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1719 k.strip(): v.strip() |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1720 for k,v in (d.split("=") for d in forwarded.split(";")) |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1721 } |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1722 proxy_netloc = fwd_data.get("host") |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1723 proxy_scheme = fwd_data.get("proto") |
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
|
1724 |
1216 | 1725 return urllib.parse.SplitResult( |
1467
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1726 ext_data.scheme or proxy_scheme or url_path.scheme.decode(), |
d6062cccd4c0
server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
1727 ext_data.netloc or proxy_netloc or url_path.netloc.decode(), |
1216 | 1728 ext_data.path or "/", |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1729 "", |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1730 "", |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1731 ) |
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
|
1732 |
1459
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1733 def getExtBaseURL( |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1734 self, |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1735 request: server.Request, |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1736 path: str = "", |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1737 query: str = "", |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1738 fragment: str = "", |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1739 scheme: Optional[str] = None, |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1740 ) -> 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
|
1741 """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
|
1742 |
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
|
1743 external URL is the URL seen by external user |
1459
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1744 @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
|
1745 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
|
1746 @param params: same as for urlsplit.urlsplit |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1747 @param query: same as for urlsplit.urlsplit |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1748 @param fragment: same as for urlsplit.urlsplit |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1749 @param scheme: if not None, will override scheme from base URL |
47db314e60ca
server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents:
1458
diff
changeset
|
1750 @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
|
1751 """ |
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
|
1752 split_result = self.getExtBaseURLData(request) |
1216 | 1753 return urllib.parse.urlunsplit( |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1754 ( |
1216 | 1755 split_result.scheme if scheme is None else scheme, |
1756 split_result.netloc, | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1757 os.path.join(split_result.path, path), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1758 query, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1759 fragment, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1760 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1761 ) |
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
|
1762 |
1458
db13f5c768a0
server: `checkRedirection`: fix range variable + type hints + arg name:
Goffi <goffi@goffi.org>
parents:
1457
diff
changeset
|
1763 def checkRedirection(self, vhost_root: LiberviaRootResource, url_path: str) -> str: |
1037 | 1764 """check is a part of the URL prefix is redirected then replace it |
1765 | |
1458
db13f5c768a0
server: `checkRedirection`: fix range variable + type hints + arg name:
Goffi <goffi@goffi.org>
parents:
1457
diff
changeset
|
1766 @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
|
1767 @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
|
1768 @return: possibly redirected URL which should link to the same location |
1037 | 1769 """ |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1770 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
|
1771 url_parts = url_path.strip("/").split("/") |
1475
83cd4862b134
server: fix args range in checkRedirection
Goffi <goffi@goffi.org>
parents:
1467
diff
changeset
|
1772 for idx in range(len(url_parts), -1, -1): |
1216 | 1773 test_url = "/" + "/".join(url_parts[:idx]) |
1037 | 1774 if test_url in inv_redirections: |
1775 rem_url = url_parts[idx:] | |
1099
ea0d41ef3719
server: return absolute page in checkRedirection
Goffi <goffi@goffi.org>
parents:
1098
diff
changeset
|
1776 return os.path.join( |
1216 | 1777 "/", "/".join([inv_redirections[test_url]] + rem_url) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1778 ) |
1458
db13f5c768a0
server: `checkRedirection`: fix range variable + type hints + arg name:
Goffi <goffi@goffi.org>
parents:
1457
diff
changeset
|
1779 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
|
1780 |
920
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1781 ## Sessions ## |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1782 |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1783 def purgeSession(self, request): |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1784 """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
|
1785 session = request.session |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1786 if session is not None: |
1216 | 1787 log.debug(_("session purge")) |
1504
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1788 sat_session = self.getSessionData(request, session_iface.ISATSession) |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1789 socket = sat_session.ws_socket |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1790 if socket is not None: |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1791 socket.close() |
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1792 session.ws_socket = None |
920
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1793 session.expire() |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1794 # 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
|
1795 # session during request handling |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1796 request._secureSession = request._insecureSession = None |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1797 |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1798 def getSessionData(self, request, *args): |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1799 """helper method to retrieve session data |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1800 |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1801 @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
|
1802 @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
|
1803 @return (iterator(data)): requested session data |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1804 """ |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1805 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
|
1806 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
|
1807 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
|
1808 else: |
94f88277c2e7
libervia (pages): getSessionData return one session if used with one argument, else an iterator
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
1809 return (iface(session) for iface in args) |
920
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
1810 |
1093
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1811 @defer.inlineCallbacks |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1812 def getAffiliation(self, request, service, node): |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1813 """retrieve pubsub node affiliation for current user |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1814 |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1815 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
|
1816 @param request(server.Request): request linked to the session |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1817 @param service(jid.JID): pubsub service |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1818 @param node(unicode): pubsub node |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1819 @return (unicode): affiliation |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1820 """ |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1821 sat_session = self.getSessionData(request, session_iface.ISATSession) |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1822 if sat_session.profile is None: |
1216 | 1823 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
|
1824 affiliation = sat_session.getAffiliation(service, node) |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1825 if affiliation is not None: |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1826 defer.returnValue(affiliation) |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1827 else: |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1828 try: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1829 affiliations = yield self.bridgeCall( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1830 "psAffiliationsGet", service.full(), node, sat_session.profile |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1831 ) |
1093
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1832 except Exception as e: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1833 log.warning( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1834 "Can't retrieve affiliation for {service}/{node}: {reason}".format( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1835 service=service, node=node, reason=e |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1836 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1837 ) |
1216 | 1838 affiliation = "" |
1093
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1839 else: |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1840 try: |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1841 affiliation = affiliations[node] |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1842 except KeyError: |
1216 | 1843 affiliation = "" |
1093
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1844 sat_session.setAffiliation(service, node, affiliation) |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1845 defer.returnValue(affiliation) |
eda7a1c6532a
server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents:
1090
diff
changeset
|
1846 |
995 | 1847 ## Websocket (dynamic pages) ## |
1848 | |
1504
409d10211b20
server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents:
1484
diff
changeset
|
1849 def get_websocket_url(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
|
1850 base_url_split = self.getExtBaseURLData(request) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1851 if base_url_split.scheme.endswith("s"): |
1216 | 1852 scheme = "wss" |
995 | 1853 else: |
1216 | 1854 scheme = "ws" |
995 | 1855 |
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
|
1856 return self.getExtBaseURL(request, path=scheme, scheme=scheme) |
995 | 1857 |
1858 | |
1019
34240d08f682
pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents:
1012
diff
changeset
|
1859 ## Various utils ## |
34240d08f682
pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents:
1012
diff
changeset
|
1860 |
34240d08f682
pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents:
1012
diff
changeset
|
1861 def getHTTPDate(self, timestamp=None): |
34240d08f682
pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents:
1012
diff
changeset
|
1862 now = time.gmtime(timestamp) |
1216 | 1863 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
|
1864 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
|
1865 ) |
1019
34240d08f682
pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents:
1012
diff
changeset
|
1866 return time.strftime(fmt_date, now) |
34240d08f682
pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents:
1012
diff
changeset
|
1867 |
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
|
1868 ## 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
|
1869 |
1128
6414fd795df4
server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents:
1127
diff
changeset
|
1870 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
|
1871 """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
|
1872 |
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
|
1873 @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
|
1874 @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
|
1875 @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
|
1876 """ |
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
|
1877 # 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
|
1878 service_path = regex.pathEscape(C.SERVICE_PROFILE) |
1216 | 1879 cache_dir = os.path.join(self.cache_root_dir, "profiles", service_path) |
1880 self.cache_resource.putChild(service_path.encode('utf-8'), | |
1881 ProtectedFile(cache_dir)) | |
1882 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
|
1883 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
|
1884 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1885 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
|
1886 try: |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1887 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
|
1888 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
|
1889 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
|
1890 log.warning( |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1891 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
|
1892 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
|
1893 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
|
1894 log.warning( |
eb4f03da0d7d
server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents:
1268
diff
changeset
|
1895 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
|
1896 self.quit(1) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1897 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
|
1898 if self.options["connection_type"] in ("http", "both"): |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1899 if ( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1900 self.options["connection_type"] == "both" |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1901 and self.options["redirect_to_https"] |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1902 ): |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1903 reactor.listenTCP( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1904 self.options["port"], |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1905 server.Site( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1906 RedirectToHTTPS( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1907 self.options["port"], self.options["port_https_ext"] |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1908 ) |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1909 ), |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1910 ) |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1911 else: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1912 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
|
1913 |
1108
7ec1ba86d38d
server: replaced blocking calls to bridge by bridgeCall which is not blocking
Goffi <goffi@goffi.org>
parents:
1106
diff
changeset
|
1914 @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
|
1915 def stopService(self): |
473
d1565906f228
server_side: fixed some forgotten print statement
Goffi <goffi@goffi.org>
parents:
472
diff
changeset
|
1916 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
|
1917 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
|
1918 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
|
1919 try: |
1108
7ec1ba86d38d
server: replaced blocking calls to bridge by bridgeCall which is not blocking
Goffi <goffi@goffi.org>
parents:
1106
diff
changeset
|
1920 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
|
1921 except Exception: |
1216 | 1922 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
|
1923 |
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
|
1924 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
|
1925 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
|
1926 |
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
|
1927 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
|
1928 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
|
1929 |
812
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
1930 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
|
1931 """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
|
1932 |
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
1933 @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
|
1934 """ |
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
1935 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
|
1936 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
|
1937 |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1938 |
858 | 1939 class RedirectToHTTPS(web_resource.Resource): |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1940 def __init__(self, old_port, new_port): |
858 | 1941 web_resource.Resource.__init__(self) |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1942 self.isLeaf = True |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1943 self.old_port = old_port |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1944 self.new_port = new_port |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1945 |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1946 def render(self, request): |
1354 | 1947 netloc = request.URLPath().netloc.decode().replace( |
1948 f":{self.old_port}", f":{self.new_port}" | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1949 ) |
1354 | 1950 url = f"https://{netloc}{request.uri.decode()}" |
1951 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
|
1952 |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1953 |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
1954 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
|
1955 registerAdapter( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1956 session_iface.SATGuestSession, server.Session, session_iface.ISATGuestSession |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1108
diff
changeset
|
1957 ) |