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