annotate libervia/web/server/server.py @ 1598:86c7a3a625d5

server: always start a new session on connection: The session was kept when a user was connecting from service profile (but not from other profiles), this was leading to session fixation vulnerability (an attacker on the same machine could get service profile session cookie, and use it when a victim would log-in). This patch fixes it by always starting a new session on connection. fix 443
author Goffi <goffi@goffi.org>
date Fri, 23 Feb 2024 13:35:24 +0100
parents 93abef9a3548
children d07838fc9d99
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1233
5bd801bd36aa server: fixed shebang
Goffi <goffi@goffi.org>
parents: 1228
diff changeset
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
822bd0139769 date update
Goffi <goffi@goffi.org>
parents: 1383
diff changeset
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
1505
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
19 from functools import partial
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
20 import os.path
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
21 from pathlib import Path
1146
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
22 import re
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
23 import sys
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
24 import time
1512
65e063657597 server: move resources to a dedicated module
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
25 from typing import Callable, Dict, Optional
1505
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
26 import urllib.error
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
27 import urllib.parse
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
28 import urllib.request
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
29
1594
93abef9a3548 server: catch `DBusException` and retry to connect in this case.
Goffi <goffi@goffi.org>
parents: 1592
diff changeset
30 from dbus.exceptions import DBusException
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
31 from twisted.application import service
1505
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
32 from twisted.internet import defer, inotify, reactor
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
33 from twisted.python import failure
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
34 from twisted.python import filepath
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
35 from twisted.python.components import registerAdapter
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.web import server
858
7dde76708892 server: URL redirections + misc:
Goffi <goffi@goffi.org>
parents: 856
diff changeset
37 from twisted.web import static
7dde76708892 server: URL redirections + misc:
Goffi <goffi@goffi.org>
parents: 856
diff changeset
38 from twisted.web import resource as web_resource
7dde76708892 server: URL redirections + misc:
Goffi <goffi@goffi.org>
parents: 856
diff changeset
39 from twisted.web import util as web_util
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
40 from twisted.web import vhost
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
41 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
42
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
43 import libervia.web
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
44 from libervia.web.server import websockets
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
45 from libervia.web.server import session_iface
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
46 from libervia.web.server.constants import Const as C
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
47 from libervia.web.server.pages import LiberviaPage
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
48 from libervia.web.server.tasks.manager import TasksManager
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
49 from libervia.web.server.utils import ProgressHandler
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
50 from libervia.backend.core import exceptions
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
51 from libervia.backend.core.i18n import _
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
52 from libervia.backend.core.log import getLogger
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
53 from libervia.backend.tools import utils
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
54 from libervia.backend.tools import config
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
55 from libervia.backend.tools.common import regex
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
56 from libervia.backend.tools.common import template
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
57 from libervia.backend.tools.common import data_format
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
58 from libervia.backend.tools.common import tls
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
59 from libervia.frontends.bridge.bridge_frontend import BridgeException
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
60 from libervia.frontends.bridge.dbus_bridge import BridgeExceptionNoService, bridge
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
61 from libervia.frontends.bridge.dbus_bridge import const_TIMEOUT as BRIDGE_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
62
1512
65e063657597 server: move resources to a dedicated module
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
63 from .resources import LiberviaRootResource, ProtectedFile
1287
1f26d8c2afc1 server: restricted_bridge first draft:
Goffi <goffi@goffi.org>
parents: 1282
diff changeset
64 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
65
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
66 log = getLogger(__name__)
682
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
67
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
68
1152
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
69 DEFAULT_MASK = (inotify.IN_CREATE | inotify.IN_MODIFY | inotify.IN_MOVE_SELF
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
70 | inotify.IN_MOVED_TO)
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
71
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
72
1361
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
73 class SysExit(Exception):
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
74
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
75 def __init__(self, exit_code, message=""):
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
76 self.exit_code = exit_code
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
77 self.message = message
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 __str__(self):
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
80 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
81
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
82
1152
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
83 class FilesWatcher(object):
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
84 """Class to check files modifications using iNotify"""
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
85 _notifier = None
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
86
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
87 def __init__(self, host):
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
88 self.host = host
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
89
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
90 @property
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
91 def notifier(self):
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
92 if self._notifier == None:
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
93 notifier = self.__class__._notifier = inotify.INotify()
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
94 notifier.startReading()
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
95 return self._notifier
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
96
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
97 def _check_callback(self, dir_path, callback, recursive):
1251
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
98 # 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
99 # 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
100 # 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
101 # 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
102 # and add it otherwise.
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
103 # 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
104 if recursive:
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
105 for child in dir_path.walk():
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
106 if child.isdir():
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
107 self._check_callback(child, callback, recursive=False)
1251
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
108 else:
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
109 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
110 if watch_id is None:
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
111 log.warning(
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
112 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
113 )
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
114 else:
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
115 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
116 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
117 watch_point.callbacks.append(callback)
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
118
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
119 def watch_dir(self, dir_path, callback, mask=DEFAULT_MASK, auto_add=False,
1152
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
120 recursive=False, **kwargs):
1251
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
121 dir_path = str(dir_path)
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
122 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
123 wrapped_callback = lambda __, filepath, mask: callback(
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
124 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
125 callbacks = [wrapped_callback]
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
126 dir_path = filepath.FilePath(dir_path)
1152
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
127 self.notifier.watch(
1251
a1606e2a92eb server: fixed watching a directory which is already watched:
Goffi <goffi@goffi.org>
parents: 1246
diff changeset
128 dir_path, mask=mask, autoAdd=auto_add, recursive=recursive,
1152
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
129 callbacks=callbacks)
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
130 self._check_callback(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
131
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
132
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
133 class WebSession(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
134 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
135
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 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
137 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
138 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
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 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
141 """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
142 self.__lock = True
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
143 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
144
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 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
146 """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
147 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
148 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
149
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 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
151 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
152 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
153
451
1a0cec9b0f1e better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 449
diff changeset
154
554
471b6babe960 server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents: 553
diff changeset
155 class WaitingRequests(dict):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
156 def set_request(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
157 """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
158
471b6babe960 server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents: 553
diff changeset
159 @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
160 @param profile (str): %(doc_profile)s
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
161 @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
162 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
163 """
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
164 dc = reactor.callLater(BRIDGE_TIMEOUT, self.purge_request, 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
165 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
166
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
167 def purge_request(self, profile):
554
471b6babe960 server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents: 553
diff changeset
168 """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
169
471b6babe960 server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents: 553
diff changeset
170 @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
171 """
471b6babe960 server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents: 553
diff changeset
172 try:
471b6babe960 server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents: 553
diff changeset
173 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
174 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
175 return
471b6babe960 server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents: 553
diff changeset
176 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
177 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
178 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
179
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
180 def get_request(self, profile):
554
471b6babe960 server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents: 553
diff changeset
181 """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
182
471b6babe960 server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents: 553
diff changeset
183 @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
184 @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
185 """
471b6babe960 server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents: 553
diff changeset
186 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
187
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
188 def get_register_with_ext_jid(self, 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
189 """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
190
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
191 @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
192 @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
193 """
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
194 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
195
554
471b6babe960 server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents: 553
diff changeset
196
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
197 class LiberviaWeb(service.Service):
995
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 990
diff changeset
198 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
199
810
3905bc24eb17 server: proper options handling
Goffi <goffi@goffi.org>
parents: 801
diff changeset
200 def __init__(self, options):
3905bc24eb17 server: proper options handling
Goffi <goffi@goffi.org>
parents: 801
diff changeset
201 self.options = options
1504
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
202 websockets.host = self
1236
352e189ab7f8 server: avoid double init
Goffi <goffi@goffi.org>
parents: 1235
diff changeset
203
352e189ab7f8 server: avoid double init
Goffi <goffi@goffi.org>
parents: 1235
diff changeset
204 def _init(self):
352e189ab7f8 server: avoid double init
Goffi <goffi@goffi.org>
parents: 1235
diff changeset
205 # we do init here and not in __init__ to avoid doule initialisation with twistd
352e189ab7f8 server: avoid double init
Goffi <goffi@goffi.org>
parents: 1235
diff changeset
206 # 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
207 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
208 self.waiting_profiles = WaitingRequests() # FIXME: should be removed
1146
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
209 self._main_conf = None
1152
1c23252958ed server: iNotify support:
Goffi <goffi@goffi.org>
parents: 1151
diff changeset
210 self.files_watcher = FilesWatcher(self)
470
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 465
diff changeset
211
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
212 if self.options["base_url_ext"]:
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
213 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
214 if self.base_url_ext[-1] != "/":
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
215 self.base_url_ext += "/"
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
216 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
217 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
218 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
219 # 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
220 # scheme = self.base_url_ext_data.scheme or 'https'
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
221 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
222
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
223 if not self.options["port_https_ext"]:
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
224 self.options["port_https_ext"] = self.options["port_https"]
470
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 465
diff changeset
225
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
226 self._cleanup = []
470
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 465
diff changeset
227
451
1a0cec9b0f1e better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 449
diff changeset
228 self.sessions = {} # key = session value = user
1a0cec9b0f1e better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 449
diff changeset
229 self.prof_connected = set() # Profiles connected
985
64826e69f365 pages: cache mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 984
diff changeset
230 self.ns_map = {} # map of short name to namespaces
470
34ce41e014c4 server side: options managing improvments:
Goffi <goffi@goffi.org>
parents: 465
diff changeset
231
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
232 ## bridge ##
1367
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
233 self._bridge_retry = self.options['bridge-retries']
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
234 self.bridge = bridge()
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
235 self.bridge.bridge_connect(callback=self._bridge_cb, errback=self._bridge_eb)
553
8492c2bb463b server_side: enable HTTP gzip compression
souliane <souliane@mailoo.org>
parents: 522
diff changeset
236
1505
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
237 ## libervia app callbacks ##
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
238 # mapping instance id to the callback to call on "started" signal
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
239 self.apps_cb: Dict[str, Callable] = {}
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
240
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
241 @property
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
242 def roots(self):
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
243 """Return available virtual host roots
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
244
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
245 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
246 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
247 returned first.
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
248 @return (list[web_resource.Resource]): all vhost root resources
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
249 """
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
250 roots = list(set(self.vhost_root.hosts.values()))
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
251 default = self.vhost_root.default
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
252 if default is not None and default not in roots:
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
253 roots.insert(0, default)
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
254 return roots
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
255
1146
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
256 @property
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
257 def main_conf(self):
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
258 """SafeConfigParser instance opened on configuration file (libervia.conf)"""
1146
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
259 if self._main_conf is None:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
260 self._main_conf = config.parse_main_conf(log_filenames=True)
1146
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
261 return self._main_conf
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
262
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
263 def config_get(self, site_root_res, key, default=None, value_type=None):
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
264 """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
265
02afab1b15c5 server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents: 1146
diff changeset
266 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
267 @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
268 @param key(unicode): key to use
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
269 @param default: value to use if not found (see [config.config_get])
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
270 @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
271 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
272 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
273 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
274 - "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
275
02afab1b15c5 server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents: 1146
diff changeset
276 """
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
277 section = site_root_res.site_name.lower().strip() or C.CONFIG_SECTION
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
278 value = config.config_get(self.main_conf, section, key, default=default)
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
279 if value_type is not None:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
280 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
281 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
282 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
283 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
284 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
285 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
286 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
287 elif isinstance(value, dict):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
288 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
289 elif value is not None:
1217
fe9782391f63 server: fixed value filtering in getConfig
Goffi <goffi@goffi.org>
parents: 1216
diff changeset
290 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
291 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
292
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
293 def _namespaces_get_cb(self, ns_map):
1383
81b472bcf0a1 server: be sure to have strings for ns_map
Goffi <goffi@goffi.org>
parents: 1370
diff changeset
294 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
295
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
296 def _namespaces_get_eb(self, failure_):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
297 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
298
1522
a44f77559279 installation: moved from `setup.py` to `pyproject.toml`:
Goffi <goffi@goffi.org>
parents: 1519
diff changeset
299 @template.pass_context
1127
9234f29053b0 server, pages: update to handle multi sites themes, first draft:
Goffi <goffi@goffi.org>
parents: 1126
diff changeset
300 def _front_url_filter(self, ctx, relative_url):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
301 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
302 return os.path.join(
e30e96958fb7 server: use C.SITE_NAME_DEFAULT instead of "sat" when suitable
Goffi <goffi@goffi.org>
parents: 1287
diff changeset
303 '/', 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
304 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
305
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
306 def _move_first_level_to_dict(self, options, key, keys_to_keep):
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
307 """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
308
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
309 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
310 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
311 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
312 @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
313 @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
314 @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
315 """
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
316 try:
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
317 conf = options[key]
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
318 except KeyError:
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
319 return
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
320 if not isinstance(conf, dict):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
321 options[key] = {'': conf}
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
322 return
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
323 default_dict = conf.get('', {})
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
324 to_delete = []
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
325 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
326 if key not in keys_to_keep:
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
327 default_dict[key] = value
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
328 to_delete.append(key)
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
329 for key in to_delete:
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
330 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
331 if default_dict:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
332 conf[''] = default_dict
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
333
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
334 async def check_and_connect_service_profile(self):
1362
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
335 passphrase = self.options["passphrase"]
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
336 if not passphrase:
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
337 raise SysExit(
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
338 C.EXIT_BAD_ARG,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
339 _("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
340 "documentation.")
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
341 )
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
342 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
343 s_prof_connected = await self.bridge_call("is_connected", C.SERVICE_PROFILE)
1362
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
344 except BridgeException as e:
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
345 if e.classname == "ProfileUnknownError":
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
346 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
347 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
348 xmpp_domain = await self.bridge_call("config_get", "", "xmpp_domain")
1362
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
349 xmpp_domain = xmpp_domain.strip()
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
350 if not xmpp_domain:
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
351 raise SysExit(
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
352 C.EXIT_BAD_ARG,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
353 _('"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
354 'check documentation')
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
355 )
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
356 service_profile_jid_s = f"{C.SERVICE_PROFILE}@{xmpp_domain}"
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
357 await self.bridge_call(
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
358 "in_band_account_new",
1362
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
359 service_profile_jid_s,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
360 passphrase,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
361 "",
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
362 xmpp_domain,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
363 0,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
364 )
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
365 except BridgeException as e:
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
366 if e.condition == "conflict":
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
367 log.info(
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
368 _("Service's profile JID {profile_jid} already exists")
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
369 .format(profile_jid=service_profile_jid_s)
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
370 )
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
371 elif e.classname == "UnknownMethod":
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
372 raise SysExit(
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
373 C.EXIT_BRIDGE_ERROR,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
374 _("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
375 "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
376 "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
377 "manually.").format(
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
378 profile=C.SERVICE_PROFILE,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
379 profile_jid=service_profile_jid_s)
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
380 )
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
381 elif e.condition == "service-unavailable":
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
382 raise SysExit(
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
383 C.EXIT_BRIDGE_ERROR,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
384 _("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
385 "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
386 "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
387 "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
388 "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
389 "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
390 "documentation.").format(
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
391 profile=C.SERVICE_PROFILE,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
392 profile_jid=service_profile_jid_s,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
393 app_name=C.APP_NAME)
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
394 )
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
395 elif e.condition == "not-acceptable":
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
396 raise SysExit(
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
397 C.EXIT_BRIDGE_ERROR,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
398 _("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
399 "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
400 "In-Band Registration please check XMPP server "
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
401 "configuration: {reason}"
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
402 ).format(
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
403 profile=C.SERVICE_PROFILE,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
404 profile_jid=service_profile_jid_s,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
405 reason=e.message)
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
406 )
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
407
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
408 else:
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
409 raise SysExit(
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
410 C.EXIT_BRIDGE_ERROR,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
411 _("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
412 "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
413 )
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
414 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
415 await self.bridge_call("profile_create", C.SERVICE_PROFILE, passphrase)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
416 await self.bridge_call(
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
417 "profile_start_session", passphrase, C.SERVICE_PROFILE)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
418 await self.bridge_call(
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
419 "param_set", "JabberID", service_profile_jid_s, "Connection", -1,
1362
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
420 C.SERVICE_PROFILE)
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
421 await self.bridge_call(
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
422 "param_set", "Password", passphrase, "Connection", -1,
1362
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
423 C.SERVICE_PROFILE)
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
424 except BridgeException as e:
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
425 raise SysExit(
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
426 C.EXIT_BRIDGE_ERROR,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
427 _("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
428 "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
429 )
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
430 log.info(_("Service profile has been successfully created"))
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
431 s_prof_connected = False
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
432 else:
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
433 raise SysExit(C.EXIT_BRIDGE_ERROR, e.message)
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
434
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
435 if not s_prof_connected:
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
436 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
437 await self.bridge_call(
1362
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
438 "connect",
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
439 C.SERVICE_PROFILE,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
440 passphrase,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
441 {},
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
442 )
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
443 except BridgeException as e:
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
444 raise SysExit(
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
445 C.EXIT_BRIDGE_ERROR,
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
446 _("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
447 )
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
448
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
449 async def backend_ready(self):
1397
ed037818d6de core (constants): renaming following global project renaming
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
450 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
451
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
452 # settings
1364
df40708c4c76 server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents: 1362
diff changeset
453 if self.options['dev-mode']:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
454 log.info(_("Developer mode activated"))
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
455 self.media_dir = await self.bridge_call("config_get", "", "media_dir")
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
456 self.local_dir = await self.bridge_call("config_get", "", "local_dir")
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
457 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
458 self.renderer = template.Renderer(self, self._front_url_filter)
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
459 sites_names = list(self.renderer.sites_paths.keys())
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
460
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
461 self._move_first_level_to_dict(self.options, "url_redirections_dict", sites_names)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
462 self._move_first_level_to_dict(self.options, "menu_json", sites_names)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
463 self._move_first_level_to_dict(self.options, "menu_extra_json", sites_names)
1359
2da573bf3f8b server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents: 1354
diff changeset
464 menu = self.options["menu_json"]
2da573bf3f8b server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents: 1354
diff changeset
465 if not '' in menu:
2da573bf3f8b server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents: 1354
diff changeset
466 menu[''] = C.DEFAULT_MENU
2da573bf3f8b server: new `menu_extra_json` configuration option:
Goffi <goffi@goffi.org>
parents: 1354
diff changeset
467 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
468 menu[site].extend(value)
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
469
1362
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
470 # service profile
1370
2d6cfce0df6c server: typo
Goffi <goffi@goffi.org>
parents: 1369
diff changeset
471 if not self.options['build-only']:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
472 await self.check_and_connect_service_profile()
1362
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
473
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
474 # restricted bridge, the one used by browser code
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
475 self.restricted_bridge = RestrictedBridge(self)
45ebeea1bacd server: improved service profile check + auto creation:
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
476
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
477 # we create virtual hosts and import Libervia pages into them
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
478 self.vhost_root = vhost.NameVirtualHost()
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
479 default_site_path = Path(libervia.web.__file__).parent.resolve()
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
480 # self.sat_root is official Libervia site
1253
6d49fae517ba pages: browser metadata + root `_browser`:
Goffi <goffi@goffi.org>
parents: 1251
diff changeset
481 root_path = default_site_path / C.TEMPLATE_STATIC_DIR
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
482 self.sat_root = default_root = LiberviaRootResource(
1246
aaf28d45ae67 pages: browser code, first draft:
Goffi <goffi@goffi.org>
parents: 1245
diff changeset
483 host=self, host_name='', site_name='',
aaf28d45ae67 pages: browser code, first draft:
Goffi <goffi@goffi.org>
parents: 1245
diff changeset
484 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
485 if self.options['dev-mode']:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
486 self.files_watcher.watch_dir(
1153
94f9d81a475e pages: auto reloading
Goffi <goffi@goffi.org>
parents: 1152
diff changeset
487 default_site_path, auto_add=True, recursive=True,
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
488 callback=LiberviaPage.on_file_change, site_root=self.sat_root,
1153
94f9d81a475e pages: auto reloading
Goffi <goffi@goffi.org>
parents: 1152
diff changeset
489 site_path=default_site_path)
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
490 LiberviaPage.import_pages(self, self.sat_root)
1146
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
491 tasks_manager = TasksManager(self, self.sat_root)
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
492 await tasks_manager.parse_tasks()
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
493 await tasks_manager.run_tasks()
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
494 # FIXME: handle _set_menu in a more generic way, taking care of external sites
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
495 await self.sat_root._set_menu(self.options["menu_json"])
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
496 self.vhost_root.default = default_root
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
497 existing_vhosts = {b'': default_root}
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
498
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
499 for host_name, site_name in self.options["vhosts_dict"].items():
1246
aaf28d45ae67 pages: browser code, first draft:
Goffi <goffi@goffi.org>
parents: 1245
diff changeset
500 if site_name == C.SITE_NAME_DEFAULT:
aaf28d45ae67 pages: browser code, first draft:
Goffi <goffi@goffi.org>
parents: 1245
diff changeset
501 raise ValueError(
aaf28d45ae67 pages: browser code, first draft:
Goffi <goffi@goffi.org>
parents: 1245
diff changeset
502 f"{C.DEFAULT_SITE_NAME} is reserved and can't be used in vhosts_dict")
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
503 encoded_site_name = site_name.encode('utf-8')
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
504 try:
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
505 site_path = self.renderer.sites_paths[site_name]
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
506 except KeyError:
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
507 log.warning(_(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
508 "host {host_name} link to non existing site {site_name}, ignoring "
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
509 "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
510 continue
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
511 if encoded_site_name in existing_vhosts:
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
512 # we have an alias host, we re-use existing resource
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
513 res = existing_vhosts[encoded_site_name]
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
514 else:
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
515 # 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
516 # if not, we use default template's static dir
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
517 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
518 if not os.path.isdir(root_path):
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
519 root_path = os.path.join(
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
520 site_path, C.TEMPLATE_TPL_DIR, C.TEMPLATE_THEME_DEFAULT,
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
521 C.TEMPLATE_STATIC_DIR)
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
522 res = LiberviaRootResource(
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
523 host=self,
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
524 host_name=host_name,
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
525 site_name=site_name,
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
526 site_path=site_path,
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
527 path=root_path)
1153
94f9d81a475e pages: auto reloading
Goffi <goffi@goffi.org>
parents: 1152
diff changeset
528
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
529 existing_vhosts[encoded_site_name] = res
1191
ba45dcdbeeaf server: fixed sites alias:
Goffi <goffi@goffi.org>
parents: 1184
diff changeset
530
1364
df40708c4c76 server: renamed `--dev_mode` to `--dev-mode` and set it as a flag:
Goffi <goffi@goffi.org>
parents: 1362
diff changeset
531 if self.options['dev-mode']:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
532 self.files_watcher.watch_dir(
1153
94f9d81a475e pages: auto reloading
Goffi <goffi@goffi.org>
parents: 1152
diff changeset
533 site_path, auto_add=True, recursive=True,
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
534 callback=LiberviaPage.on_file_change, site_root=res,
1514
16228994ca3b server: fix hot reloading of modules in dev mode
Goffi <goffi@goffi.org>
parents: 1512
diff changeset
535 # FIXME: site_path should always be a Path, check code above and
16228994ca3b server: fix hot reloading of modules in dev mode
Goffi <goffi@goffi.org>
parents: 1512
diff changeset
536 # in template module
16228994ca3b server: fix hot reloading of modules in dev mode
Goffi <goffi@goffi.org>
parents: 1512
diff changeset
537 site_path=Path(site_path))
1191
ba45dcdbeeaf server: fixed sites alias:
Goffi <goffi@goffi.org>
parents: 1184
diff changeset
538
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
539 LiberviaPage.import_pages(self, res)
1191
ba45dcdbeeaf server: fixed sites alias:
Goffi <goffi@goffi.org>
parents: 1184
diff changeset
540 # FIXME: default pages are accessible if not overriden by external website
ba45dcdbeeaf server: fixed sites alias:
Goffi <goffi@goffi.org>
parents: 1184
diff changeset
541 # while necessary for login or re-using existing pages
ba45dcdbeeaf server: fixed sites alias:
Goffi <goffi@goffi.org>
parents: 1184
diff changeset
542 # we may want to disable access to the page by direct URL
ba45dcdbeeaf server: fixed sites alias:
Goffi <goffi@goffi.org>
parents: 1184
diff changeset
543 # (e.g. /blog disabled except if called by external site)
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
544 LiberviaPage.import_pages(self, res, root_path=default_site_path)
1245
079e8eb6e327 server (tasks): refactoring:
Goffi <goffi@goffi.org>
parents: 1242
diff changeset
545 tasks_manager = TasksManager(self, res)
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
546 await tasks_manager.parse_tasks()
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
547 await tasks_manager.run_tasks()
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
548 await res._set_menu(self.options["menu_json"])
1191
ba45dcdbeeaf server: fixed sites alias:
Goffi <goffi@goffi.org>
parents: 1184
diff changeset
549
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
550 self.vhost_root.addHost(host_name.encode('utf-8'), res)
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
551
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
552 templates_res = web_resource.Resource()
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
553 self.put_child_all(C.TPL_RESOURCE.encode('utf-8'), templates_res)
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
554 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
555 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
556 static.File(site_path))
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
557
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
558 d = self.bridge_call("namespaces_get")
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
559 d.addCallback(self._namespaces_get_cb)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
560 d.addErrback(self._namespaces_get_eb)
858
7dde76708892 server: URL redirections + misc:
Goffi <goffi@goffi.org>
parents: 856
diff changeset
561
995
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 990
diff changeset
562 # websocket
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
563 if self.options["connection_type"] in ("https", "both"):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
564 wss = websockets.LiberviaPageWSProtocol.get_resource(secure=True)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
565 self.put_child_all(b'wss', wss)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
566 if self.options["connection_type"] in ("http", "both"):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
567 ws = websockets.LiberviaPageWSProtocol.get_resource(secure=False)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
568 self.put_child_all(b'ws', ws)
995
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 990
diff changeset
569
1512
65e063657597 server: move resources to a dedicated module
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
570 # 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
571 self.bridge.register_signal(
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
572 "ps_event_raw", partial(LiberviaPage.on_node_event, self), "plugin"
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
573 )
1559
410064b31dca browser (calls): add some logs useful for debugging
Goffi <goffi@goffi.org>
parents: 1549
diff changeset
574
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
575 self.bridge.register_signal(
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
576 "message_new", partial(self.on_signal, "message_new")
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
577 )
1516
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
578 self.bridge.register_signal(
1575
9e3f7bf55749 server: listen to `message_update` signal.
Goffi <goffi@goffi.org>
parents: 1560
diff changeset
579 "message_update", partial(self.on_signal, "message_update")
9e3f7bf55749 server: listen to `message_update` signal.
Goffi <goffi@goffi.org>
parents: 1560
diff changeset
580 )
9e3f7bf55749 server: listen to `message_update` signal.
Goffi <goffi@goffi.org>
parents: 1560
diff changeset
581 self.bridge.register_signal(
1549
e47c24204449 browser (calls): update call to handle search, control buttons, and better UI/UX:
Goffi <goffi@goffi.org>
parents: 1522
diff changeset
582 "call_setup", partial(self.on_signal, "call_setup"), "plugin"
1516
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
583 )
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
584 self.bridge.register_signal(
1560
84f312be53b4 browser (calls): handle "ringing" info message and update status when received
Goffi <goffi@goffi.org>
parents: 1559
diff changeset
585 "call_info", partial(self.on_signal, "call_info"), "plugin"
84f312be53b4 browser (calls): handle "ringing" info message and update status when received
Goffi <goffi@goffi.org>
parents: 1559
diff changeset
586 )
84f312be53b4 browser (calls): handle "ringing" info message and update status when received
Goffi <goffi@goffi.org>
parents: 1559
diff changeset
587 self.bridge.register_signal(
1516
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
588 "call_ended", partial(self.on_signal, "call_ended"), "plugin"
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
589 )
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
590 self.bridge.register_signal(
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
591 "ice_candidates_new", partial(self.on_signal, "ice_candidates_new"), "plugin"
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
592 )
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
593 self.bridge.register_signal(
1559
410064b31dca browser (calls): add some logs useful for debugging
Goffi <goffi@goffi.org>
parents: 1549
diff changeset
594 "ice_restart", partial(self.on_signal, "ice_restart"), "plugin"
410064b31dca browser (calls): add some logs useful for debugging
Goffi <goffi@goffi.org>
parents: 1549
diff changeset
595 )
410064b31dca browser (calls): add some logs useful for debugging
Goffi <goffi@goffi.org>
parents: 1549
diff changeset
596 self.bridge.register_signal(
1516
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
597 "action_new", self.action_new_handler,
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
598 )
917
86563d6c83b0 server: Libervia pages:
Goffi <goffi@goffi.org>
parents: 915
diff changeset
599
1505
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
600 # libervia applications handling
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
601 self.bridge.register_signal(
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
602 "application_started", self.application_started_handler, "plugin"
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
603 )
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
604 self.bridge.register_signal(
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
605 "application_error", self.application_error_handler, "plugin"
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
606 )
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
607
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
608 #  Progress handling
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
609 self.bridge.register_signal(
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
610 "progress_started", partial(ProgressHandler._signal, "started")
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
611 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
612 self.bridge.register_signal(
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
613 "progress_finished", partial(ProgressHandler._signal, "finished")
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
614 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
615 self.bridge.register_signal(
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
616 "progress_error", partial(ProgressHandler._signal, "error")
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
617 )
1063
4b69f69c6ffd server: new ProgressHandler helper class, to handle progressing actions
Goffi <goffi@goffi.org>
parents: 1055
diff changeset
618
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 913
diff changeset
619 # media dirs
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 913
diff changeset
620 # FIXME: get rid of dirname and "/" in C.XXX_DIR
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
621 self.put_child_all(os.path.dirname(C.MEDIA_DIR).encode('utf-8'),
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
622 ProtectedFile(self.media_dir))
1242
8f39d98416c5 server: added a child for common cache
Goffi <goffi@goffi.org>
parents: 1240
diff changeset
623
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 913
diff changeset
624 self.cache_resource = web_resource.NoResource()
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
625 self.put_child_all(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
626 self.cache_resource.putChild(
8f39d98416c5 server: added a child for common cache
Goffi <goffi@goffi.org>
parents: 1240
diff changeset
627 b"common", ProtectedFile(str(self.cache_root_dir / Path("common"))))
858
7dde76708892 server: URL redirections + misc:
Goffi <goffi@goffi.org>
parents: 856
diff changeset
628
1037
dc6c8c4d8ff6 server: redirection rework:
Goffi <goffi@goffi.org>
parents: 1019
diff changeset
629 # redirections
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
630 for root in self.roots:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
631 await root._init_redirections(self.options)
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
632
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
633 # 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
634 del self.options["url_redirections_dict"]
858
7dde76708892 server: URL redirections + misc:
Goffi <goffi@goffi.org>
parents: 856
diff changeset
635
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
636 server.Request.defaultContentType = "text/html; charset=utf-8"
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
637 wrapped = web_resource.EncodingResourceWrapper(
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
638 self.vhost_root, [server.GzipEncoderFactory()]
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
639 )
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 913
diff changeset
640 self.site = server.Site(wrapped)
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
641 self.site.sessionFactory = WebSession
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
642
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
643 def _bridge_cb(self):
1367
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
644 del self._bridge_retry
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
645 self.bridge.ready_get(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
646 lambda: self.initialised.callback(None),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
647 lambda failure: self.initialised.errback(Exception(failure)),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
648 )
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
649 self.initialised.addCallback(lambda __: defer.ensureDeferred(self.backend_ready()))
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
650
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
651 def _bridge_eb(self, failure_):
1594
93abef9a3548 server: catch `DBusException` and retry to connect in this case.
Goffi <goffi@goffi.org>
parents: 1592
diff changeset
652 if (
93abef9a3548 server: catch `DBusException` and retry to connect in this case.
Goffi <goffi@goffi.org>
parents: 1592
diff changeset
653 isinstance(failure_, BridgeExceptionNoService)
93abef9a3548 server: catch `DBusException` and retry to connect in this case.
Goffi <goffi@goffi.org>
parents: 1592
diff changeset
654 or isinstance(failure_, DBusException)
93abef9a3548 server: catch `DBusException` and retry to connect in this case.
Goffi <goffi@goffi.org>
parents: 1592
diff changeset
655 ):
1367
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
656 if self._bridge_retry:
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
657 if self._bridge_retry < 0:
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
658 print(_("Can't connect to bridge, will retry indefinitely. "
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
659 "Next try in 1s."))
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
660 else:
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
661 self._bridge_retry -= 1
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
662 print(
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
663 _(
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
664 "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
665 "trie(s) left)."
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
666 ).format(retries_left=self._bridge_retry)
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
667 )
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
668 time.sleep(1)
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
669 self.bridge.bridge_connect(callback=self._bridge_cb, errback=self._bridge_eb)
1367
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
670 return
ce5cfe004d4e server: new `--bridge-retries` option:
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
671
1594
93abef9a3548 server: catch `DBusException` and retry to connect in this case.
Goffi <goffi@goffi.org>
parents: 1592
diff changeset
672 print("Can't connect to Libervia backend, are you sure it's launched?")
1126
7cd89277a129 server: fixed missing backend detection
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
673 else:
1594
93abef9a3548 server: catch `DBusException` and retry to connect in this case.
Goffi <goffi@goffi.org>
parents: 1592
diff changeset
674 log.exception("Can't connect to bridge")
1126
7cd89277a129 server: fixed missing backend detection
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
675 sys.exit(1)
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 913
diff changeset
676
682
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
677 @property
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
678 def version(self):
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
679 """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
680 return C.APP_VERSION
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
681
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
682 @property
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
683 def full_version(self):
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
684 """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
685 version = self.version
1519
01b8d68edd70 version: use standard Python's `dev0` instead of Libervia specific `D` for dev version
Goffi <goffi@goffi.org>
parents: 1518
diff changeset
686 if version.split(".")[-1] == "dev0":
682
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
687 # 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
688 try:
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
689 return self._version_cache
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
690 except AttributeError:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
691 self._version_cache = "{} ({})".format(
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
692 version, utils.get_repository_data(libervia.web)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
693 )
682
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
694 return self._version_cache
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
695 else:
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
696 return version
e6bb64bd6b4d server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents: 679
diff changeset
697
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
698 def bridge_call(self, method_name, *args, **kwargs):
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
699 """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
700
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
701 @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
702 @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
703
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
704 """
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
705 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
706
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
707 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
708 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
709 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
710 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
711 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
712 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
713 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
714
1138
ef565839dada server: don't convert failure in errback to jsonrpclib.Fault anymore:
Goffi <goffi@goffi.org>
parents: 1132
diff changeset
715 def _errback(failure_):
ef565839dada server: don't convert failure in errback to jsonrpclib.Fault anymore:
Goffi <goffi@goffi.org>
parents: 1132
diff changeset
716 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
717
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
718 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
719 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
720 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
721 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
722
1516
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
723 def action_new_handler(
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
724 self,
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
725 action_data_s: str,
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
726 action_id: str,
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
727 security_limit: int,
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
728 profile: str
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
729 ) -> None:
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
730 if security_limit > C.SECURITY_LIMIT:
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
731 log.debug(
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
732 f"ignoring action {action_id} due to security limit"
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
733 )
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
734 else:
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
735 self.on_signal(
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
736 "action_new", action_data_s, action_id, security_limit, profile
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
737 )
a3ca1bab6eb1 server, restricted bridge: add new methods and signals to prepare calls implementation:
Goffi <goffi@goffi.org>
parents: 1514
diff changeset
738
1504
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
739 def on_signal(self, signal_name, *args):
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
740 profile = args[-1]
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
741 if not profile:
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
742 log.error(f"got signal without profile: {signal_name}, {args}")
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
743 return
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
744 session_iface.WebSession.send(
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
745 profile,
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
746 "bridge",
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
747 {"signal": signal_name, "args": args}
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
748 )
1504
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
749
1505
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
750 def application_started_handler(
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
751 self,
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
752 name: str,
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
753 instance_id: str,
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
754 extra_s: str
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
755 ) -> None:
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
756 callback = self.apps_cb.pop(instance_id, None)
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
757 if callback is not None:
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
758 defer.ensureDeferred(callback(str(name), str(instance_id)))
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
759
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
760 def application_error_handler(
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
761 self,
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
762 name: str,
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
763 instance_id: str,
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
764 extra_s: str
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
765 ) -> None:
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
766 callback = self.apps_cb.pop(instance_id, None)
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
767 if callback is not None:
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
768 extra = data_format.deserialise(extra_s)
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
769 log.error(
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
770 f"Can't start application {name}: {extra['class']}\n{extra['msg']}"
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
771 )
a169cbc315f0 server: don't wait anymore for libervia app to be fully started:
Goffi <goffi@goffi.org>
parents: 1504
diff changeset
772
1266
6b7f9c3558cc server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents: 1258
diff changeset
773 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
774 """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
775
22fe06569b1a server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents: 959
diff changeset
776 @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
777 @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
778 @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
779 - 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
780 - 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
781 @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
782 """
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
783 register_with_ext_jid = self.waiting_profiles.get_register_with_ext_jid(profile)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
784 self.waiting_profiles.purge_request(profile)
1090
9c41b7e91172 server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents: 1066
diff changeset
785 session = request.getSession()
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
786 web_session = session_iface.IWebSession(session)
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
787 if web_session.profile:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
788 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
789 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
790
1305
db9ea167c409 pages: `profile` is now exposed to scripts
Goffi <goffi@goffi.org>
parents: 1293
diff changeset
791 # 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
792 # which may cause trouble when exposing it to scripts
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
793 web_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
794 self.prof_connected.add(profile)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
795 cache_dir = os.path.join(
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
796 self.cache_root_dir, "profiles", regex.path_escape(profile)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
797 )
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
798 # 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
799 # profile's cache directory, without uuid
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
800 self.cache_resource.putChild(web_session.uuid.encode('utf-8'),
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
801 ProtectedFile(cache_dir))
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
802 log.debug(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
803 _("profile cache resource added from {uuid} to {path}").format(
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
804 uuid=web_session.uuid, path=cache_dir
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
805 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
806 )
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
807
1504
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
808 def on_expire():
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
809 log.info("Session expired (profile={profile})".format(profile=profile))
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
810 self.cache_resource.delEntity(web_session.uuid.encode('utf-8'))
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
811 log.debug(
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
812 _("profile cache resource {uuid} deleted").format(uuid=web_session.uuid)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
813 )
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
814 web_session.on_expire()
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
815 if web_session.ws_socket is not None:
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
816 web_session.ws_socket.close()
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
817 # and now we disconnect the profile
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
818 self.bridge_call("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
819
1504
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
820 session.notifyOnExpire(on_expire)
961
22fe06569b1a server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents: 959
diff changeset
821
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
822 # FIXME: those session infos should be returned by connect or is_connected
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
823 infos = await self.bridge_call("session_infos_get", profile)
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
824 web_session.jid = jid.JID(infos["jid"])
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
825 own_bare_jid_s = web_session.jid.userhost()
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
826 own_id_raw = await self.bridge_call(
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
827 "identity_get", own_bare_jid_s, [], True, profile)
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
828 web_session.identities[own_bare_jid_s] = data_format.deserialise(own_id_raw)
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
829 web_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
830
9c41b7e91172 server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents: 1066
diff changeset
831 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
832 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
833
1598
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
834 async def connect(self, request, login, password):
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
835 """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
836
22fe06569b1a server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents: 959
diff changeset
837 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
838 @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
839 @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
840 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
841 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
842 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
843 @param password(unicode): user password
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
844 @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
845 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
846 @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
847 @raise exceptions.ProfileUnknownError: this login doesn't exist
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
848 @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
849 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
850 @raise exceptions.NotReady: a profile connection is already waiting
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
851 @raise exceptions.TimeoutError: didn't received and answer from bridge
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
852 @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
853 @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
854 @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
855 """
22fe06569b1a server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents: 959
diff changeset
856 # 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
857 if login.startswith("@"):
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
858 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
859
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
860 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
861 log.debug("logging a guest account")
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
862 elif "@" in login:
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
863 if login.count("@") != 1:
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
864 raise failure.Failure(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
865 exceptions.DataError("Invalid login: {login}".format(login=login))
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
866 )
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
867 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
868 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
869 except (RuntimeError, jid.InvalidFormat, AttributeError):
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
870 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
871
22fe06569b1a server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents: 959
diff changeset
872 # FIXME: should it be cached?
1598
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
873 new_account_domain = await self.bridge_call("account_domain_new_get")
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
874
22fe06569b1a server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents: 959
diff changeset
875 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
876 # 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
877 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
878 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
879 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
880 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
881
22fe06569b1a server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents: 959
diff changeset
882 try:
1598
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
883 profile = await self.bridge_call("profile_name_get", login)
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
884 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
885 # 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
886 if (
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
887 login_jid is not None and login_jid.user
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
888 ): # try to create a new libervia.backend 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
889 if not self.options["allow_registration"]:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
890 log.warning(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
891 "Trying to register JID account while registration is not "
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
892 "allowed")
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
893 raise failure.Failure(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
894 exceptions.DataError(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
895 "JID login while registration is not allowed"
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
896 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
897 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
898 profile = login # FIXME: what if there is a resource?
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
899 connect_method = "credentials_xmpp_connect"
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
900 register_with_ext_jid = True
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
901 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
902 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
903 else:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
904 if profile != login or (
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
905 not password
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
906 and profile
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
907 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
908 ):
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
909 # 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
910 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
911 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
912
22fe06569b1a server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents: 959
diff changeset
913 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
914
1598
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
915 # we check the active session
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
916 web_session = session_iface.IWebSession(request.getSession())
1598
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
917 if web_session.profile != profile:
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
918 # It's a different profile, we need to disconnect it.
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
919 # We always purge session even if no user was logged, to avoid the re-use of
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
920 # cookie (i.e. to avoid session fixation).
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
921 if web_session.profile:
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
922 # no need to log a warning if the previous profile was the service profile
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
923 log.warning(_(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
924 "{new_profile} requested login, but {old_profile} was already "
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
925 "connected, disconnecting {old_profile}").format(
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
926 old_profile=web_session.profile, new_profile=profile))
1598
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
927 self.purge_session(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
928
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
929 if self.waiting_profiles.get_request(profile):
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
930 #  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
931 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
932
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
933 self.waiting_profiles.set_request(request, profile, register_with_ext_jid)
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
934 try:
1598
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
935 connected = await self.bridge_call(connect_method, profile, password)
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
936 except Exception as failure_:
1204
a2df53dfbf46 server: handle unexpected exceptions on connect:
Goffi <goffi@goffi.org>
parents: 1203
diff changeset
937 fault = getattr(failure_, 'classname', None)
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
938 self.waiting_profiles.purge_request(profile)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
939 if fault in ("PasswordError", "ProfileUnknownError"):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
940 log.info("Profile {profile} doesn't exist or the submitted password is "
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
941 "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
942 raise failure.Failure(ValueError(C.PROFILE_AUTH_ERROR))
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
943 elif fault == "SASLAuthError":
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
944 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
945 .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
946 raise failure.Failure(ValueError(C.XMPP_AUTH_ERROR))
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
947 elif fault == "NoReply":
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
948 log.info(_("Did not receive a reply (the timeout expired or the "
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
949 "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
950 raise exceptions.TimeOutError
1204
a2df53dfbf46 server: handle unexpected exceptions on connect:
Goffi <goffi@goffi.org>
parents: 1203
diff changeset
951 elif fault is None:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
952 log.info(_("Unexepected failure: {failure_}").format(failure_=failure))
1204
a2df53dfbf46 server: handle unexpected exceptions on connect:
Goffi <goffi@goffi.org>
parents: 1203
diff changeset
953 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
954 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
955 log.error('Unmanaged fault class "{fault}" in errback for the '
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
956 'connection of profile {profile}'.format(
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
957 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
958 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
959
22fe06569b1a server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents: 959
diff changeset
960 if connected:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
961 #  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
962 # do we have a corresponding session in Libervia?
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
963 web_session = session_iface.IWebSession(request.getSession())
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
964 if web_session.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
965 # yes, session is active
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
966 if web_session.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
967 # 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
968 # so this line should never be reached
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
969 log.error(_(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
970 "session profile [{session_profile}] differs from login "
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
971 "profile [{profile}], this should not happen!")
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
972 .format(session_profile=web_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
973 raise exceptions.InternalError("profile mismatch")
1598
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
974 return C.SESSION_ACTIVE
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
975 log.info(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
976 _(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
977 "profile {profile} was already connected in backend".format(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
978 profile=profile
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
979 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
980 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
981 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
982 #  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
983
1598
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
984 state = await self._logged(profile, request)
86c7a3a625d5 server: always start a new session on connection:
Goffi <goffi@goffi.org>
parents: 1594
diff changeset
985 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
986
1592
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
987 async def check_registration_id(self, request: server.Request) -> None:
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
988 """Check if a valid registration ID is found in request data
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
989
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
990 @param request: request used for account registration
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
991
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
992 @raise exceptions.NotFound: not valid registration ID has been found
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
993 """
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
994 try:
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
995 r_data = request.data
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
996 registration_id = r_data["registration_id"]
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
997 except (AttributeError, KeyError):
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
998 log.warning("Can't find registration ID")
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
999 raise exceptions.NotFound
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1000 if registration_id is None:
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1001 raise exceptions.NotFound
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1002 try:
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1003 registration_link_data = data_format.deserialise(
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1004 await self.bridge_call(
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1005 "registration_link_get",
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1006 registration_id
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1007 )
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1008 )
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1009 except BridgeException as e:
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1010 if e.classname == "NotFound":
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1011 log.warning(f"Invalid registration ID: {registration_id!r}")
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1012 else:
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1013 log.exception(f"Can't get registration ID data: {e}")
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1014 raise exceptions.NotFound
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1015 else:
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1016 log.info(
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1017 f"Using registration ID {registration_id!r} ("
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1018 f"{registration_link_data['recipient']})."
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1019 )
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1020
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1021
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1022 async def register_new_account(
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1023 self,
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1024 request: server.Request,
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1025 login: str,
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1026 password: str,
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1027 email: str
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1028 ) -> str:
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
1029 """Create a new account, or return error
1592
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1030
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1031 @param request: request linked to the session
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1032 @param login: new account requested login
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1033 @param email: new account email
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1034 @param password: new account password
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1035 @return: a constant indicating the 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
1036 - 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
1037 - 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
1038 - 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
1039 - 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
1040 - 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
1041 @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
1042 """
22fe06569b1a server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents: 959
diff changeset
1043 if not self.options["allow_registration"]:
1592
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1044 try:
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1045 await self.check_registration_id(request)
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1046 except exceptions.NotFound:
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1047 log.warning(
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1048 _("Registration received while it is not allowed, hack attempt?")
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1049 )
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1050 raise failure.Failure(
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1051 exceptions.PermissionError("Registration is not allowed on this server")
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1052 )
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
1053
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1054 if (
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1055 not re.match(C.REG_LOGIN_RE, login)
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1056 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
1057 or len(password) < C.PASSWORD_MIN_LENGTH
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1058 ):
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
1059 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
1060
1592
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1061 try:
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1062 await self.bridge_call("libervia_account_register", email, password, login)
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1063 except BridgeException as e:
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1064 status = e.classname
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
1065 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
1066 return C.ALREADY_EXISTS
1164
ef3adc3f2078 handle invalid certificate on registration + fixed error handling on registration
Goffi <goffi@goffi.org>
parents: 1158
diff changeset
1067 elif status == "InvalidCertificate":
ef3adc3f2078 handle invalid certificate on registration + fixed error handling on registration
Goffi <goffi@goffi.org>
parents: 1158
diff changeset
1068 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
1069 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
1070 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
1071 else:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1072 log.error(
1592
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1073 _("Unknown registering error status: {status}\n{e}").format(
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1074 status=status, e=e
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1075 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1076 )
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
1077 return status
1592
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1078 else:
291a7026cb2b server: handle new registration link feature, following backend implementation
Goffi <goffi@goffi.org>
parents: 1575
diff changeset
1079 return C.REGISTRATION_SUCCEED
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
1080
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
1081 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
1082 """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
1083
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
1084 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
1085 @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
1086 @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
1087 @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
1088 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
1089
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1090 def init_eb(self, failure):
1361
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
1091 from twisted.application import app
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
1092 if failure.check(SysExit):
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
1093 if failure.value.message:
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
1094 log.error(failure.value.message)
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
1095 app._exitCode = failure.value.exit_code
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
1096 reactor.stop()
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
1097 else:
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
1098 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
1099 app._exitCode = C.EXIT_INTERNAL_ERROR
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
1100 reactor.stop()
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
1101 return failure
626b7bbb7f90 server: mechanism to exit Libervia with an exit code:
Goffi <goffi@goffi.org>
parents: 1360
diff changeset
1102
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1103 def _build_only_cb(self, __):
1368
9624c2a89a92 server: new `--build-only` flag:
Goffi <goffi@goffi.org>
parents: 1367
diff changeset
1104 log.info(_("Stopping here due to --build-only flag"))
9624c2a89a92 server: new `--build-only` flag:
Goffi <goffi@goffi.org>
parents: 1367
diff changeset
1105 self.stop()
9624c2a89a92 server: new `--build-only` flag:
Goffi <goffi@goffi.org>
parents: 1367
diff changeset
1106
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
1107 def startService(self):
446
c406e46fe9c0 server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents: 445
diff changeset
1108 """Connect the profile for Libervia and start the HTTP(S) server(s)"""
1236
352e189ab7f8 server: avoid double init
Goffi <goffi@goffi.org>
parents: 1235
diff changeset
1109 self._init()
1368
9624c2a89a92 server: new `--build-only` flag:
Goffi <goffi@goffi.org>
parents: 1367
diff changeset
1110 if self.options['build-only']:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1111 self.initialised.addCallback(self._build_only_cb)
1368
9624c2a89a92 server: new `--build-only` flag:
Goffi <goffi@goffi.org>
parents: 1367
diff changeset
1112 else:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1113 self.initialised.addCallback(self._start_service)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1114 self.initialised.addErrback(self.init_eb)
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
1115
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 913
diff changeset
1116 ## URLs ##
919
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents: 917
diff changeset
1117
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1118 def put_child_sat(self, path, resource):
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
1119 """Add a child to the libervia.backend resource"""
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1120 if not isinstance(path, bytes):
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1121 raise ValueError("path must be specified in bytes")
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
1122 self.sat_root.putChild(path, resource)
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
1123
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1124 def put_child_all(self, path, resource):
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
1125 """Add a child to all vhost root resources"""
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1126 if not isinstance(path, bytes):
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1127 raise ValueError("path must be specified in bytes")
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
1128 # 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
1129 # of the resource
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 913
diff changeset
1130 # 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
1131 wrapped_res = web_resource.EncodingResourceWrapper(
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
1132 resource, [server.GzipEncoderFactory()])
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
1133 for root in self.roots:
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
1134 root.putChild(path, wrapped_res)
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 913
diff changeset
1135
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1136 def get_build_path(self, site_name: str, dev: bool=False) -> Path:
1146
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
1137 """Generate build path for a given site name
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
1138
1257
1ec41ac1e7cf server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents: 1256
diff changeset
1139 @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
1140 @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
1141 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
1142 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
1143 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
1144 @return: path to the build directory
1146
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
1145 """
1257
1ec41ac1e7cf server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents: 1256
diff changeset
1146 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
1147 build_path_elts = [
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1148 config.config_get(self.main_conf, "", "local_dir"),
1146
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
1149 C.CACHE_DIR,
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
1150 C.LIBERVIA_CACHE,
1257
1ec41ac1e7cf server: seperation between production build dir and dev build dir:
Goffi <goffi@goffi.org>
parents: 1256
diff changeset
1151 sub_dir,
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1152 regex.path_escape(site_name or C.SITE_NAME_DEFAULT)]
1246
aaf28d45ae67 pages: browser code, first draft:
Goffi <goffi@goffi.org>
parents: 1245
diff changeset
1153 build_path = Path("/".join(build_path_elts))
aaf28d45ae67 pages: browser code, first draft:
Goffi <goffi@goffi.org>
parents: 1245
diff changeset
1154 return build_path.expanduser().resolve()
1146
76d75423ef53 server: tasks manager first draft:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
1155
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1156 def get_ext_base_url_data(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
1157 """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
1158
1435
396d5606477f server (proxy): add "Forwarded" and "X-Forwarded-xxx" headers to reverse proxy
Goffi <goffi@goffi.org>
parents: 1397
diff changeset
1159 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
1160 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
1161 - 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
1162 - 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
1163 - URL of the request
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
1164 @return (urlparse.SplitResult): SplitResult instance with only scheme and
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
1165 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
1166 """
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
1167 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
1168 url_path = request.URLPath()
1467
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1169
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1170 try:
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1171 forwarded = request.requestHeaders.getRawHeaders(
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1172 "forwarded"
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1173 )[0]
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1174 except TypeError:
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1175 # we try deprecated headers
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1176 try:
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1177 proxy_netloc = request.requestHeaders.getRawHeaders(
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1178 "x-forwarded-host"
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1179 )[0]
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1180 except TypeError:
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1181 proxy_netloc = None
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1182 try:
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1183 proxy_scheme = request.requestHeaders.getRawHeaders(
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1184 "x-forwarded-proto"
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1185 )[0]
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1186 except TypeError:
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1187 proxy_scheme = None
1006
d0b27d1e2d50 server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents: 1003
diff changeset
1188 else:
1467
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1189 fwd_data = {
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1190 k.strip(): v.strip()
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1191 for k,v in (d.split("=") for d in forwarded.split(";"))
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1192 }
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1193 proxy_netloc = fwd_data.get("host")
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1194 proxy_scheme = fwd_data.get("proto")
1006
d0b27d1e2d50 server: moved code to retrieve external server from legacy blog to server.py, and use it to find websocket URL
Goffi <goffi@goffi.org>
parents: 1003
diff changeset
1195
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1196 return urllib.parse.SplitResult(
1467
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1197 ext_data.scheme or proxy_scheme or url_path.scheme.decode(),
d6062cccd4c0 server: better reverse proxy headers handling:
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
1198 ext_data.netloc or proxy_netloc or url_path.netloc.decode(),
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1199 ext_data.path or "/",
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1200 "",
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1201 "",
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1202 )
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
1203
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1204 def get_ext_base_url(
1459
47db314e60ca server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents: 1458
diff changeset
1205 self,
47db314e60ca server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents: 1458
diff changeset
1206 request: server.Request,
47db314e60ca server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents: 1458
diff changeset
1207 path: str = "",
47db314e60ca server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents: 1458
diff changeset
1208 query: str = "",
47db314e60ca server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents: 1458
diff changeset
1209 fragment: str = "",
47db314e60ca server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents: 1458
diff changeset
1210 scheme: Optional[str] = None,
47db314e60ca server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents: 1458
diff changeset
1211 ) -> 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
1212 """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
1213
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
1214 external URL is the URL seen by external user
1459
47db314e60ca server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents: 1458
diff changeset
1215 @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
1216 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
1217 @param params: same as for urlsplit.urlsplit
47db314e60ca server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents: 1458
diff changeset
1218 @param query: same as for urlsplit.urlsplit
47db314e60ca server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents: 1458
diff changeset
1219 @param fragment: same as for urlsplit.urlsplit
47db314e60ca server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents: 1458
diff changeset
1220 @param scheme: if not None, will override scheme from base URL
47db314e60ca server: `getExtBaseURL` type hints
Goffi <goffi@goffi.org>
parents: 1458
diff changeset
1221 @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
1222 """
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1223 split_result = self.get_ext_base_url_data(request)
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1224 return urllib.parse.urlunsplit(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1225 (
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1226 split_result.scheme if scheme is None else scheme,
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1227 split_result.netloc,
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1228 os.path.join(split_result.path, path),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1229 query,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1230 fragment,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1231 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1232 )
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
1233
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1234 def check_redirection(self, vhost_root: LiberviaRootResource, url_path: str) -> str:
1037
dc6c8c4d8ff6 server: redirection rework:
Goffi <goffi@goffi.org>
parents: 1019
diff changeset
1235 """check is a part of the URL prefix is redirected then replace it
dc6c8c4d8ff6 server: redirection rework:
Goffi <goffi@goffi.org>
parents: 1019
diff changeset
1236
1458
db13f5c768a0 server: `checkRedirection`: fix range variable + type hints + arg name:
Goffi <goffi@goffi.org>
parents: 1457
diff changeset
1237 @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
1238 @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
1239 @return: possibly redirected URL which should link to the same location
1037
dc6c8c4d8ff6 server: redirection rework:
Goffi <goffi@goffi.org>
parents: 1019
diff changeset
1240 """
1128
6414fd795df4 server, pages: multi-sites refactoring:
Goffi <goffi@goffi.org>
parents: 1127
diff changeset
1241 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
1242 url_parts = url_path.strip("/").split("/")
1475
83cd4862b134 server: fix args range in checkRedirection
Goffi <goffi@goffi.org>
parents: 1467
diff changeset
1243 for idx in range(len(url_parts), -1, -1):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1244 test_url = "/" + "/".join(url_parts[:idx])
1037
dc6c8c4d8ff6 server: redirection rework:
Goffi <goffi@goffi.org>
parents: 1019
diff changeset
1245 if test_url in inv_redirections:
dc6c8c4d8ff6 server: redirection rework:
Goffi <goffi@goffi.org>
parents: 1019
diff changeset
1246 rem_url = url_parts[idx:]
1099
ea0d41ef3719 server: return absolute page in checkRedirection
Goffi <goffi@goffi.org>
parents: 1098
diff changeset
1247 return os.path.join(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1248 "/", "/".join([inv_redirections[test_url]] + rem_url)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1249 )
1458
db13f5c768a0 server: `checkRedirection`: fix range variable + type hints + arg name:
Goffi <goffi@goffi.org>
parents: 1457
diff changeset
1250 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
1251
920
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1252 ## Sessions ##
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1253
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1254 def purge_session(self, request):
920
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1255 """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
1256 session = request.session
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1257 if session is not None:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1258 log.debug(_("session purge"))
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1259 web_session = self.get_session_data(request, session_iface.IWebSession)
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
1260 socket = web_session.ws_socket
1504
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
1261 if socket is not None:
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
1262 socket.close()
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
1263 session.ws_socket = None
920
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1264 session.expire()
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1265 # 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
1266 # session during request handling
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1267 request._secureSession = request._insecureSession = None
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1268
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1269 def get_session_data(self, request, *args):
920
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1270 """helper method to retrieve session data
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1271
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1272 @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
1273 @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
1274 @return (iterator(data)): requested session data
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1275 """
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1276 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
1277 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
1278 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
1279 else:
94f88277c2e7 libervia (pages): getSessionData return one session if used with one argument, else an iterator
Goffi <goffi@goffi.org>
parents: 923
diff changeset
1280 return (iface(session) for iface in args)
920
8cea8bf41b03 server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents: 919
diff changeset
1281
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1282 @defer.inlineCallbacks
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1283 def get_affiliation(self, request, service, node):
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1284 """retrieve pubsub node affiliation for current user
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1285
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1286 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
1287 @param request(server.Request): request linked to the session
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1288 @param service(jid.JID): pubsub service
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1289 @param node(unicode): pubsub node
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1290 @return (unicode): affiliation
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1291 """
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1292 web_session = self.get_session_data(request, session_iface.IWebSession)
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
1293 if web_session.profile is None:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1294 raise exceptions.InternalError("profile must be set to use this method")
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1295 affiliation = web_session.get_affiliation(service, node)
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1296 if affiliation is not None:
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1297 defer.returnValue(affiliation)
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1298 else:
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1299 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1300 affiliations = yield self.bridge_call(
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1301 "ps_affiliations_get", service.full(), node, web_session.profile
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1302 )
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1303 except Exception as e:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1304 log.warning(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1305 "Can't retrieve affiliation for {service}/{node}: {reason}".format(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1306 service=service, node=node, reason=e
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1307 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1308 )
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1309 affiliation = ""
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1310 else:
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1311 try:
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1312 affiliation = affiliations[node]
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1313 except KeyError:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1314 affiliation = ""
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1315 web_session.set_affiliation(service, node, affiliation)
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1316 defer.returnValue(affiliation)
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
1317
995
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 990
diff changeset
1318 ## Websocket (dynamic pages) ##
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 990
diff changeset
1319
1504
409d10211b20 server, browser: dynamic pages refactoring:
Goffi <goffi@goffi.org>
parents: 1484
diff changeset
1320 def get_websocket_url(self, request):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1321 base_url_split = self.get_ext_base_url_data(request)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1322 if base_url_split.scheme.endswith("s"):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1323 scheme = "wss"
995
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 990
diff changeset
1324 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1325 scheme = "ws"
995
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 990
diff changeset
1326
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1327 return self.get_ext_base_url(request, path=scheme, scheme=scheme)
995
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 990
diff changeset
1328
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 990
diff changeset
1329
1019
34240d08f682 pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents: 1012
diff changeset
1330 ## Various utils ##
34240d08f682 pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents: 1012
diff changeset
1331
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1332 def get_http_date(self, timestamp=None):
1019
34240d08f682 pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents: 1012
diff changeset
1333 now = time.gmtime(timestamp)
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1334 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
1335 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
1336 )
1019
34240d08f682 pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents: 1012
diff changeset
1337 return time.strftime(fmt_date, now)
34240d08f682 pages: HTTP cache headers handling:
Goffi <goffi@goffi.org>
parents: 1012
diff changeset
1338
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
1339 ## 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
1340
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1341 def _start_service(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
1342 """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
1343
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
1344 @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
1345 @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
1346 @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
1347 """
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
1348 # now that we have service profile connected, we add resource for its cache
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1349 service_path = regex.path_escape(C.SERVICE_PROFILE)
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1350 cache_dir = os.path.join(self.cache_root_dir, "profiles", service_path)
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1351 self.cache_resource.putChild(service_path.encode('utf-8'),
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1352 ProtectedFile(cache_dir))
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1353 self.service_cache_url = "/" + os.path.join(C.CACHE_DIR, service_path)
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
1354 session_iface.WebSession.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
1355
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1356 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
1357 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1358 tls.tls_options_check(self.options)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1359 context_factory = tls.get_tls_context_factory(self.options)
1274
eb4f03da0d7d server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents: 1268
diff changeset
1360 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
1361 log.warning(
eb4f03da0d7d server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents: 1268
diff changeset
1362 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
1363 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
1364 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
1365 log.warning(
eb4f03da0d7d server: re-usable Twisted TLS code has been moved to SàT backend
Goffi <goffi@goffi.org>
parents: 1268
diff changeset
1366 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
1367 self.quit(1)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1368 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
1369 if self.options["connection_type"] in ("http", "both"):
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1370 if (
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1371 self.options["connection_type"] == "both"
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1372 and self.options["redirect_to_https"]
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1373 ):
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1374 reactor.listenTCP(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1375 self.options["port"],
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1376 server.Site(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1377 RedirectToHTTPS(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1378 self.options["port"], self.options["port_https_ext"]
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1379 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1380 ),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1381 )
446
c406e46fe9c0 server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents: 445
diff changeset
1382 else:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1383 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
1384
1108
7ec1ba86d38d server: replaced blocking calls to bridge by bridgeCall which is not blocking
Goffi <goffi@goffi.org>
parents: 1106
diff changeset
1385 @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
1386 def stopService(self):
473
d1565906f228 server_side: fixed some forgotten print statement
Goffi <goffi@goffi.org>
parents: 472
diff changeset
1387 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
1388 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
1389 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
1390 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
1391 yield self.bridge_call("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
1392 except Exception:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1204
diff changeset
1393 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
1394
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
1395 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
1396 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
1397
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
1398 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
1399 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
1400
812
fd6965c16e7e server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents: 810
diff changeset
1401 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
1402 """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
1403
fd6965c16e7e server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents: 810
diff changeset
1404 @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
1405 """
fd6965c16e7e server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents: 810
diff changeset
1406 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
1407 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
1408
415
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 413
diff changeset
1409
858
7dde76708892 server: URL redirections + misc:
Goffi <goffi@goffi.org>
parents: 856
diff changeset
1410 class RedirectToHTTPS(web_resource.Resource):
415
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 413
diff changeset
1411 def __init__(self, old_port, new_port):
858
7dde76708892 server: URL redirections + misc:
Goffi <goffi@goffi.org>
parents: 856
diff changeset
1412 web_resource.Resource.__init__(self)
415
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 413
diff changeset
1413 self.isLeaf = True
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 413
diff changeset
1414 self.old_port = old_port
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 413
diff changeset
1415 self.new_port = new_port
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 413
diff changeset
1416
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 413
diff changeset
1417 def render(self, request):
1354
4751e9febbbf server: fixed HTTPS redirection
Goffi <goffi@goffi.org>
parents: 1321
diff changeset
1418 netloc = request.URLPath().netloc.decode().replace(
4751e9febbbf server: fixed HTTPS redirection
Goffi <goffi@goffi.org>
parents: 1321
diff changeset
1419 f":{self.old_port}", f":{self.new_port}"
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1420 )
1354
4751e9febbbf server: fixed HTTPS redirection
Goffi <goffi@goffi.org>
parents: 1321
diff changeset
1421 url = f"https://{netloc}{request.uri.decode()}"
4751e9febbbf server: fixed HTTPS redirection
Goffi <goffi@goffi.org>
parents: 1321
diff changeset
1422 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
1423
fadbba1d793f server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents: 413
diff changeset
1424
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1505
diff changeset
1425 registerAdapter(session_iface.WebSession, server.Session, session_iface.IWebSession)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1426 registerAdapter(
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1516
diff changeset
1427 session_iface.WebGuestSession, server.Session, session_iface.IWebGuestSession
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1108
diff changeset
1428 )