Mercurial > libervia-web
annotate src/server/server.py @ 980:bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
- page redirection now also work in other redirection meaning that if "/redirecting_url" => "/page_name/arg_1/arg_2" is used,
a getURL(page_name, arg_1, arg_2) will return the redirecting_url.
query_args are not handled yet by getURL.
- page redirection dict now use path_args and query_args insteand of args and kwargs, which show the relation with URL.
- new getSubPageURL return absolute URL to a subpage, which is more solid than relative URL and allows to use it in sub-hierarchy.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 14 Nov 2017 08:35:17 +0100 |
parents | 1d558dfb32ca |
children | f0fc28b3bd1e |
rev | line source |
---|---|
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
|
1 #!/usr/bin/python |
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 # -*- coding: utf-8 -*- |
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
|
3 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
336
diff
changeset
|
4 # Libervia: a Salut à Toi frontend |
964
fd4eae654182
misc: date update (yes it's a bit late :p )
Goffi <goffi@goffi.org>
parents:
962
diff
changeset
|
5 # Copyright (C) 2011-2017 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
|
6 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
336
diff
changeset
|
7 # 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
|
8 # 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
|
9 # 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
|
10 # (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
|
11 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
336
diff
changeset
|
12 # 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
|
13 # 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
|
14 # 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
|
15 # 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
|
16 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
336
diff
changeset
|
17 # 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
|
18 # 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
|
19 |
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
|
20 from twisted.application import service |
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
|
21 from twisted.internet import reactor, defer |
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
|
22 from twisted.web import server |
858 | 23 from twisted.web import static |
24 from twisted.web import resource as web_resource | |
25 from twisted.web import util as web_util | |
26 from twisted.web import http | |
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
|
27 from twisted.python.components import registerAdapter |
917 | 28 from twisted.python import failure |
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
|
29 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
|
30 |
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
|
31 from txjsonrpc.web import jsonrpc |
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
|
32 from txjsonrpc import jsonrpclib |
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
|
33 |
438
582c435dab6b
server side: new log system is used
Goffi <goffi@goffi.org>
parents:
435
diff
changeset
|
34 from sat.core.log import getLogger |
582c435dab6b
server side: new log system is used
Goffi <goffi@goffi.org>
parents:
435
diff
changeset
|
35 log = getLogger(__name__) |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
36 from sat_frontends.bridge.dbus_bridge import Bridge, BridgeExceptionNoService, const_TIMEOUT as BRIDGE_TIMEOUT |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
37 from sat.core.i18n import _, D_ |
605
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
38 from sat.core import exceptions |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
39 from sat.tools import utils |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
40 from sat.tools.common import regex |
917 | 41 from sat.tools.common import template |
927
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
42 from sat.tools.common import uri as common_uri |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
43 |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
44 import re |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
45 import glob |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
46 import os.path |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
47 import sys |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
48 import tempfile |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
49 import shutil |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
50 import uuid |
858 | 51 import urlparse |
52 import urllib | |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
53 from httplib import HTTPS_PORT |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
54 import libervia |
331
06a48d805547
server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
330
diff
changeset
|
55 |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
56 try: |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
57 import OpenSSL |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
58 from twisted.internet import ssl |
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
|
59 except ImportError: |
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
|
60 ssl = None |
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
|
61 |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
62 from libervia.server.constants import Const as C |
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
63 from libervia.server.blog import MicroBlog |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
64 from libervia.server import session_iface |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
65 |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
66 |
514 | 67 # following value are set from twisted.plugins.libervia_server initialise (see the comment there) |
68 DATA_DIR_DEFAULT = OPT_PARAMETERS_BOTH = OPT_PARAMETERS_CFG = coerceDataDir = None | |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
69 |
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
|
70 |
972
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
71 def quote(value): |
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
72 """shortcut to quote an unicode value for URL""" |
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
73 return urllib.quote_plus(value.encode('utf-8')).replace('%40','@') |
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
|
74 |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
75 |
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
|
76 class LiberviaSession(server.Session): |
555
db1b330c1eb1
server_side: set the connection attempt timeout to the bridge timeout (2 minutes)
souliane <souliane@mailoo.org>
parents:
554
diff
changeset
|
77 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
|
78 |
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
|
79 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
|
80 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
|
81 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
|
82 |
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
|
83 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
|
84 """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
|
85 self.__lock = True |
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
|
86 self._expireCall.reset(sys.maxint) |
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
|
87 |
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
|
88 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
|
89 """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
|
90 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
|
91 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
|
92 |
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
|
93 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
|
94 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
|
95 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
|
96 |
451 | 97 |
858 | 98 class ProtectedFile(static.File): |
99 """A static.File class which doens't show directory listing""" | |
331
06a48d805547
server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
330
diff
changeset
|
100 |
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
|
101 def directoryListing(self): |
858 | 102 return web_resource.NoResource() |
103 | |
104 | |
105 class LiberviaRootResource(ProtectedFile): | |
106 """Specialized resource for Libervia root | |
107 | |
108 handle redirections declared in sat.conf | |
109 """ | |
110 | |
111 def __init__(self, options, *args, **kwargs): | |
112 """ | |
113 @param options(dict): configuration options, same as Libervia.options | |
114 """ | |
115 super(LiberviaRootResource, self).__init__(*args, **kwargs) | |
116 | |
117 ## redirections | |
118 self.redirections = {} | |
866
782ba105f5c7
reverted changeset f024fc5744d0 (there is already a default value)
Goffi <goffi@goffi.org>
parents:
865
diff
changeset
|
119 if options['url_redirections_dict'] and not options['url_redirections_profile']: |
979 | 120 # FIXME: url_redirections_profile should not be needed. It is currently used to |
121 # redirect to an URL which associate the profile with the service, but this | |
122 # is not clean, and service should be explicitly specified | |
858 | 123 raise ValueError(u"url_redirections_profile need to be filled if you want to use url_redirections_dict") |
124 | |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
125 for old, new_data in options['url_redirections_dict'].iteritems(): |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
126 # new_data can be a dictionary or a unicode url |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
127 if isinstance(new_data, dict): |
979 | 128 # new_data dict must contain either "url", "page" or "path" key (exclusive) |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
129 # if "path" is used, a file url is constructed with it |
979 | 130 if len({'path', 'url', 'page'}.intersection(new_data.keys())) != 1: |
131 raise ValueError(u'You must have one and only one of "url", "page" or "path" key in your url_redirections_dict data') | |
132 if 'url' in new_data: | |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
133 new = new_data['url'] |
979 | 134 elif 'page' in new_data: |
135 new = new_data | |
136 new['type'] = 'page' | |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
137 new.setdefault('path_args', []) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
138 if not isinstance(new['path_args'], list): |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
139 log.error(_(u'"path_args" in redirection of {old} must be a list. Ignoring the redirection'.format( |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
140 old = old))) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
141 continue |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
142 new.setdefault('query_args', {}) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
143 if not isinstance(new['query_args'], dict): |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
144 log.error(_(u'"query_args" in redirection of {old} must be a dictionary. Ignoring the redirection'.format( |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
145 old = old))) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
146 continue |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
147 new['path_args'] = [quote(a) for a in new['path_args']] |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
148 # we keep an inversed dict of page redirection (page/path_args => redirecting URL) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
149 # so getURL can return the redirecting URL if the same arguments are used |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
150 # making the URL consistent |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
151 args_hash = tuple(new['path_args']) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
152 LiberviaPage.pages_redirects.setdefault(new_data['page'], {})[args_hash] = old |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
153 |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
154 # we need lists in query_args because it will be used |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
155 # as it in request.path_args |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
156 for k,v in new['query_args'].iteritems(): |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
157 if isinstance(v, basestring): |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
158 new['query_args'][k] = [v] |
979 | 159 elif 'path' in new_data: |
160 new = 'file:{}'.format(urllib.quote(new_data['path'])) | |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
161 else: |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
162 new = new_data |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
163 new_data = {} |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
164 |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
165 # some normalization |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
166 if not old.strip(): |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
167 # root URL special case |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
168 old = '' |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
169 elif not old.startswith('/'): |
858 | 170 raise ValueError(u"redirected url must start with '/', got {}".format(old)) |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
171 else: |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
172 old = self._normalizeURL(old) |
979 | 173 |
174 if isinstance(new, dict): | |
175 # dict are handled differently, they contain data | |
176 # which are use dynamically when the request is done | |
177 self.redirections[old] = new | |
178 if not old: | |
179 if new['type'] == 'page': | |
180 log.info(_(u"Root URL redirected to page {name}").format(name=new['page'])) | |
181 continue | |
182 | |
183 # at this point we have a rediction URL in new, we can parse it | |
858 | 184 new_url = urlparse.urlsplit(new.encode('utf-8')) |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
185 |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
186 # we handle the known URL schemes |
858 | 187 if new_url.scheme == 'xmpp': |
188 # XMPP URI | |
189 parsed_qs = urlparse.parse_qs(new_url.geturl()) | |
190 try: | |
191 item = parsed_qs['item'][0] | |
192 if not item: | |
193 raise KeyError | |
194 except (IndexError, KeyError): | |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
195 raise NotImplementedError(u"only item for PubSub URI is handled for the moment for url_redirections_dict") |
858 | 196 location = "/blog/{profile}/{item}".format( |
972
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
197 profile=quote(options['url_redirections_profile']), |
858 | 198 item = urllib.quote_plus(item), |
199 ).decode('utf-8') | |
200 request_data = self._getRequestData(location) | |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
201 |
858 | 202 elif new_url.scheme in ('', 'http', 'https'): |
203 # direct redirection | |
204 if new_url.netloc: | |
205 raise NotImplementedError(u"netloc ({netloc}) is not implemented yet for url_redirections_dict, it is not possible to redirect to an external website".format( | |
206 netloc = new_url.netloc)) | |
867
12d0e7bd0dd1
server: fixed encoding issues on url redirection
Goffi <goffi@goffi.org>
parents:
866
diff
changeset
|
207 location = urlparse.urlunsplit(('', '', new_url.path, new_url.query, new_url.fragment)).decode('utf-8') |
858 | 208 request_data = self._getRequestData(location) |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
209 |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
210 elif new_url.scheme in ('file'): |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
211 # file or directory |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
212 if new_url.netloc: |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
213 raise NotImplementedError(u"netloc ({netloc}) is not implemented for url redirection to file system, it is not possible to redirect to an external host".format( |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
214 netloc = new_url.netloc)) |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
215 path = urllib.unquote(new_url.path) |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
216 if not os.path.isabs(path): |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
217 raise ValueError(u'file redirection must have an absolute path: e.g. file:/path/to/my/file') |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
218 # for file redirection, we directly put child here |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
219 segments, dummy, last_segment = old.rpartition('/') |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
220 url_segments = segments.split('/') if segments else [] |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
221 current = self |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
222 for segment in url_segments: |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
223 resource = web_resource.NoResource() |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
224 current.putChild(segment, resource) |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
225 current = resource |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
226 resource_class = ProtectedFile if new_data.get('protected',True) else static.File |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
227 current.putChild(last_segment, resource_class(path)) |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
228 log.debug(u"Added redirection from /{old} to file system path {path}".format(old=old.decode('utf-8'), path=path.decode('utf-8'))) |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
229 continue # we don't want to use redirection system, so we continue here |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
230 |
858 | 231 else: |
232 raise NotImplementedError(u"{scheme}: scheme is not managed for url_redirections_dict".format(scheme=new_url.scheme)) | |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
233 |
858 | 234 self.redirections[old] = request_data |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
235 if not old: |
979 | 236 log.info(_(u"Root URL redirected to {uri}").format(uri=request_data[1].decode('utf-8'))) |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
237 |
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
238 # no need to keep url_redirections*, they will not be used anymore |
866
782ba105f5c7
reverted changeset f024fc5744d0 (there is already a default value)
Goffi <goffi@goffi.org>
parents:
865
diff
changeset
|
239 del options['url_redirections_dict'] |
782ba105f5c7
reverted changeset f024fc5744d0 (there is already a default value)
Goffi <goffi@goffi.org>
parents:
865
diff
changeset
|
240 del options['url_redirections_profile'] |
858 | 241 |
875
d9b98b8a1847
server: handling of dict and "file:" urls in url_redirections_dict:
Goffi <goffi@goffi.org>
parents:
873
diff
changeset
|
242 # the default root URL, if not redirected |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
243 if not '' in self.redirections: |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
244 self.redirections[''] = self._getRequestData(C.LIBERVIA_MAIN_PAGE) |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
245 |
858 | 246 def _normalizeURL(self, url, lower=True): |
247 """Return URL normalized for self.redirections dict | |
248 | |
249 @param url(unicode): URL to normalize | |
250 @param lower(bool): lower case of url if True | |
251 @return (str): normalized URL | |
252 """ | |
253 if lower: | |
254 url = url.lower() | |
255 return '/'.join((p for p in url.encode('utf-8').split('/') if p)) | |
256 | |
257 def _getRequestData(self, uri): | |
258 """Return data needed to redirect request | |
331
06a48d805547
server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
330
diff
changeset
|
259 |
858 | 260 @param url(unicode): destination url |
261 @return (tuple(list[str], str, str, dict): tuple with | |
262 splitted path as in Request.postpath | |
263 uri as in Request.uri | |
264 path as in Request.path | |
265 args as in Request.args | |
266 """ | |
267 uri = uri.encode('utf-8') | |
268 # XXX: we reuse code from twisted.web.http.py here | |
269 # as we need to have the same behaviour | |
270 x = uri.split(b'?', 1) | |
271 | |
272 if len(x) == 1: | |
273 path = uri | |
274 args = {} | |
275 else: | |
276 path, argstring = x | |
277 args = http.parse_qs(argstring, 1) | |
278 | |
279 # XXX: splitted path case must not be changed, as it may be significant | |
280 # (e.g. for blog items) | |
281 return self._normalizeURL(path, lower=False).split('/'), uri, path, args | |
282 | |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
283 def _redirect(self, request, request_data): |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
284 """Redirect an URL by rewritting request |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
285 |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
286 this is *NOT* a HTTP redirection, but equivalent to URL rewritting |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
287 @param request(web.http.request): original request |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
288 @param request_data(tuple): data returned by self._getRequestData |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
289 @return (web_resource.Resource): resource to use |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
290 """ |
979 | 291 # recursion check |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
292 try: |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
293 request._redirected |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
294 except AttributeError: |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
295 pass |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
296 else: |
979 | 297 try: |
298 dummy, uri, dummy, dummy = request_data | |
299 except ValueError: | |
300 uri = u'' | |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
301 log.warning(D_(u"recursive redirection, please fix this URL:\n{old} ==> {new}").format( |
867
12d0e7bd0dd1
server: fixed encoding issues on url redirection
Goffi <goffi@goffi.org>
parents:
866
diff
changeset
|
302 old=request.uri.decode('utf-8'), |
12d0e7bd0dd1
server: fixed encoding issues on url redirection
Goffi <goffi@goffi.org>
parents:
866
diff
changeset
|
303 new=uri.decode('utf-8'), |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
304 )) |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
305 return web_resource.NoResource() |
979 | 306 |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
307 request._redirected = True # here to avoid recursive redirections |
979 | 308 |
309 if isinstance(request_data, dict): | |
310 if request_data['type'] == 'page': | |
311 try: | |
312 page = LiberviaPage.getPageByName(request_data['page']) | |
313 except KeyError: | |
314 log.error(_(u"Can't find page named \"{name}\" requested in redirection").format( | |
315 name = request_data['page'])) | |
316 return web_resource.NoResource() | |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
317 request.postpath = request_data['path_args'][:] + request.postpath |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
318 |
979 | 319 try: |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
320 request.args.update(request_data['query_args']) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
321 except (TypeError, ValueError): |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
322 log.error(_(u"Invalid args in redirection: {query_args}").format( |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
323 query_args=request_data['query_args'])) |
979 | 324 return web_resource.NoResource() |
325 return page | |
326 else: | |
327 raise exceptions.InternalError(u'unknown request_data type') | |
328 else: | |
329 path_list, uri, path, args = request_data | |
330 log.debug(u"Redirecting URL {old} to {new}".format( | |
331 old=request.uri.decode('utf-8'), | |
332 new=uri.decode('utf-8'), | |
333 )) | |
334 # we change the request to reflect the new url | |
335 request.postpath = path_list[1:] | |
336 request.uri = uri | |
337 request.path = path | |
338 request.args = args | |
339 | |
340 # we start again to look for a child with the new url | |
862
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
341 return self.getChildWithDefault(path_list[0], request) |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
342 |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
343 def getChildWithDefault(self, name, request): |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
344 # XXX: this method is overriden only for root url |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
345 # which is the only ones who need to be handled before other children |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
346 if name == '' and not request.postpath: |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
347 return self._redirect(request, self.redirections['']) |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
348 return super(LiberviaRootResource, self).getChildWithDefault(name, request) |
e3e2effc9a4c
server: LiberviaRootResource now manages root url redirection, and former redirection has been replaced by it:
Goffi <goffi@goffi.org>
parents:
859
diff
changeset
|
349 |
858 | 350 def getChild(self, name, request): |
351 resource = super(LiberviaRootResource, self).getChild(name, request) | |
352 | |
353 if isinstance(resource, web_resource.NoResource): | |
354 # if nothing was found, we try our luck with redirections | |
355 # XXX: we want redirections to happen only if everything else failed | |
979 | 356 |
357 # first we check with current URL | |
358 # there our last try with the remaining URL | |
359 for path_elts in (request.prepath, | |
360 [name] + request.postpath): | |
361 current_url = '/'.join(path_elts).lower() | |
362 try: | |
363 request_data = self.redirections[current_url] | |
364 except KeyError: | |
365 # no redirection for this url | |
366 pass | |
367 else: | |
368 return self._redirect(request, request_data) | |
858 | 369 |
370 return resource | |
371 | |
372 def createSimilarFile(self, path): | |
373 # XXX: this method need to be overriden to avoid recreating a LiberviaRootResource | |
374 | |
375 f = LiberviaRootResource.__base__(path, self.defaultType, self.ignoredExts, self.registry) | |
376 # refactoring by steps, here - constructor should almost certainly take these | |
377 f.processors = self.processors | |
378 f.indexNames = self.indexNames[:] | |
379 f.childNotFound = self.childNotFound | |
380 return f | |
451 | 381 |
382 | |
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
|
383 class JSONRPCMethodManager(jsonrpc.JSONRPC): |
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
|
384 |
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
|
385 def __init__(self, sat_host): |
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
|
386 jsonrpc.JSONRPC.__init__(self) |
451 | 387 self.sat_host = sat_host |
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
|
388 |
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
|
389 def asyncBridgeCall(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
|
390 return self.sat_host.bridgeCall(method_name, *args, **kwargs) |
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
|
391 |
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
|
392 |
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
|
393 class MethodHandler(JSONRPCMethodManager): |
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
|
394 |
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
|
395 def __init__(self, sat_host): |
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
|
396 JSONRPCMethodManager.__init__(self, sat_host) |
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
|
397 |
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
|
398 def render(self, request): |
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
|
399 self.session = request.getSession() |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
400 profile = session_iface.ISATSession(self.session).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
|
401 if not profile: |
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
|
402 #user is not identified, we return a jsonrpc fault |
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
|
403 parsed = jsonrpclib.loads(request.content.read()) |
481
bbdc5357dc00
browser and server sides: refactor HTTP request result values + handle "NoReply" error
souliane <souliane@mailoo.org>
parents:
476
diff
changeset
|
404 fault = jsonrpclib.Fault(C.ERRNUM_LIBERVIA, C.NOT_ALLOWED) # FIXME: define some standard error codes for libervia |
482
437eefa53a01
misc: remove some pylint errors and warnings
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
405 return jsonrpc.JSONRPC._cbRender(self, fault, request, parsed.get('id'), parsed.get('jsonrpc')) # pylint: disable=E1103 |
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
|
406 return jsonrpc.JSONRPC.render(self, request) |
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
|
407 |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
408 def jsonrpc_getVersion(self): |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
409 """Return SàT version""" |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
410 try: |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
411 return self._version_cache |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
412 except AttributeError: |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
413 self._version_cache = self.sat_host.bridge.getVersion() |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
414 return self._version_cache |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
415 |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
416 def jsonrpc_getLiberviaVersion(self): |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
417 """Return Libervia version""" |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
418 return self.sat_host.full_version |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
419 |
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
|
420 def jsonrpc_disconnect(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
|
421 """Disconnect the profile""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
422 sat_session = session_iface.ISATSession(self.session) |
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
|
423 profile = sat_session.profile |
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
|
424 self.sat_host.bridge.disconnect(profile) |
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
|
425 |
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
|
426 def jsonrpc_getContacts(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
|
427 """Return all passed args.""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
428 profile = session_iface.ISATSession(self.session).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
|
429 return self.sat_host.bridge.getContacts(profile) |
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
|
430 |
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
|
431 def jsonrpc_addContact(self, entity, name, groups): |
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
|
432 """Subscribe to contact presence, and add it to the given groups""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
433 profile = session_iface.ISATSession(self.session).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
|
434 self.sat_host.bridge.addContact(entity, profile) |
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
|
435 self.sat_host.bridge.updateContact(entity, name, groups, profile) |
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
|
436 |
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
|
437 def jsonrpc_delContact(self, entity): |
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
|
438 """Remove contact from contacts list""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
439 profile = session_iface.ISATSession(self.session).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
|
440 self.sat_host.bridge.delContact(entity, profile) |
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
|
441 |
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
|
442 def jsonrpc_updateContact(self, entity, name, groups): |
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
|
443 """Update contact's roster item""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
444 profile = session_iface.ISATSession(self.session).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
|
445 self.sat_host.bridge.updateContact(entity, name, groups, profile) |
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
|
446 |
623
4f7550a083b4
server and browser sides: fixes bad call to "subscription" bridge method
souliane <souliane@mailoo.org>
parents:
613
diff
changeset
|
447 def jsonrpc_subscription(self, sub_type, entity): |
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
|
448 """Confirm (or infirm) subscription, |
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
|
449 and setup user roster in case of subscription""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
450 profile = session_iface.ISATSession(self.session).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
|
451 self.sat_host.bridge.subscription(sub_type, entity, profile) |
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
|
452 |
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
|
453 def jsonrpc_getWaitingSub(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
|
454 """Return list of room already joined by user""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
455 profile = session_iface.ISATSession(self.session).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
|
456 return self.sat_host.bridge.getWaitingSub(profile) |
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
|
457 |
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
|
458 def jsonrpc_setStatus(self, presence, status): |
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
|
459 """Change the presence and/or status |
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
|
460 @param presence: value from ("", "chat", "away", "dnd", "xa") |
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
|
461 @param status: any string to describe your status |
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
|
462 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
463 profile = session_iface.ISATSession(self.session).profile |
413
7a8991cda2fa
browser_side: display presence with the highest priority
souliane <souliane@mailoo.org>
parents:
408
diff
changeset
|
464 self.sat_host.bridge.setPresence('', presence, {'': status}, 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
|
465 |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
884
diff
changeset
|
466 def jsonrpc_messageSend(self, to_jid, msg, subject, type_, extra={}): |
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
|
467 """send message""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
468 profile = session_iface.ISATSession(self.session).profile |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
884
diff
changeset
|
469 return self.asyncBridgeCall("messageSend", to_jid, msg, subject, type_, extra, 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
|
470 |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
471 ## PubSub ## |
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
|
472 |
921
cf527974a0fa
both: renamed psDeleteNode to psNodeDelete to follow backend change
Goffi <goffi@goffi.org>
parents:
920
diff
changeset
|
473 def jsonrpc_psNodeDelete(self, service, node): |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
474 """Delete a whole node |
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
|
475 |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
476 @param service (unicode): service jid |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
477 @param node (unicode): node to delete |
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
|
478 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
479 profile = session_iface.ISATSession(self.session).profile |
921
cf527974a0fa
both: renamed psDeleteNode to psNodeDelete to follow backend change
Goffi <goffi@goffi.org>
parents:
920
diff
changeset
|
480 return self.asyncBridgeCall("psNodeDelete", service, node, profile) |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
481 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
482 # def jsonrpc_psRetractItem(self, service, node, item, notify): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
483 # """Delete a whole node |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
484 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
485 # @param service (unicode): service jid |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
486 # @param node (unicode): node to delete |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
487 # @param items (iterable): id of item to retract |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
488 # @param notify (bool): True if notification is required |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
489 # """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
490 # profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
491 # return self.asyncBridgeCall("psRetractItem", service, node, item, notify, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
492 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
493 # def jsonrpc_psRetractItems(self, service, node, items, notify): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
494 # """Delete a whole node |
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
|
495 |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
496 # @param service (unicode): service jid |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
497 # @param node (unicode): node to delete |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
498 # @param items (iterable): ids of items to retract |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
499 # @param notify (bool): True if notification is required |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
500 # """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
501 # profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
502 # return self.asyncBridgeCall("psRetractItems", service, node, items, notify, 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
|
503 |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
504 ## microblogging ## |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
505 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
506 def jsonrpc_mbSend(self, service, node, mb_data): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
507 """Send microblog data |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
508 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
509 @param service (unicode): service jid or empty string to use profile's microblog |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
510 @param node (unicode): publishing node, or empty string to use microblog node |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
511 @param mb_data(dict): microblog data |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
512 @return: a deferred |
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
|
513 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
514 profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
515 return self.asyncBridgeCall("mbSend", service, node, mb_data, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
516 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
517 def jsonrpc_mbRetract(self, service, node, items): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
518 """Delete a whole node |
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
|
519 |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
520 @param service (unicode): service jid, empty string for PEP |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
521 @param node (unicode): node to delete, empty string for default node |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
522 @param items (iterable): ids of items to retract |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
523 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
524 profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
525 return self.asyncBridgeCall("mbRetract", service, node, items, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
526 |
724
994be887e843
browser and server sides: bridge method mbGetLast has been renamed to mbGet and takes a new parameter "item_ids"
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
527 def jsonrpc_mbGet(self, service_jid, node, max_items, item_ids, extra): |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
528 """Get last microblogs from publisher_jid |
389
2d782349b88a
server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents:
381
diff
changeset
|
529 |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
530 @param service_jid (unicode): pubsub service, usually publisher jid |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
531 @param node(unicode): mblogs node, or empty string to get the defaut one |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
532 @param max_items (int): maximum number of item to get or C.NO_LIMIT to get everything |
724
994be887e843
browser and server sides: bridge method mbGetLast has been renamed to mbGet and takes a new parameter "item_ids"
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
533 @param item_ids (list[unicode]): list of item IDs |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
534 @param rsm (dict): TODO |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
535 @return: a deferred couple with the list of items and metadatas. |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
536 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
537 profile = session_iface.ISATSession(self.session).profile |
724
994be887e843
browser and server sides: bridge method mbGetLast has been renamed to mbGet and takes a new parameter "item_ids"
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
538 return self.asyncBridgeCall("mbGet", service_jid, node, max_items, item_ids, extra, profile) |
389
2d782349b88a
server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents:
381
diff
changeset
|
539 |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
540 def jsonrpc_mbGetFromMany(self, publishers_type, publishers, max_items, extra): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
541 """Get many blog nodes at once |
651
2df91d0308ac
browser_side, server_side: MicroblogPanel.onGroupDrop and bridge method getMassiveLastMBlogs now only accepts the publishers as a set of unicode (no more None value or single unicode).
souliane <souliane@mailoo.org>
parents:
623
diff
changeset
|
542 |
2df91d0308ac
browser_side, server_side: MicroblogPanel.onGroupDrop and bridge method getMassiveLastMBlogs now only accepts the publishers as a set of unicode (no more None value or single unicode).
souliane <souliane@mailoo.org>
parents:
623
diff
changeset
|
543 @param publishers_type (unicode): one of "ALL", "GROUP", "JID" |
2df91d0308ac
browser_side, server_side: MicroblogPanel.onGroupDrop and bridge method getMassiveLastMBlogs now only accepts the publishers as a set of unicode (no more None value or single unicode).
souliane <souliane@mailoo.org>
parents:
623
diff
changeset
|
544 @param publishers (tuple(unicode)): tuple of publishers (empty list for all, list of groups or list of jids) |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
545 @param max_items (int): maximum number of item to get or C.NO_LIMIT to get everything |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
546 @param extra (dict): TODO |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
547 @return (str): RT Deferred session id |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
548 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
549 profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
550 return self.sat_host.bridge.mbGetFromMany(publishers_type, publishers, max_items, extra, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
551 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
552 def jsonrpc_mbGetFromManyRTResult(self, rt_session): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
553 """Get results from RealTime mbGetFromMany session |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
554 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
555 @param rt_session (str): RT Deferred session id |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
556 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
557 profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
558 return self.asyncBridgeCall("mbGetFromManyRTResult", rt_session, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
559 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
560 def jsonrpc_mbGetFromManyWithComments(self, publishers_type, publishers, max_items, max_comments, rsm_dict, rsm_comments_dict): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
561 """Helper method to get the microblogs and their comments in one shot |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
562 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
563 @param publishers_type (str): type of the list of publishers (one of "GROUP" or "JID" or "ALL") |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
564 @param publishers (list): list of publishers, according to publishers_type (list of groups or list of jids) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
565 @param max_items (int): optional limit on the number of retrieved items. |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
566 @param max_comments (int): maximum number of comments to retrieve |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
567 @param rsm_dict (dict): RSM data for initial items only |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
568 @param rsm_comments_dict (dict): RSM data for comments only |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
569 @param profile_key: profile key |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
570 @return (str): RT Deferred session id |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
571 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
572 profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
573 return self.sat_host.bridge.mbGetFromManyWithComments(publishers_type, publishers, max_items, max_comments, rsm_dict, rsm_comments_dict, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
574 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
575 def jsonrpc_mbGetFromManyWithCommentsRTResult(self, rt_session): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
576 """Get results from RealTime mbGetFromManyWithComments session |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
577 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
578 @param rt_session (str): RT Deferred session id |
651
2df91d0308ac
browser_side, server_side: MicroblogPanel.onGroupDrop and bridge method getMassiveLastMBlogs now only accepts the publishers as a set of unicode (no more None value or single unicode).
souliane <souliane@mailoo.org>
parents:
623
diff
changeset
|
579 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
580 profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
581 return self.asyncBridgeCall("mbGetFromManyWithCommentsRTResult", rt_session, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
582 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
583 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
584 # def jsonrpc_sendMblog(self, type_, dest, text, extra={}): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
585 # """ Send microblog message |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
586 # @param type_ (unicode): one of "PUBLIC", "GROUP" |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
587 # @param dest (tuple(unicode)): recipient groups (ignored for "PUBLIC") |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
588 # @param text (unicode): microblog's text |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
589 # """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
590 # profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
591 # extra['allow_comments'] = 'True' |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
592 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
593 # if not type_: # auto-detect |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
594 # type_ = "PUBLIC" if dest == [] else "GROUP" |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
595 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
596 # if type_ in ("PUBLIC", "GROUP") and text: |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
597 # if type_ == "PUBLIC": |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
598 # #This text if for the public microblog |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
599 # log.debug("sending public blog") |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
600 # return self.sat_host.bridge.sendGroupBlog("PUBLIC", (), text, extra, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
601 # else: |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
602 # log.debug("sending group blog") |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
603 # dest = dest if isinstance(dest, list) else [dest] |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
604 # return self.sat_host.bridge.sendGroupBlog("GROUP", dest, text, extra, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
605 # else: |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
606 # raise Exception("Invalid data") |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
607 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
608 # def jsonrpc_deleteMblog(self, pub_data, comments): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
609 # """Delete a microblog node |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
610 # @param pub_data: a tuple (service, comment node identifier, item identifier) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
611 # @param comments: comments node identifier (for main item) or False |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
612 # """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
613 # profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
614 # return self.sat_host.bridge.deleteGroupBlog(pub_data, comments if comments else '', profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
615 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
616 # def jsonrpc_updateMblog(self, pub_data, comments, message, extra={}): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
617 # """Modify a microblog node |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
618 # @param pub_data: a tuple (service, comment node identifier, item identifier) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
619 # @param comments: comments node identifier (for main item) or False |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
620 # @param message: new message |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
621 # @param extra: dict which option name as key, which can be: |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
622 # - allow_comments: True to accept an other level of comments, False else (default: False) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
623 # - rich: if present, contain rich text in currently selected syntax |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
624 # """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
625 # profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
626 # if comments: |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
627 # extra['allow_comments'] = 'True' |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
628 # return self.sat_host.bridge.updateGroupBlog(pub_data, comments if comments else '', message, extra, 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
|
629 |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
630 # def jsonrpc_sendMblogComment(self, node, text, extra={}): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
631 # """ Send microblog message |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
632 # @param node: url of the comments node |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
633 # @param text: comment |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
634 # """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
635 # profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
636 # if node and text: |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
637 # return self.sat_host.bridge.sendGroupBlogComment(node, text, extra, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
638 # else: |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
639 # raise Exception("Invalid data") |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
640 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
641 # def jsonrpc_getMblogs(self, publisher_jid, item_ids, max_items=C.RSM_MAX_ITEMS): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
642 # """Get specified microblogs posted by a contact |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
643 # @param publisher_jid: jid of the publisher |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
644 # @param item_ids: list of microblogs items IDs |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
645 # @return list of microblog data (dict)""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
646 # profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
647 # d = self.asyncBridgeCall("getGroupBlogs", publisher_jid, item_ids, {'max_': unicode(max_items)}, False, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
648 # return d |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
649 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
650 # def jsonrpc_getMblogsWithComments(self, publisher_jid, item_ids, max_comments=C.RSM_MAX_COMMENTS): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
651 # """Get specified microblogs posted by a contact and their comments |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
652 # @param publisher_jid: jid of the publisher |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
653 # @param item_ids: list of microblogs items IDs |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
654 # @return list of couple (microblog data, list of microblog data)""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
655 # profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
656 # d = self.asyncBridgeCall("getGroupBlogsWithComments", publisher_jid, item_ids, {}, max_comments, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
657 # return d |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
658 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
659 # def jsonrpc_getMassiveMblogs(self, publishers_type, publishers, rsm=None): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
660 # """Get lasts microblogs posted by several contacts at once |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
661 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
662 # @param publishers_type (unicode): one of "ALL", "GROUP", "JID" |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
663 # @param publishers (tuple(unicode)): tuple of publishers (empty list for all, list of groups or list of jids) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
664 # @param rsm (dict): TODO |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
665 # @return: dict{unicode: list[dict]) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
666 # key: publisher's jid |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
667 # value: list of microblog data (dict) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
668 # """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
669 # profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
670 # if rsm is None: |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
671 # rsm = {'max_': unicode(C.RSM_MAX_ITEMS)} |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
672 # d = self.asyncBridgeCall("getMassiveGroupBlogs", publishers_type, publishers, rsm, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
673 # self.sat_host.bridge.massiveSubscribeGroupBlogs(publishers_type, publishers, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
674 # return d |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
675 |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
676 # def jsonrpc_getMblogComments(self, service, node, rsm=None): |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
677 # """Get all comments of given node |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
678 # @param service: jid of the service hosting the node |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
679 # @param node: comments node |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
680 # """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
681 # profile = session_iface.ISATSession(self.session).profile |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
682 # if rsm is None: |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
683 # rsm = {'max_': unicode(C.RSM_MAX_COMMENTS)} |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
684 # d = self.asyncBridgeCall("getGroupBlogComments", service, node, rsm, profile) |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
710
diff
changeset
|
685 # return d |
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
|
686 |
427
b5b440e6ea16
server + browser side, getPresenceStatuses has been renamed
Goffi <goffi@goffi.org>
parents:
421
diff
changeset
|
687 def jsonrpc_getPresenceStatuses(self): |
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
|
688 """Get Presence information for connected contacts""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
689 profile = session_iface.ISATSession(self.session).profile |
427
b5b440e6ea16
server + browser side, getPresenceStatuses has been renamed
Goffi <goffi@goffi.org>
parents:
421
diff
changeset
|
690 return self.sat_host.bridge.getPresenceStatuses(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
|
691 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
692 def jsonrpc_historyGet(self, from_jid, to_jid, size, between, search=''): |
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
|
693 """Return history for the from_jid/to_jid couple""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
694 sat_session = session_iface.ISATSession(self.session) |
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
|
695 profile = sat_session.profile |
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
|
696 sat_jid = sat_session.jid |
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
|
697 if not sat_jid: |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
566
diff
changeset
|
698 # we keep a session cache for jid to avoir jid spoofing |
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
|
699 sat_jid = sat_session.jid = jid.JID(self.sat_host.bridge.getParamA("JabberID", "Connection", profile_key=profile)) |
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
|
700 if jid.JID(from_jid).userhost() != sat_jid.userhost() and jid.JID(to_jid).userhost() != sat_jid.userhost(): |
694
82123705474b
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
692
diff
changeset
|
701 log.error(u"Trying to get history from a different jid (given (browser): {}, real (backend): {}), maybe a hack attempt ?".format(from_jid, sat_jid)) |
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
|
702 return {} |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
703 d = self.asyncBridgeCall("historyGet", from_jid, to_jid, size, between, search, profile) |
451 | 704 |
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
|
705 def show(result_dbus): |
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
|
706 result = [] |
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
|
707 for line in result_dbus: |
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
|
708 #XXX: we have to do this stupid thing because Python D-Bus use its own types instead of standard types |
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
|
709 # and txJsonRPC doesn't accept D-Bus types, resulting in a empty query |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
710 uuid, timestamp, from_jid, to_jid, message, subject, mess_type, extra = line |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
711 result.append((unicode(uuid), float(timestamp), unicode(from_jid), unicode(to_jid), dict(message), dict(subject), unicode(mess_type), dict(extra))) |
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
|
712 return result |
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
|
713 d.addCallback(show) |
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
|
714 return d |
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
|
715 |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
884
diff
changeset
|
716 def jsonrpc_mucJoin(self, room_jid, nick): |
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
|
717 """Join a Multi-User Chat room |
689
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
718 |
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
719 @param room_jid (unicode): room JID or empty string to generate a unique name |
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
720 @param nick (unicode): user nick |
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
|
721 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
722 profile = session_iface.ISATSession(self.session).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
|
723 d = self.asyncBridgeCall("joinMUC", room_jid, nick, {}, profile) |
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
|
724 return d |
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
|
725 |
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
|
726 def jsonrpc_inviteMUC(self, contact_jid, room_jid): |
689
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
727 """Invite a user to a Multi-User Chat room |
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
728 |
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
729 @param contact_jid (unicode): contact to invite |
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
730 @param room_jid (unicode): room JID or empty string to generate a unique name |
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
731 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
732 profile = session_iface.ISATSession(self.session).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
|
733 room_id = room_jid.split("@")[0] |
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
|
734 service = room_jid.split("@")[1] |
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
|
735 self.sat_host.bridge.inviteMUC(contact_jid, service, room_id, {}, profile) |
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
|
736 |
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
|
737 def jsonrpc_mucLeave(self, room_jid): |
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
|
738 """Quit a Multi-User Chat room""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
739 profile = session_iface.ISATSession(self.session).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
|
740 try: |
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
|
741 room_jid = jid.JID(room_jid) |
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
|
742 except: |
438
582c435dab6b
server side: new log system is used
Goffi <goffi@goffi.org>
parents:
435
diff
changeset
|
743 log.warning('Invalid room jid') |
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
|
744 return |
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
|
745 self.sat_host.bridge.mucLeave(room_jid.userhost(), profile) |
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
|
746 |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
884
diff
changeset
|
747 def jsonrpc_mucGetRoomsJoined(self): |
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
|
748 """Return list of room already joined by user""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
749 profile = session_iface.ISATSession(self.session).profile |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
884
diff
changeset
|
750 return self.sat_host.bridge.mucGetRoomsJoined(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
|
751 |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
884
diff
changeset
|
752 def jsonrpc_mucGetDefaultService(self): |
692
7a9c7b9f6a28
browser_side: use host.default_muc instead of C.DEFAULT_MUC
souliane <souliane@mailoo.org>
parents:
689
diff
changeset
|
753 """@return: the default MUC""" |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
884
diff
changeset
|
754 d = self.asyncBridgeCall("mucGetDefaultService") |
692
7a9c7b9f6a28
browser_side: use host.default_muc instead of C.DEFAULT_MUC
souliane <souliane@mailoo.org>
parents:
689
diff
changeset
|
755 return d |
7a9c7b9f6a28
browser_side: use host.default_muc instead of C.DEFAULT_MUC
souliane <souliane@mailoo.org>
parents:
689
diff
changeset
|
756 |
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
|
757 def jsonrpc_launchTarotGame(self, other_players, room_jid=""): |
689
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
758 """Create a room, invite the other players and start a Tarot game. |
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
759 |
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
760 @param other_players (list[unicode]): JIDs of the players to play with |
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
761 @param room_jid (unicode): room JID or empty string to generate a unique name |
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
|
762 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
763 profile = session_iface.ISATSession(self.session).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
|
764 self.sat_host.bridge.tarotGameLaunch(other_players, room_jid, profile) |
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
|
765 |
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
|
766 def jsonrpc_getTarotCardsPaths(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
|
767 """Give the path of all the tarot cards""" |
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
|
768 _join = os.path.join |
451 | 769 _media_dir = _join(self.sat_host.media_dir, '') |
770 return map(lambda x: _join(C.MEDIA_DIR, x[len(_media_dir):]), glob.glob(_join(_media_dir, C.CARDS_DIR, '*_*.png'))) | |
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
|
771 |
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
|
772 def jsonrpc_tarotGameReady(self, player, referee): |
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
|
773 """Tell to the server that we are ready to start the game""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
774 profile = session_iface.ISATSession(self.session).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
|
775 self.sat_host.bridge.tarotGameReady(player, referee, profile) |
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
|
776 |
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
|
777 def jsonrpc_tarotGamePlayCards(self, player_nick, referee, cards): |
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
|
778 """Tell to the server the cards we want to put on the table""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
779 profile = session_iface.ISATSession(self.session).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
|
780 self.sat_host.bridge.tarotGamePlayCards(player_nick, referee, cards, profile) |
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
|
781 |
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
|
782 def jsonrpc_launchRadioCollective(self, invited, room_jid=""): |
689
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
783 """Create a room, invite people, and start a radio collective. |
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
784 |
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
785 @param invited (list[unicode]): JIDs of the contacts to play with |
a6adefddcb0a
browser and server side: complete changeset 669 (a8fddccf5b84) about joining MUC:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
786 @param room_jid (unicode): room JID or empty string to generate a unique name |
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
|
787 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
788 profile = session_iface.ISATSession(self.session).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
|
789 self.sat_host.bridge.radiocolLaunch(invited, room_jid, profile) |
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
|
790 |
605
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
791 def jsonrpc_getEntitiesData(self, jids, keys): |
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
792 """Get cached data for several entities at once |
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
793 |
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
794 @param jids: list jids from who we wants data, or empty list for all jids in cache |
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
795 @param keys: name of data we want (list) |
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
796 @return: requested data""" |
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
797 if not C.ALLOWED_ENTITY_DATA.issuperset(keys): |
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
798 raise exceptions.PermissionError("Trying to access unallowed data (hack attempt ?)") |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
799 profile = session_iface.ISATSession(self.session).profile |
605
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
800 try: |
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
801 return self.sat_host.bridge.getEntitiesData(jids, keys, profile) |
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
802 except Exception as e: |
917 | 803 raise failure.Failure(jsonrpclib.Fault(C.ERRNUM_BRIDGE_ERRBACK, unicode(e))) |
605
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
804 |
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
|
805 def jsonrpc_getEntityData(self, jid, keys): |
605
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
806 """Get cached data for an entity |
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
807 |
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
|
808 @param jid: jid of contact from who we want data |
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
|
809 @param keys: name of data we want (list) |
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
|
810 @return: requested data""" |
605
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
811 if not C.ALLOWED_ENTITY_DATA.issuperset(keys): |
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
812 raise exceptions.PermissionError("Trying to access unallowed data (hack attempt ?)") |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
813 profile = session_iface.ISATSession(self.session).profile |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
566
diff
changeset
|
814 try: |
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
566
diff
changeset
|
815 return self.sat_host.bridge.getEntityData(jid, keys, profile) |
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
566
diff
changeset
|
816 except Exception as e: |
917 | 817 raise failure.Failure(jsonrpclib.Fault(C.ERRNUM_BRIDGE_ERRBACK, unicode(e))) |
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
|
818 |
605
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
819 def jsonrpc_getCard(self, jid_): |
331
06a48d805547
server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
330
diff
changeset
|
820 """Get VCard for entiry |
605
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
821 @param jid_: jid of contact from who we want data |
331
06a48d805547
server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
330
diff
changeset
|
822 @return: id to retrieve the profile""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
823 profile = session_iface.ISATSession(self.session).profile |
605
917e271975d9
server + browser side: implementation of new getEntitiesData bridge method + added a security check: only a white list of entities can be gotten
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
824 return self.sat_host.bridge.getCard(jid_, 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
|
825 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
826 @defer.inlineCallbacks |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
827 def jsonrpc_avatarGet(self, entity, cache_only, hash_only): |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
828 session_data = session_iface.ISATSession(self.session) |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
829 profile = session_data.profile |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
830 # profile_uuid = session_data.uuid |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
831 avatar = yield self.asyncBridgeCall("avatarGet", entity, cache_only, hash_only, profile) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
832 if hash_only: |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
833 defer.returnValue(avatar) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
834 else: |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
835 filename = os.path.basename(avatar) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
836 avatar_url = os.path.join(C.CACHE_DIR, session_data.uuid, filename) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
837 defer.returnValue(avatar_url) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
838 |
391
c86d7a8d2c1e
browser_side: added a dialog in Settings/Account to update/delete the XMPP account
souliane <souliane@mailoo.org>
parents:
389
diff
changeset
|
839 def jsonrpc_getAccountDialogUI(self): |
c86d7a8d2c1e
browser_side: added a dialog in Settings/Account to update/delete the XMPP account
souliane <souliane@mailoo.org>
parents:
389
diff
changeset
|
840 """Get the dialog for managing user account |
c86d7a8d2c1e
browser_side: added a dialog in Settings/Account to update/delete the XMPP account
souliane <souliane@mailoo.org>
parents:
389
diff
changeset
|
841 @return: XML string of the XMLUI""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
842 profile = session_iface.ISATSession(self.session).profile |
391
c86d7a8d2c1e
browser_side: added a dialog in Settings/Account to update/delete the XMPP account
souliane <souliane@mailoo.org>
parents:
389
diff
changeset
|
843 return self.sat_host.bridge.getAccountDialogUI(profile) |
c86d7a8d2c1e
browser_side: added a dialog in Settings/Account to update/delete the XMPP account
souliane <souliane@mailoo.org>
parents:
389
diff
changeset
|
844 |
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
|
845 def jsonrpc_getParamsUI(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
|
846 """Return the parameters XML for profile""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
847 profile = session_iface.ISATSession(self.session).profile |
745
ad733b670cc3
server side: fixed params, and removed self.authorized_params as authorisation is handled by the backend
Goffi <goffi@goffi.org>
parents:
744
diff
changeset
|
848 return self.asyncBridgeCall("getParamsUI", C.SECURITY_LIMIT, C.APP_NAME, 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
|
849 |
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
|
850 def jsonrpc_asyncGetParamA(self, param, category, attribute="value"): |
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
|
851 """Return the parameter value for profile""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
852 profile = session_iface.ISATSession(self.session).profile |
746
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
745
diff
changeset
|
853 if category == "Connection": |
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
745
diff
changeset
|
854 # we need to manage the followings params here, else SECURITY_LIMIT would block them |
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
745
diff
changeset
|
855 if param == "JabberID": |
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
745
diff
changeset
|
856 return self.asyncBridgeCall("asyncGetParamA", param, category, attribute, profile_key=profile) |
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
745
diff
changeset
|
857 elif param == "autoconnect": |
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
745
diff
changeset
|
858 return defer.succeed(C.BOOL_TRUE) |
433
bbdbee25123a
import constants.Const as C (according to the coding rules)
souliane <souliane@mailoo.org>
parents:
427
diff
changeset
|
859 d = self.asyncBridgeCall("asyncGetParamA", param, category, attribute, C.SECURITY_LIMIT, profile_key=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
|
860 return d |
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
|
861 |
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
|
862 def jsonrpc_setParam(self, name, value, category): |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
863 profile = session_iface.ISATSession(self.session).profile |
745
ad733b670cc3
server side: fixed params, and removed self.authorized_params as authorisation is handled by the backend
Goffi <goffi@goffi.org>
parents:
744
diff
changeset
|
864 return self.sat_host.bridge.setParam(name, value, category, C.SECURITY_LIMIT, 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
|
865 |
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
|
866 def jsonrpc_launchAction(self, callback_id, data): |
336
629c99bbd031
browser + server side: refactored menus:
Goffi <goffi@goffi.org>
parents:
333
diff
changeset
|
867 #FIXME: any action can be launched, this can be a huge security issue if callback_id can be guessed |
629c99bbd031
browser + server side: refactored menus:
Goffi <goffi@goffi.org>
parents:
333
diff
changeset
|
868 # a security system with authorised callback_id must be implemented, similar to the one for authorised params |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
869 profile = session_iface.ISATSession(self.session).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
|
870 d = self.asyncBridgeCall("launchAction", callback_id, data, profile) |
06a48d805547
server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
330
diff
changeset
|
871 return d |
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
|
872 |
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
|
873 def jsonrpc_chatStateComposing(self, to_jid_s): |
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
|
874 """Call the method to process a "composing" state. |
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
|
875 @param to_jid_s: contact the user is composing to |
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
|
876 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
877 profile = session_iface.ISATSession(self.session).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
|
878 self.sat_host.bridge.chatStateComposing(to_jid_s, profile) |
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
|
879 |
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
|
880 def jsonrpc_getNewAccountDomain(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
|
881 """@return: the domain for new account creation""" |
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
|
882 d = self.asyncBridgeCall("getNewAccountDomain") |
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
|
883 return d |
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
|
884 |
433
bbdbee25123a
import constants.Const as C (according to the coding rules)
souliane <souliane@mailoo.org>
parents:
427
diff
changeset
|
885 def jsonrpc_syntaxConvert(self, text, syntax_from=C.SYNTAX_XHTML, syntax_to=C.SYNTAX_CURRENT): |
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
|
886 """ Convert a text between two syntaxes |
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
|
887 @param text: text to convert |
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
|
888 @param syntax_from: source syntax (e.g. "markdown") |
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
|
889 @param syntax_to: dest syntax (e.g.: "XHTML") |
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
|
890 @param safe: clean resulting XHTML to avoid malicious code if True (forced here) |
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
|
891 @return: converted text """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
892 profile = session_iface.ISATSession(self.session).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
|
893 return self.sat_host.bridge.syntaxConvert(text, syntax_from, syntax_to, True, profile) |
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
|
894 |
520
d58d4dd0cefe
browser and server sides: add bridge method getLastResource
souliane <souliane@mailoo.org>
parents:
514
diff
changeset
|
895 def jsonrpc_getLastResource(self, jid_s): |
521
69bffcf37ce3
browser_side: add minimal requirements for generic plugins handling
souliane <souliane@mailoo.org>
parents:
520
diff
changeset
|
896 """Get the last active resource of that contact.""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
897 profile = session_iface.ISATSession(self.session).profile |
520
d58d4dd0cefe
browser and server sides: add bridge method getLastResource
souliane <souliane@mailoo.org>
parents:
514
diff
changeset
|
898 return self.sat_host.bridge.getLastResource(jid_s, profile) |
d58d4dd0cefe
browser and server sides: add bridge method getLastResource
souliane <souliane@mailoo.org>
parents:
514
diff
changeset
|
899 |
751
2ddd85551612
server + browser side: getFeatures bridge call
Goffi <goffi@goffi.org>
parents:
750
diff
changeset
|
900 def jsonrpc_getFeatures(self): |
2ddd85551612
server + browser side: getFeatures bridge call
Goffi <goffi@goffi.org>
parents:
750
diff
changeset
|
901 """Return the available features in the backend for profile""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
902 profile = session_iface.ISATSession(self.session).profile |
751
2ddd85551612
server + browser side: getFeatures bridge call
Goffi <goffi@goffi.org>
parents:
750
diff
changeset
|
903 return self.sat_host.bridge.getFeatures(profile) |
2ddd85551612
server + browser side: getFeatures bridge call
Goffi <goffi@goffi.org>
parents:
750
diff
changeset
|
904 |
522
0de69fec24e9
browser and server sides: OTR plugin, first draft
souliane <souliane@mailoo.org>
parents:
521
diff
changeset
|
905 def jsonrpc_skipOTR(self): |
0de69fec24e9
browser and server sides: OTR plugin, first draft
souliane <souliane@mailoo.org>
parents:
521
diff
changeset
|
906 """Tell the backend to leave OTR handling to Libervia.""" |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
907 profile = session_iface.ISATSession(self.session).profile |
522
0de69fec24e9
browser and server sides: OTR plugin, first draft
souliane <souliane@mailoo.org>
parents:
521
diff
changeset
|
908 return self.sat_host.bridge.skipOTR(profile) |
0de69fec24e9
browser and server sides: OTR plugin, first draft
souliane <souliane@mailoo.org>
parents:
521
diff
changeset
|
909 |
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
|
910 |
554
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
911 class WaitingRequests(dict): |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
912 |
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
|
913 def setRequest(self, request, profile, register_with_ext_jid=False): |
554
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
914 """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
|
915 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
916 @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
|
917 @param profile (str): %(doc_profile)s |
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
|
918 @param register_with_ext_jid (bool): True if we will try to register the 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
|
919 """ |
555
db1b330c1eb1
server_side: set the connection attempt timeout to the bridge timeout (2 minutes)
souliane <souliane@mailoo.org>
parents:
554
diff
changeset
|
920 dc = reactor.callLater(BRIDGE_TIMEOUT, self.purgeRequest, profile) |
796
fad9c9f82ae3
browser and server sides: alert the user after he created a new profile using his XMPP account credentials
souliane <souliane@mailoo.org>
parents:
794
diff
changeset
|
921 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
|
922 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
923 def purgeRequest(self, profile): |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
924 """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
|
925 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
926 @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
|
927 """ |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
928 try: |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
929 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
|
930 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
|
931 return |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
932 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
|
933 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
|
934 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
|
935 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
936 def getRequest(self, profile): |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
937 """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
|
938 |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
939 @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
|
940 @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
|
941 """ |
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
942 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
|
943 |
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
|
944 def getRegisterWithExtJid(self, profile): |
fad9c9f82ae3
browser and server sides: alert the user after he created a new profile using his XMPP account credentials
souliane <souliane@mailoo.org>
parents:
794
diff
changeset
|
945 """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
|
946 |
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
|
947 @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
|
948 @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
|
949 """ |
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
|
950 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
|
951 |
554
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
952 |
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
|
953 class Register(JSONRPCMethodManager): |
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
|
954 """This class manage the registration procedure with SàT |
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
|
955 It provide an api for the browser, check password and setup the web server""" |
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
|
956 |
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
|
957 def __init__(self, sat_host): |
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
|
958 JSONRPCMethodManager.__init__(self, sat_host) |
451 | 959 self.profiles_waiting = {} |
960 self.request = None | |
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
|
961 |
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
|
962 def render(self, request): |
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
|
963 """ |
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
|
964 Render method with some hacks: |
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
|
965 - if login is requested, try to login with form data |
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
|
966 - except login, every method is jsonrpc |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
967 - user doesn't need to be authentified for explicitely listed methods, but must be for all others |
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
|
968 """ |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
969 if request.postpath == ['login']: |
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
970 return self.loginOrRegister(request) |
331
06a48d805547
server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
330
diff
changeset
|
971 _session = request.getSession() |
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
|
972 parsed = jsonrpclib.loads(request.content.read()) |
482
437eefa53a01
misc: remove some pylint errors and warnings
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
973 method = parsed.get("method") # pylint: disable=E1103 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
974 if method not in ['getSessionMetadata', 'registerParams', 'menusGet']: |
336
629c99bbd031
browser + server side: refactored menus:
Goffi <goffi@goffi.org>
parents:
333
diff
changeset
|
975 #if we don't call these methods, we need to be identified |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
976 profile = session_iface.ISATSession(_session).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
|
977 if not profile: |
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
|
978 #user is not identified, we return a jsonrpc fault |
481
bbdc5357dc00
browser and server sides: refactor HTTP request result values + handle "NoReply" error
souliane <souliane@mailoo.org>
parents:
476
diff
changeset
|
979 fault = jsonrpclib.Fault(C.ERRNUM_LIBERVIA, C.NOT_ALLOWED) # FIXME: define some standard error codes for libervia |
482
437eefa53a01
misc: remove some pylint errors and warnings
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
980 return jsonrpc.JSONRPC._cbRender(self, fault, request, parsed.get('id'), parsed.get('jsonrpc')) # pylint: disable=E1103 |
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
|
981 self.request = request |
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
|
982 return jsonrpc.JSONRPC.render(self, request) |
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
|
983 |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
984 def loginOrRegister(self, request): |
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
985 """This method is called with the POST information from the registering form. |
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
|
986 |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
987 @param request: request of the register form |
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
988 @return: a constant indicating the state: |
481
bbdc5357dc00
browser and server sides: refactor HTTP request result values + handle "NoReply" error
souliane <souliane@mailoo.org>
parents:
476
diff
changeset
|
989 - C.BAD_REQUEST: something is wrong in the request (bad arguments) |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
990 - a return value from self._loginAccount or self._registerNewAccount |
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
991 """ |
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
|
992 try: |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
993 submit_type = request.args['submit_type'][0] |
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
|
994 except KeyError: |
481
bbdc5357dc00
browser and server sides: refactor HTTP request result values + handle "NoReply" error
souliane <souliane@mailoo.org>
parents:
476
diff
changeset
|
995 return C.BAD_REQUEST |
331
06a48d805547
server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
330
diff
changeset
|
996 |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
997 if submit_type == 'register': |
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
|
998 self._registerNewAccount(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
|
999 return server.NOT_DONE_YET |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1000 elif submit_type == '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
|
1001 self._loginAccount(request) |
794
6a2fd7807770
server_side: if a user tries to login with a full JID but his host is the local domain, login with the user part only
souliane <souliane@mailoo.org>
parents:
793
diff
changeset
|
1002 return server.NOT_DONE_YET |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1003 return Exception('Unknown submit type') |
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
|
1004 |
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
|
1005 @defer.inlineCallbacks |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1006 def _registerNewAccount(self, 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
|
1007 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
|
1008 login = request.args['register_login'][0] |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1009 password = request.args['register_password'][0] |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1010 email = request.args['email'][0] |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1011 except KeyError: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1012 request.write(C.BAD_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
|
1013 request.finish() |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1014 return |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1015 status = yield self.sat_host.registerNewAccount(request, login, password, email) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1016 request.write(status) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1017 request.finish() |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1018 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1019 @defer.inlineCallbacks |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1020 def _loginAccount(self, request): |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1021 """Try to authenticate the user with the request information. |
810 | 1022 |
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
|
1023 will write to request 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
|
1024 - C.PROFILE_LOGGED: profile is connected |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1025 - C.PROFILE_LOGGED_EXT_JID: profile is connected and an external jid has been used |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1026 - C.SESSION_ACTIVE: session was already active |
481
bbdc5357dc00
browser and server sides: refactor HTTP request result values + handle "NoReply" error
souliane <souliane@mailoo.org>
parents:
476
diff
changeset
|
1027 - C.BAD_REQUEST: something is wrong in the request (bad arguments) |
bbdc5357dc00
browser and server sides: refactor HTTP request result values + handle "NoReply" error
souliane <souliane@mailoo.org>
parents:
476
diff
changeset
|
1028 - C.PROFILE_AUTH_ERROR: either the profile (login) or the profile password is wrong |
bbdc5357dc00
browser and server sides: refactor HTTP request result values + handle "NoReply" error
souliane <souliane@mailoo.org>
parents:
476
diff
changeset
|
1029 - C.XMPP_AUTH_ERROR: the profile is authenticated but the XMPP password is wrong |
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
|
1030 - C.ALREADY_WAITING: a request has already been submitted for this profil, C.PROFILE_LOGGED_EXT_JID)e |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1031 - C.NOT_CONNECTED: connection has not been established |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1032 the request will then be finished |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1033 @param request: request of the register form |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1034 """ |
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1035 try: |
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
|
1036 login = request.args['login'][0] |
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
|
1037 password = request.args['login_password'][0] |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1038 except KeyError: |
794
6a2fd7807770
server_side: if a user tries to login with a full JID but his host is the local domain, login with the user part only
souliane <souliane@mailoo.org>
parents:
793
diff
changeset
|
1039 request.write(C.BAD_REQUEST) |
6a2fd7807770
server_side: if a user tries to login with a full JID but his host is the local domain, login with the user part only
souliane <souliane@mailoo.org>
parents:
793
diff
changeset
|
1040 request.finish() |
6a2fd7807770
server_side: if a user tries to login with a full JID but his host is the local domain, login with the user part only
souliane <souliane@mailoo.org>
parents:
793
diff
changeset
|
1041 return |
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
|
1042 |
819
9b9c0fe0a75f
server: fixed bad login check introduced in rev 6a2fd7807770
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
1043 assert login |
9b9c0fe0a75f
server: fixed bad login check introduced in rev 6a2fd7807770
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
1044 |
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
|
1045 try: |
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
|
1046 status = yield self.sat_host.connect(request, login, password) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1047 except (exceptions.DataError, |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1048 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
|
1049 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
|
1050 request.write(C.PROFILE_AUTH_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
|
1051 request.finish() |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1052 return |
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 except exceptions.NotReady: |
794
6a2fd7807770
server_side: if a user tries to login with a full JID but his host is the local domain, login with the user part only
souliane <souliane@mailoo.org>
parents:
793
diff
changeset
|
1054 request.write(C.ALREADY_WAITING) |
6a2fd7807770
server_side: if a user tries to login with a full JID but his host is the local domain, login with the user part only
souliane <souliane@mailoo.org>
parents:
793
diff
changeset
|
1055 request.finish() |
6a2fd7807770
server_side: if a user tries to login with a full JID but his host is the local domain, login with the user part only
souliane <souliane@mailoo.org>
parents:
793
diff
changeset
|
1056 return |
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
|
1057 except exceptions.TimeOutError: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1058 request.write(C.NO_REPLY) |
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
|
1059 request.finish() |
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
|
1060 return |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1061 except exceptions.InternalError as e: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1062 request.write(e.message) |
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
|
1063 request.finish() |
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
|
1064 return |
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 except exceptions.ConflictError: |
481
bbdc5357dc00
browser and server sides: refactor HTTP request result values + handle "NoReply" error
souliane <souliane@mailoo.org>
parents:
476
diff
changeset
|
1066 request.write(C.SESSION_ACTIVE) |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1067 request.finish() |
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1068 return |
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 except ValueError as e: |
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 if e.message in (C.PROFILE_AUTH_ERROR, C.XMPP_AUTH_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 request.write(e.message) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1072 request.finish() |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1073 return |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1074 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
|
1075 raise e |
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
|
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 assert status |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1078 request.write(status) |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
1079 request.finish() |
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
|
1080 |
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 jsonrpc_isConnected(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
|
1082 _session = self.request.getSession() |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
1083 profile = session_iface.ISATSession(_session).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
|
1084 return self.sat_host.bridge.isConnected(profile) |
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 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1086 def jsonrpc_connect(self): |
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
|
1087 _session = self.request.getSession() |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
1088 profile = session_iface.ISATSession(_session).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
|
1089 if self.waiting_profiles.getRequest(profile): |
481
bbdc5357dc00
browser and server sides: refactor HTTP request result values + handle "NoReply" error
souliane <souliane@mailoo.org>
parents:
476
diff
changeset
|
1090 raise jsonrpclib.Fault(1, C.ALREADY_WAITING) # FIXME: define some standard error codes for libervia |
554
471b6babe960
server_side: set a timeout to reset the waiting connection requests after 5 minutes
souliane <souliane@mailoo.org>
parents:
553
diff
changeset
|
1091 self.waiting_profiles.setRequest(self.request, profile) |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1092 self.sat_host.bridge.connect(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
|
1093 return server.NOT_DONE_YET |
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
|
1094 |
869
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1095 def jsonrpc_getSessionMetadata(self): |
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1096 """Return metadata useful on session start |
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1097 |
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1098 @return (dict): metadata which can have the following keys: |
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1099 "plugged" (bool): True if a profile is already plugged |
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1100 "warning" (unicode): a security warning message if plugged is False and if it make sense |
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1101 this key may not be present |
871
54f6c5b86a87
server, browser: new "allow_registration" option to enable/disable new account registration through Liberia interface
Goffi <goffi@goffi.org>
parents:
869
diff
changeset
|
1102 "allow_registration" (bool): True if registration is allowed |
54f6c5b86a87
server, browser: new "allow_registration" option to enable/disable new account registration through Liberia interface
Goffi <goffi@goffi.org>
parents:
869
diff
changeset
|
1103 this key is only present if profile is unplugged |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1104 @return: a couple (registered, message) with: |
869
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1105 - registered: |
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1106 - message: |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1107 """ |
869
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1108 metadata = {} |
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
|
1109 _session = self.request.getSession() |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
1110 profile = session_iface.ISATSession(_session).profile |
869
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1111 if profile: |
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1112 metadata["plugged"] = True |
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1113 else: |
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1114 metadata["plugged"] = False |
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1115 metadata["warning"] = self._getSecurityWarning() |
871
54f6c5b86a87
server, browser: new "allow_registration" option to enable/disable new account registration through Liberia interface
Goffi <goffi@goffi.org>
parents:
869
diff
changeset
|
1116 metadata["allow_registration"] = self.sat_host.options["allow_registration"] |
869
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1117 return metadata |
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
|
1118 |
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
|
1119 def jsonrpc_registerParams(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
|
1120 """Register the frontend specific parameters""" |
696
c2f22ca12e23
browser and server side: remove unibox
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
1121 # params = """<params><individual>...</category></individual>""" |
c2f22ca12e23
browser and server side: remove unibox
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
1122 # self.sat_host.bridge.paramsRegisterApp(params, C.SECURITY_LIMIT, C.APP_NAME) |
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
|
1123 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1124 def jsonrpc_menusGet(self): |
336
629c99bbd031
browser + server side: refactored menus:
Goffi <goffi@goffi.org>
parents:
333
diff
changeset
|
1125 """Return the parameters XML for profile""" |
629c99bbd031
browser + server side: refactored menus:
Goffi <goffi@goffi.org>
parents:
333
diff
changeset
|
1126 # XXX: we put this method in Register because we get menus before being logged |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
1127 return self.sat_host.bridge.menusGet('', C.SECURITY_LIMIT) |
336
629c99bbd031
browser + server side: refactored menus:
Goffi <goffi@goffi.org>
parents:
333
diff
changeset
|
1128 |
819
9b9c0fe0a75f
server: fixed bad login check introduced in rev 6a2fd7807770
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
1129 def _getSecurityWarning(self): |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1130 """@return: a security warning message, or None if the connection is secure""" |
810 | 1131 if self.request.URLPath().scheme == 'https' or not self.sat_host.options['security_warning']: |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1132 return None |
707
dfe4b0291daa
server_side: remove unwanted "target" property in the HTTP to HTTPS link + use "<p>" instead of "<br>"
souliane <souliane@mailoo.org>
parents:
706
diff
changeset
|
1133 text = "<p>" + D_("You are about to connect to an unsecure service.") + "</p><p> </p><p>" |
dfe4b0291daa
server_side: remove unwanted "target" property in the HTTP to HTTPS link + use "<p>" instead of "<br>"
souliane <souliane@mailoo.org>
parents:
706
diff
changeset
|
1134 |
810 | 1135 if self.sat_host.options['connection_type'] == 'both': |
1136 new_port = (':%s' % self.sat_host.options['port_https_ext']) if self.sat_host.options['port_https_ext'] != HTTPS_PORT else '' | |
1137 url = "https://%s" % self.request.URLPath().netloc.replace(':%s' % self.sat_host.options['port'], new_port) | |
707
dfe4b0291daa
server_side: remove unwanted "target" property in the HTTP to HTTPS link + use "<p>" instead of "<br>"
souliane <souliane@mailoo.org>
parents:
706
diff
changeset
|
1138 text += D_('Please read our %(faq_prefix)ssecurity notice%(faq_suffix)s regarding HTTPS') % {'faq_prefix': '<a href="http://salut-a-toi.org/faq.html#https" target="#">', 'faq_suffix': '</a>'} |
dfe4b0291daa
server_side: remove unwanted "target" property in the HTTP to HTTPS link + use "<p>" instead of "<br>"
souliane <souliane@mailoo.org>
parents:
706
diff
changeset
|
1139 text += "</p><p>" + D_('and use the secure version of this website:') |
dfe4b0291daa
server_side: remove unwanted "target" property in the HTTP to HTTPS link + use "<p>" instead of "<br>"
souliane <souliane@mailoo.org>
parents:
706
diff
changeset
|
1140 text += '</p><p> </p><p align="center"><a href="%(url)s">%(url)s</a>' % {'url': url} |
706
fe03637fe5a6
server_side: add a link to the FAQ in the HTTP/HTTPS warning dialog
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
1141 else: |
841
4a01be961fd2
server: removed unused %(url)s for formatting HTTP warning message
Goffi <goffi@goffi.org>
parents:
823
diff
changeset
|
1142 text += D_('You should ask your administrator to turn on HTTPS.') |
707
dfe4b0291daa
server_side: remove unwanted "target" property in the HTTP to HTTPS link + use "<p>" instead of "<br>"
souliane <souliane@mailoo.org>
parents:
706
diff
changeset
|
1143 |
dfe4b0291daa
server_side: remove unwanted "target" property in the HTTP to HTTPS link + use "<p>" instead of "<br>"
souliane <souliane@mailoo.org>
parents:
706
diff
changeset
|
1144 return text + "</p><p> </p>" |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
1145 |
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
|
1146 |
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
|
1147 class SignalHandler(jsonrpc.JSONRPC): |
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
|
1148 |
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
|
1149 def __init__(self, sat_host): |
858 | 1150 web_resource.Resource.__init__(self) |
451 | 1151 self.register = None |
1152 self.sat_host = sat_host | |
744
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1153 self.signalDeferred = {} # dict of deferred (key: profile, value: Deferred) |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1154 # which manages the long polling HTTP request with signals |
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
|
1155 self.queue = {} |
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
|
1156 |
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
|
1157 def plugRegister(self, register): |
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
|
1158 self.register = register |
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
|
1159 |
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
|
1160 def jsonrpc_getSignals(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
|
1161 """Keep the connection alive until a signal is received, then send 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
|
1162 @return: (signal, *signal_args)""" |
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
|
1163 _session = self.request.getSession() |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
1164 profile = session_iface.ISATSession(_session).profile |
451 | 1165 if profile in self.queue: # if we have signals to send in queue |
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
|
1166 if self.queue[profile]: |
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
|
1167 return self.queue[profile].pop(0) |
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
|
1168 else: |
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
|
1169 #the queue is empty, we delete the profile from queue |
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
|
1170 del self.queue[profile] |
451 | 1171 _session.lock() # we don't want the session to expire as long as this connection is active |
1172 | |
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
|
1173 def unlock(signal, profile): |
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
|
1174 _session.unlock() |
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
|
1175 try: |
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
|
1176 source_defer = self.signalDeferred[profile] |
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
|
1177 if source_defer.called and source_defer.result[0] == "disconnected": |
438
582c435dab6b
server side: new log system is used
Goffi <goffi@goffi.org>
parents:
435
diff
changeset
|
1178 log.info(u"[%s] disconnected" % (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
|
1179 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
|
1180 _session.expire() |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1181 except KeyError: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1182 # FIXME: happen if session is ended using login page |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1183 # when pyjamas page is also launched |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1184 log.warning(u'session is already expired') |
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
|
1185 except IndexError: |
438
582c435dab6b
server side: new log system is used
Goffi <goffi@goffi.org>
parents:
435
diff
changeset
|
1186 log.error("Deferred result should be a tuple with fonction name first") |
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
|
1187 |
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
|
1188 self.signalDeferred[profile] = defer.Deferred() |
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
|
1189 self.request.notifyFinish().addBoth(unlock, profile) |
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
|
1190 return self.signalDeferred[profile] |
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
|
1191 |
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
|
1192 def getGenericCb(self, function_name): |
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
|
1193 """Return a generic function which send all params to signalDeferred.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
|
1194 function must have profile as last argument""" |
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
|
1195 def genericCb(*args): |
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
|
1196 profile = args[-1] |
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
|
1197 if not profile in self.sat_host.prof_connected: |
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
|
1198 return |
744
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1199 signal_data = (function_name, args[:-1]) |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1200 try: |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1201 signal_callback = self.signalDeferred[profile].callback |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1202 except KeyError: |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1203 self.queue.setdefault(profile,[]).append(signal_data) |
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
|
1204 else: |
744
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1205 signal_callback(signal_data) |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1206 del self.signalDeferred[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
|
1207 return genericCb |
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
|
1208 |
744
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1209 def actionNewHandler(self, action_data, action_id, security_limit, profile): |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1210 """actionNew handler |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1211 |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1212 XXX: We need need a dedicated handler has actionNew use a security_limit which must be managed |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1213 @param action_data(dict): see bridge documentation |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1214 @param action_id(unicode): identitifer of the action |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1215 @param security_limit(int): %(doc_security_limit)s |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1216 @param profile(unicode): %(doc_profile)s |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1217 """ |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1218 if not profile in self.sat_host.prof_connected: |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1219 return |
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
|
1220 # FIXME: manage security limit in a dedicated method |
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
|
1221 # raise an exception if it's not OK |
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
|
1222 # and read value in sat.conf |
744
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1223 if security_limit >= C.SECURITY_LIMIT: |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1224 log.debug(u"Ignoring action {action_id}, blocked by security limit".format(action_id=action_id)) |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1225 return |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1226 signal_data = ("actionNew", (action_data, action_id, security_limit)) |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1227 try: |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1228 signal_callback = self.signalDeferred[profile].callback |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1229 except KeyError: |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1230 self.queue.setdefault(profile,[]).append(signal_data) |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1231 else: |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1232 signal_callback(signal_data) |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1233 del self.signalDeferred[profile] |
03ccd68a6dab
server side: actionNew now use a dedicated signal handler, which block it if security limit is exceeded
Goffi <goffi@goffi.org>
parents:
724
diff
changeset
|
1234 |
710
df8cb7bedfbf
server_side: update connected signal handler according to sat changeset 1435 (7590bbf44eed)
souliane <souliane@mailoo.org>
parents:
707
diff
changeset
|
1235 def connected(self, profile, jid_s): |
df8cb7bedfbf
server_side: update connected signal handler according to sat changeset 1435 (7590bbf44eed)
souliane <souliane@mailoo.org>
parents:
707
diff
changeset
|
1236 """Connection is done. |
df8cb7bedfbf
server_side: update connected signal handler according to sat changeset 1435 (7590bbf44eed)
souliane <souliane@mailoo.org>
parents:
707
diff
changeset
|
1237 |
df8cb7bedfbf
server_side: update connected signal handler according to sat changeset 1435 (7590bbf44eed)
souliane <souliane@mailoo.org>
parents:
707
diff
changeset
|
1238 @param profile (unicode): %(doc_profile)s |
df8cb7bedfbf
server_side: update connected signal handler according to sat changeset 1435 (7590bbf44eed)
souliane <souliane@mailoo.org>
parents:
707
diff
changeset
|
1239 @param jid_s (unicode): the JID that we were assigned by the server, as the resource might differ from the JID we asked for. |
df8cb7bedfbf
server_side: update connected signal handler according to sat changeset 1435 (7590bbf44eed)
souliane <souliane@mailoo.org>
parents:
707
diff
changeset
|
1240 """ |
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
|
1241 # FIXME: _logged should not be called from here, check this code |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1242 # FIXME: check if needed to connect with external jid |
710
df8cb7bedfbf
server_side: update connected signal handler according to sat changeset 1435 (7590bbf44eed)
souliane <souliane@mailoo.org>
parents:
707
diff
changeset
|
1243 # jid_s is handled in QuickApp.connectionHandler already |
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
|
1244 # assert self.register # register must be plugged |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
1245 # request = self.sat_host.waiting_profiles.getRequest(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
|
1246 # if 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
|
1247 # self.sat_host._logged(profile, request) |
331
06a48d805547
server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
330
diff
changeset
|
1248 |
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
|
1249 def disconnected(self, profile): |
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
|
1250 if not profile in self.sat_host.prof_connected: |
438
582c435dab6b
server side: new log system is used
Goffi <goffi@goffi.org>
parents:
435
diff
changeset
|
1251 log.error("'disconnected' signal received for a not connected 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
|
1252 return |
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
|
1253 self.sat_host.prof_connected.remove(profile) |
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
|
1254 if profile in self.signalDeferred: |
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
|
1255 self.signalDeferred[profile].callback(("disconnected",)) |
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
|
1256 del self.signalDeferred[profile] |
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
|
1257 else: |
451 | 1258 if profile not in self.queue: |
331
06a48d805547
server side: make Libervia a Twisted plugin, and add it the --port argument + add a config file for the port.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
330
diff
changeset
|
1259 self.queue[profile] = [] |
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
|
1260 self.queue[profile].append(("disconnected",)) |
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
|
1261 |
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
|
1262 def render(self, request): |
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
|
1263 """ |
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
|
1264 Render method wich reject access if user is not identified |
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
|
1265 """ |
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
|
1266 _session = request.getSession() |
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
|
1267 parsed = jsonrpclib.loads(request.content.read()) |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
1268 profile = session_iface.ISATSession(_session).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
|
1269 if not profile: |
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
|
1270 #user is not identified, we return a jsonrpc fault |
481
bbdc5357dc00
browser and server sides: refactor HTTP request result values + handle "NoReply" error
souliane <souliane@mailoo.org>
parents:
476
diff
changeset
|
1271 fault = jsonrpclib.Fault(C.ERRNUM_LIBERVIA, C.NOT_ALLOWED) # FIXME: define some standard error codes for libervia |
482
437eefa53a01
misc: remove some pylint errors and warnings
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
1272 return jsonrpc.JSONRPC._cbRender(self, fault, request, parsed.get('id'), parsed.get('jsonrpc')) # pylint: disable=E1103 |
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
|
1273 self.request = request |
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
|
1274 return jsonrpc.JSONRPC.render(self, request) |
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
|
1275 |
451 | 1276 |
858 | 1277 class UploadManager(web_resource.Resource): |
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
|
1278 """This class manage the upload of a file |
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
|
1279 It redirect the stream to SàT core backend""" |
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
|
1280 isLeaf = True |
451 | 1281 NAME = 'path' # name use by the FileUpload |
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
|
1282 |
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
|
1283 def __init__(self, sat_host): |
451 | 1284 self.sat_host = sat_host |
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
|
1285 self.upload_dir = tempfile.mkdtemp() |
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
|
1286 self.sat_host.addCleanup(shutil.rmtree, self.upload_dir) |
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
|
1287 |
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
|
1288 def getTmpDir(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
|
1289 return self.upload_dir |
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
|
1290 |
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
|
1291 def _getFileName(self, request): |
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
|
1292 """Generate unique filename for a file""" |
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
|
1293 raise NotImplementedError |
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
|
1294 |
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
|
1295 def _fileWritten(self, request, filepath): |
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
|
1296 """Called once the file is actually written on disk |
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
|
1297 @param request: HTTP request object |
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
|
1298 @param filepath: full filepath on the server |
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
|
1299 @return: a tuple with the name of the async bridge method |
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
|
1300 to be called followed by its arguments. |
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
|
1301 """ |
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
|
1302 raise NotImplementedError |
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
|
1303 |
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
|
1304 def render(self, request): |
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
|
1305 """ |
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
|
1306 Render method with some hacks: |
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
|
1307 - if login is requested, try to login with form data |
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
|
1308 - except login, every method is jsonrpc |
869
fa7703642c0e
server, browser: replaced isRegistered call by a more generic getSessionMetadata which return a dictionary
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
1309 - user doesn't need to be authentified for getSessionMetadata, but must be for all other 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
|
1310 """ |
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
|
1311 filename = self._getFileName(request) |
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
|
1312 filepath = os.path.join(self.upload_dir, filename) |
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
|
1313 #FIXME: the uploaded file is fully loaded in memory at form parsing time so far |
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
|
1314 # (see twisted.web.http.Request.requestReceived). A custom requestReceived should |
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
|
1315 # be written in the futur. In addition, it is not yet possible to get progression informations |
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
|
1316 # (see http://twistedmatrix.com/trac/ticket/288) |
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
|
1317 |
451 | 1318 with open(filepath, 'w') as f: |
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
|
1319 f.write(request.args[self.NAME][0]) |
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
|
1320 |
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
|
1321 def finish(d): |
917 | 1322 error = isinstance(d, Exception) or isinstance(d, failure.Failure) |
481
bbdc5357dc00
browser and server sides: refactor HTTP request result values + handle "NoReply" error
souliane <souliane@mailoo.org>
parents:
476
diff
changeset
|
1323 request.write(C.UPLOAD_KO if error else C.UPLOAD_OK) |
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
|
1324 # TODO: would be great to re-use the original Exception class and message |
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
|
1325 # but it is lost in the middle of the backtrace and encapsulated within |
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
|
1326 # a DBusException instance --> extract the data from the backtrace? |
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
|
1327 request.finish() |
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
|
1328 |
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
|
1329 d = JSONRPCMethodManager(self.sat_host).asyncBridgeCall(*self._fileWritten(request, filepath)) |
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
|
1330 d.addCallbacks(lambda d: finish(d), lambda failure: finish(failure)) |
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
|
1331 return server.NOT_DONE_YET |
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
|
1332 |
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
|
1333 |
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
|
1334 class UploadManagerRadioCol(UploadManager): |
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
|
1335 NAME = 'song' |
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
|
1336 |
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
|
1337 def _getFileName(self, request): |
394
ee61b0765d6c
browser_side: radiocol supports MP3
souliane <souliane@mailoo.org>
parents:
391
diff
changeset
|
1338 extension = os.path.splitext(request.args['filename'][0])[1] |
ee61b0765d6c
browser_side: radiocol supports MP3
souliane <souliane@mailoo.org>
parents:
391
diff
changeset
|
1339 return "%s%s" % (str(uuid.uuid4()), extension) # XXX: chromium doesn't seem to play song without the .ogg extension, even with audio/ogg mime-type |
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
|
1340 |
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
|
1341 def _fileWritten(self, request, filepath): |
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
|
1342 """Called once the file is actually written on disk |
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
|
1343 @param request: HTTP request object |
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
|
1344 @param filepath: full filepath on the server |
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
|
1345 @return: a tuple with the name of the async bridge method |
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
|
1346 to be called followed by its arguments. |
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
|
1347 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
1348 profile = session_iface.ISATSession(request.getSession()).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
|
1349 return ("radiocolSongAdded", request.args['referee'][0], filepath, profile) |
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
|
1350 |
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
|
1351 |
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
|
1352 class UploadManagerAvatar(UploadManager): |
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
|
1353 NAME = 'avatar_path' |
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
|
1354 |
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
|
1355 def _getFileName(self, request): |
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
|
1356 return str(uuid.uuid4()) |
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
|
1357 |
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
|
1358 def _fileWritten(self, request, filepath): |
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
|
1359 """Called once the file is actually written on disk |
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
|
1360 @param request: HTTP request object |
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
|
1361 @param filepath: full filepath on the server |
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
|
1362 @return: a tuple with the name of the async bridge method |
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
|
1363 to be called followed by its arguments. |
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
|
1364 """ |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
1365 profile = session_iface.ISATSession(request.getSession()).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
|
1366 return ("setAvatar", filepath, profile) |
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
|
1367 |
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
|
1368 |
917 | 1369 class LiberviaPage(web_resource.Resource): |
1370 isLeaf = True # we handle subpages ourself | |
1371 named_pages = {} | |
925 | 1372 uri_callbacks = {} |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1373 pages_redirects = {} |
917 | 1374 |
978
c8cafe316f6f
pages: removed trailing_slash option:
Goffi <goffi@goffi.org>
parents:
974
diff
changeset
|
1375 def __init__(self, host, root_dir, url, name=None, redirect=None, access=None, parse_url=None, |
931
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1376 prepare_render=None, render=None, template=None, on_data_post=None): |
917 | 1377 """initiate LiberviaPages |
1378 | |
1379 LiberviaPages are the main resources of Libervia, using easy to set python files | |
1380 The arguments are the variables found in page_meta.py | |
1381 @param host(Libervia): the running instance of Libervia | |
962 | 1382 @param root_dir(unicode): aboslute file path of the page |
1383 @param url(unicode): relative URL to the page | |
1384 this URL may not be valid, as pages may require path arguments | |
917 | 1385 @param name(unicode, None): if not None, a unique name to identify the page |
1386 can then be used for e.g. redirection | |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1387 "/" is not allowed in names (as it can be used to construct URL paths) |
962 | 1388 @param redirect(unicode, None): if not None, this page will be redirected. A redirected |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1389 parameter is used as in self.pageRedirect. parse_url will not be skipped |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1390 using this redirect parameter is called "full redirection" |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1391 using self.pageRedirect is called "partial redirection" (because some rendering method |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1392 can still be used, e.g. parse_url) |
917 | 1393 @param access(unicode, None): permission needed to access the page |
1394 None means public access. | |
1395 Pages inherit from parent pages: e.g. if a "settings" page is restricted to admins, | |
1396 and if "settings/blog" is public, it still can only be accessed by admins. | |
1397 see C.PAGES_ACCESS_* for details | |
1398 @param parse_url(callable, None): if set it will be called to handle the URL path | |
1399 after this method, the page will be rendered if noting is left in path (request.postpath) | |
1400 else a the request will be transmitted to a subpage | |
1401 @param prepare_render(callable, None): if set, will be used to prepare the rendering | |
1402 that often means gathering data using the bridge | |
1403 @param render(callable, None): if not template is set, this method will be called and | |
1404 what it returns will be rendered. | |
1405 This method is mutually exclusive with template and must return a unicode string. | |
1406 @param template(unicode, None): path to the template to render. | |
1407 This method is mutually exclusive with render | |
931
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1408 @param on_data_post(callable, None): method to call when data is posted |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1409 None if not post is handled |
962 | 1410 on_data_post can return a string with following value: |
1411 - C.POST_NO_CONFIRM: confirm flag will not be set | |
917 | 1412 """ |
1413 | |
1414 web_resource.Resource.__init__(self) | |
1415 self.host = host | |
1416 self.root_dir = root_dir | |
962 | 1417 self.url = url |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1418 self.name = name |
917 | 1419 if name is not None: |
1420 if name in self.named_pages: | |
1421 raise exceptions.ConflictError(_(u'a Libervia page named "{}" already exists'.format(name))) | |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1422 if u'/' in name: |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1423 raise ValueError(_(u'"/" is not allowed in page names')) |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1424 if not name: |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1425 raise ValueError(_(u"a page name can't be empty")) |
917 | 1426 self.named_pages[name] = self |
1427 if access is None: | |
1428 access = C.PAGES_ACCESS_PUBLIC | |
922
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1429 if access not in (C.PAGES_ACCESS_PUBLIC, C.PAGES_ACCESS_PROFILE, C.PAGES_ACCESS_NONE): |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1430 raise NotImplementedError(_(u"{} access is not implemented yet").format(access)) |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1431 self.access = access |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1432 if redirect is not None: |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1433 # only page access and name make sense in case of full redirection |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1434 # so we check that rendering methods/values are not set |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1435 if not all(lambda x: x is not None |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1436 for x in (parse_url, prepare_render, render, template)): |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1437 raise ValueError(_(u"you can't use full page redirection with other rendering method," |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1438 u"check self.pageRedirect if you need to use them")) |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1439 self.redirect = redirect |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1440 else: |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1441 self.redirect = None |
917 | 1442 self.parse_url = parse_url |
1443 self.prepare_render = prepare_render | |
1444 self.template = template | |
1445 self.render_method = render | |
931
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1446 self.on_data_post = on_data_post |
922
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1447 if access == C.PAGES_ACCESS_NONE: |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1448 # none pages just return a 404, no further check is needed |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1449 return |
917 | 1450 if template is None: |
1451 if not callable(render): | |
1452 log.error(_(u"render must be implemented and callable if template is not set")) | |
1453 else: | |
1454 if render is not None: | |
1455 log.error(_(u"render can't be used at the same time as template")) | |
1456 if parse_url is not None and not callable(parse_url): | |
1457 log.error(_(u"parse_url must be a callable")) | |
1458 | |
925 | 1459 @classmethod |
1460 def importPages(cls, host, parent=None, path=None): | |
937
00236973e138
server (pages): an HTTP internal error is raised if an error is uncatched during page workflow
Goffi <goffi@goffi.org>
parents:
936
diff
changeset
|
1461 """Recursively import Libervia pages""" |
917 | 1462 if path is None: |
1463 path = [] | |
1464 if parent is None: | |
1465 root_dir = os.path.join(os.path.dirname(libervia.__file__), C.PAGES_DIR) | |
1466 parent = host | |
1467 else: | |
1468 root_dir = parent.root_dir | |
1469 for d in os.listdir(root_dir): | |
1470 dir_path = os.path.join(root_dir, d) | |
1471 if not os.path.isdir(dir_path): | |
1472 continue | |
1473 meta_path = os.path.join(dir_path, C.PAGES_META_FILE) | |
1474 if os.path.isfile(meta_path): | |
1475 page_data = {} | |
962 | 1476 new_path = path + [d] |
917 | 1477 # we don't want to force the presence of __init__.py |
1478 # so we use execfile instead of import. | |
1479 # TODO: when moved to Python 3, __init__.py is not mandatory anymore | |
1480 # so we can switch to import | |
1481 execfile(meta_path, page_data) | |
1482 resource = LiberviaPage( | |
1483 host, | |
1484 dir_path, | |
962 | 1485 u'/' + u'/'.join(new_path), |
917 | 1486 name=page_data.get('name'), |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1487 redirect=page_data.get('redirect'), |
917 | 1488 access=page_data.get('access'), |
1489 parse_url=page_data.get('parse_url'), | |
1490 prepare_render=page_data.get('prepare_render'), | |
1491 render=page_data.get('render'), | |
931
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1492 template=page_data.get('template'), |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1493 on_data_post=page_data.get('on_data_post')) |
917 | 1494 parent.putChild(d, resource) |
1495 log.info(u"Added /{path} page".format(path=u'[...]/'.join(new_path))) | |
925 | 1496 if 'uri_handlers' in page_data: |
1497 if not isinstance(page_data, dict): | |
1498 log.error(_(u'uri_handlers must be a dict')) | |
1499 else: | |
1500 for uri_tuple, cb_name in page_data['uri_handlers'].iteritems(): | |
1501 if len(uri_tuple) != 2 or not isinstance(cb_name, basestring): | |
1502 log.error(_(u"invalid uri_tuple")) | |
1503 continue | |
1504 log.info(_(u'setting {}/{} URIs handler').format(*uri_tuple)) | |
1505 try: | |
1506 cb = page_data[cb_name] | |
1507 except KeyError: | |
1508 log.error(_(u'missing {name} method to handle {1}/{2}').format( | |
1509 name = cb_name, *uri_tuple)) | |
1510 continue | |
1511 else: | |
1512 cls.registerURI(uri_tuple, cb, new_path) | |
1513 | |
917 | 1514 LiberviaPage.importPages(host, resource, new_path) |
1515 | |
925 | 1516 @classmethod |
1517 def registerURI(cls, uri_tuple, get_uri_cb, pre_path): | |
1518 """register a URI handler | |
1519 | |
1520 @param uri_tuple(tuple[unicode, unicode]): type or URIs handler | |
1521 type/subtype as returned by tools/common/parseXMPPUri | |
1522 @param get_uri_cb(callable): method which take uri_data dict as only argument | |
1523 and return path with correct arguments relative to page itself | |
1524 @param pre_path(list[unicode]): prefix path to reference the handler page | |
1525 """ | |
1526 if uri_tuple in cls.uri_callbacks: | |
1527 log.info(_(u"{}/{} URIs are already handled, replacing by the new handler").format(*uri_tuple)) | |
1528 cls.uri_callbacks[uri_tuple] = {u'callback': get_uri_cb, | |
1529 u'pre_path': pre_path} | |
1530 | |
927
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1531 def getPagePathFromURI(self, uri): |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1532 """Retrieve page URL from xmpp: URI |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1533 |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1534 @param uri(unicode): URI with a xmpp: scheme |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1535 @return (unicode,None): absolute path (starting from root "/") to page handling the URI |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1536 None is returned if not page has been registered for this URI |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1537 """ |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1538 uri_data = common_uri.parseXMPPUri(uri) |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1539 try: |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1540 callback_data = self.uri_callbacks[uri_data['type'], uri_data.get('sub_type')] |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1541 except KeyError: |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1542 return |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1543 else: |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1544 url = os.path.join(u'/', u'/'.join(callback_data['pre_path']), callback_data['callback'](self, uri_data)) |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1545 return url |
bb4dfc2802c0
server (pages): added getPagePathFromURI method to retrieve page handling an URI
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
1546 |
979 | 1547 @classmethod |
1548 def getPageByName(cls, name): | |
936
78692d47340d
server (pages): added getPageByName
Goffi <goffi@goffi.org>
parents:
935
diff
changeset
|
1549 """retrieve page instance from its name |
78692d47340d
server (pages): added getPageByName
Goffi <goffi@goffi.org>
parents:
935
diff
changeset
|
1550 |
78692d47340d
server (pages): added getPageByName
Goffi <goffi@goffi.org>
parents:
935
diff
changeset
|
1551 @param name(unicode): name of the page |
78692d47340d
server (pages): added getPageByName
Goffi <goffi@goffi.org>
parents:
935
diff
changeset
|
1552 @return (LiberviaPage): page instance |
78692d47340d
server (pages): added getPageByName
Goffi <goffi@goffi.org>
parents:
935
diff
changeset
|
1553 @raise KeyError: the page doesn't exist |
78692d47340d
server (pages): added getPageByName
Goffi <goffi@goffi.org>
parents:
935
diff
changeset
|
1554 """ |
979 | 1555 return cls.named_pages[name] |
936
78692d47340d
server (pages): added getPageByName
Goffi <goffi@goffi.org>
parents:
935
diff
changeset
|
1556 |
962 | 1557 def getPageRedirectURL(self, request, page_name=u'login', url=None): |
1558 """generate URL for a page with redirect_url parameter set | |
1559 | |
1560 mainly used for login page with redirection to current page | |
1561 @param request(server.Request): current HTTP request | |
1562 @param page_name(unicode): name of the page to go | |
1563 @param url(None, unicode): url to redirect to | |
1564 None to use request path (i.e. current page) | |
1565 @return (unicode): URL to use | |
1566 """ | |
1567 return u'{root_url}?redirect_url={redirect_url}'.format( | |
1568 root_url = self.getPageByName(page_name).url, | |
1569 redirect_url=urllib.quote_plus(request.uri) if url is None else url.encode('utf-8')) | |
1570 | |
972
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
1571 def getURL(self, *args): |
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
1572 """retrieve URL of the page set arguments |
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
1573 |
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
1574 *args(list[unicode]): argument to add to the URL as path elements |
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
1575 """ |
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
1576 url_args = [quote(a) for a in args] |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1577 |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1578 if self.name is not None and self.name in self.pages_redirects: |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1579 # we check for redirection |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1580 redirect_data = self.pages_redirects[self.name] |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1581 args_hash = tuple(args) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1582 for limit in xrange(len(args)+1): |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1583 current_hash = args_hash[:limit] |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1584 if current_hash in redirect_data: |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1585 url_base = redirect_data[current_hash] |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1586 remaining = args[limit:] |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1587 remaining_url = '/'.join(remaining) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1588 return os.path.join('/', url_base, remaining_url) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1589 |
972
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
1590 return os.path.join(self.url, *url_args) |
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
1591 |
980
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1592 def getSubPageURL(self, request, page_name, *args): |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1593 """retrieve a page in direct children and build its URL according to request |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1594 |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1595 request's current path is used as base (at current parsing point, |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1596 i.e. it's more prepath than path). |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1597 Requested page is checked in children and an absolute URL is then built |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1598 by the resulting combination. |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1599 This method is useful to construct absolute URLs for children instead of |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1600 using relative path, which may not work in subpages, and are linked to the |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1601 names of directories (i.e. relative URL will break if subdirectory is renamed |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1602 while getSubPageURL won't as long as page_name is consistent). |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1603 Also, request.path is used, keeping real path used by user, |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1604 and potential redirections. |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1605 @param request(server.Request): current HTTP request |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1606 @param page_name(unicode): name of the page to retrieve |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1607 it must be a direct children of current page |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1608 @param *args(list[unicode]): arguments to add as path elements |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1609 @return unicode: absolute URL to the sub page |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1610 """ |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1611 # we get url in the following way (splitting request.path instead of using |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1612 # request.prepath) because request.prepath may have been modified by |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1613 # redirection (if redirection args have been specified), while path reflect |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1614 # the real request |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1615 |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1616 # we ignore empty path elements (i.e. double '/' or '/' at the end) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1617 path_elts = [p for p in request.path.split('/') if p] |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1618 |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1619 if request.postpath: |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1620 if not request.postpath[-1]: |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1621 # we remove trailing slash |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1622 request.postpath = request.postpath[:-1] |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1623 if request.postpath: |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1624 # getSubPageURL must return subpage from the point where |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1625 # the it is called, so we have to remove remanining |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1626 # path elements |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1627 path_elts = path_elts[:-len(request.postpath)] |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1628 |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1629 current_url = '/' + '/'.join(path_elts).decode('utf-8') |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1630 |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1631 for path, child in self.children.iteritems(): |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1632 try: |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1633 child_name = child.name |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1634 except AttributeError: |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1635 # LiberviaPage have a name, but maybe this is an other Resource |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1636 continue |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1637 if child_name == page_name: |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1638 return os.path.join(u'/', current_url, path, *args) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1639 raise exceptions.NotFound(_(u'requested sub page has not been found')) |
bcacf970f970
core (pages redirection): inverted redirection + getSubPageURL:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
1640 |
917 | 1641 def getChildWithDefault(self, path, request): |
1642 # we handle children ourselves | |
1643 raise exceptions.InternalError(u"this method should not be used with LiberviaPage") | |
1644 | |
1645 def nextPath(self, request): | |
1646 """get next URL path segment, and update request accordingly | |
1647 | |
1648 will move first segment of postpath in prepath | |
1649 @param request(server.Request): current HTTP request | |
1650 @return (unicode): unquoted segment | |
1651 @raise IndexError: there is no segment left | |
1652 """ | |
1653 pathElement = request.postpath.pop(0) | |
1654 request.prepath.append(pathElement) | |
1655 return urllib.unquote(pathElement).decode('utf-8') | |
1656 | |
962 | 1657 def HTTPRedirect(self, request, url): |
1658 """redirect to an URL using HTTP redirection | |
1659 | |
1660 @param request(server.Request): current HTTP request | |
1661 @param url(unicode): url to redirect to | |
1662 """ | |
1663 | |
1664 web_util.redirectTo(url.encode('utf-8'), request) | |
1665 request.finish() | |
1666 raise failure.Failure(exceptions.CancelError(u'HTTP redirection is used')) | |
1667 | |
1668 def redirectOrContinue(self, request, redirect_arg=u'redirect_url'): | |
1669 """helper method to redirect a page to an url given as arg | |
1670 | |
1671 if the arg is not present, the page will continue normal workflow | |
1672 @param request(server.Request): current HTTP request | |
1673 @param redirect_arg(unicode): argument to use to get redirection URL | |
1674 @interrupt: redirect the page to requested URL | |
1675 @interrupt pageError(C.HTTP_BAD_REQUEST): empty or non local URL is used | |
1676 """ | |
1677 try: | |
1678 url = self.getPostedData(request, 'redirect_url') | |
1679 except KeyError: | |
1680 pass | |
1681 else: | |
1682 # a redirection is requested | |
1683 if not url or url[0] != u'/': | |
1684 # we only want local urls | |
1685 self.pageError(request, C.HTTP_BAD_REQUEST) | |
1686 else: | |
1687 self.HTTPRedirect(request, url) | |
1688 | |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1689 def pageRedirect(self, page_path, request, skip_parse_url=True): |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1690 """redirect a page to a named page |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1691 |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1692 the workflow will continue with the workflow of the named page, |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1693 skipping named page's parse_url method if it exist. |
962 | 1694 If you want to do a HTTP redirection, use HTTPRedirect |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1695 @param page_path(unicode): path to page (elements are separated by "/"): |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1696 if path starts with a "/": |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1697 path is a full path starting from root |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1698 else: |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1699 - first element is name as registered in name variable |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1700 - following element are subpages path |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1701 e.g.: "blog" redirect to page named "blog" |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1702 "blog/atom.xml" redirect to atom.xml subpage of "blog" |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1703 "/common/blog/atom.xml" redirect to the page at the fiven full path |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1704 @param request(server.Request): current HTTP request |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1705 @param skip_parse_url(bool): if True, parse_url method on redirect page will be skipped |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1706 @raise KeyError: there is no known page with this name |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1707 """ |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1708 # FIXME: render non LiberviaPage resources |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1709 path = page_path.rstrip(u'/').split(u'/') |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1710 if not path[0]: |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1711 redirect_page = self.host.root |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1712 else: |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1713 redirect_page = self.named_pages[path[0]] |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1714 |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1715 for subpage in path[1:]: |
962 | 1716 if redirect_page is self.host.root: |
1717 redirect_page = redirect_page.children[subpage] | |
1718 else: | |
1719 redirect_page = redirect_page.original.children[subpage] | |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1720 |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1721 redirect_page.renderPage(request, skip_parse_url=True) |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1722 raise failure.Failure(exceptions.CancelError(u'page redirection is used')) |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1723 |
922
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1724 def pageError(self, request, code=C.HTTP_NOT_FOUND): |
917 | 1725 """generate an error page and terminate the request |
1726 | |
1727 @param request(server.Request): HTTP request | |
1728 @param core(int): error code to use | |
1729 """ | |
1730 template = u'error/' + unicode(code) + '.html' | |
1731 | |
1732 request.setResponseCode(code) | |
1733 | |
1734 rendered = self.host.renderer.render( | |
1735 template, | |
1736 root_path = '/templates/', | |
1737 error_code = code, | |
1738 **request.template_data) | |
1739 | |
1740 self.writeData(rendered, request) | |
1741 raise failure.Failure(exceptions.CancelError(u'error page is used')) | |
1742 | |
1743 def writeData(self, data, request): | |
937
00236973e138
server (pages): an HTTP internal error is raised if an error is uncatched during page workflow
Goffi <goffi@goffi.org>
parents:
936
diff
changeset
|
1744 """write data to transport and finish the request""" |
917 | 1745 if data is None: |
1746 self.pageError(request) | |
1747 request.write(data.encode('utf-8')) | |
1748 request.finish() | |
1749 | |
1750 def _subpagesHandler(self, dummy, request): | |
1751 """render subpage if suitable | |
1752 | |
1753 this method checks if there is still an unmanaged part of the path | |
1754 and check if it corresponds to a subpage. If so, it render the subpage | |
1755 else it render a NoResource. | |
1756 If there is no unmanaged part of the segment, current page workflow is pursued | |
1757 """ | |
1758 if request.postpath: | |
1759 subpage = self.nextPath(request) | |
1760 try: | |
1761 child = self.children[subpage] | |
1762 except KeyError: | |
1763 self.pageError(request) | |
1764 else: | |
1765 child.render(request) | |
1766 raise failure.Failure(exceptions.CancelError(u'subpage page is used')) | |
1767 | |
1768 def _prepare_render(self, dummy, request): | |
926
612e33fd32a8
server (pages): fixed _prepare_render handling
Goffi <goffi@goffi.org>
parents:
925
diff
changeset
|
1769 return defer.maybeDeferred(self.prepare_render, self, request) |
917 | 1770 |
1771 def _render_method(self, dummy, request): | |
1772 return defer.maybeDeferred(self.render_method, self, request) | |
1773 | |
962 | 1774 def _render_template(self, dummy, request): |
1775 template_data = request.template_data | |
1776 | |
1777 # if confirm variable is set in case of successfuly data post | |
1778 session_data = self.host.getSessionData(request, session_iface.ISATSession) | |
1779 if session_data.popPageFlag(self, C.FLAG_CONFIRM): | |
1780 template_data[u'confirm'] = True | |
1781 | |
917 | 1782 return self.host.renderer.render( |
1783 self.template, | |
1784 root_path = '/templates/', | |
962 | 1785 media_path = '/' + C.MEDIA_DIR, |
917 | 1786 **template_data) |
1787 | |
1788 def _renderEb(self, failure_, request): | |
1789 """don't raise error on CancelError""" | |
1790 failure_.trap(exceptions.CancelError) | |
1791 | |
937
00236973e138
server (pages): an HTTP internal error is raised if an error is uncatched during page workflow
Goffi <goffi@goffi.org>
parents:
936
diff
changeset
|
1792 def _internalError(self, failure_, request): |
00236973e138
server (pages): an HTTP internal error is raised if an error is uncatched during page workflow
Goffi <goffi@goffi.org>
parents:
936
diff
changeset
|
1793 """called if an error is not catched""" |
00236973e138
server (pages): an HTTP internal error is raised if an error is uncatched during page workflow
Goffi <goffi@goffi.org>
parents:
936
diff
changeset
|
1794 log.error(_(u"Uncatched error for HTTP request on {url}: {msg}").format( |
00236973e138
server (pages): an HTTP internal error is raised if an error is uncatched during page workflow
Goffi <goffi@goffi.org>
parents:
936
diff
changeset
|
1795 url = request.URLPath(), |
00236973e138
server (pages): an HTTP internal error is raised if an error is uncatched during page workflow
Goffi <goffi@goffi.org>
parents:
936
diff
changeset
|
1796 msg = failure_)) |
00236973e138
server (pages): an HTTP internal error is raised if an error is uncatched during page workflow
Goffi <goffi@goffi.org>
parents:
936
diff
changeset
|
1797 self.pageError(request, C.HTTP_INTERNAL_ERROR) |
00236973e138
server (pages): an HTTP internal error is raised if an error is uncatched during page workflow
Goffi <goffi@goffi.org>
parents:
936
diff
changeset
|
1798 |
956
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1799 def _on_data_post_redirect(self, ret, request): |
968
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1800 """called when page's on_data_post has been done successfuly |
956
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1801 |
968
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1802 This will do a Post/Redirect/Get pattern. |
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1803 this method redirect to the same page or to request.data['post_redirect_page'] |
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1804 post_redirect_page can be either a page or a tuple with page as first item, then a list of unicode arguments to append to the url. |
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1805 if post_redirect_page is not used, initial request.uri (i.e. the same page as where the data have been posted) will be used for redirection. |
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1806 HTTP status code "See Other" (303) is used as it is the recommanded code in this case. |
962 | 1807 @param ret(None, unicode, iterable): on_data_post return value |
1808 see LiberviaPage.__init__ on_data_post docstring | |
956
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1809 """ |
962 | 1810 if ret is None: |
1811 ret = () | |
1812 elif isinstance(ret, basestring): | |
1813 ret = (ret,) | |
1814 else: | |
1815 ret = tuple(ret) | |
1816 raise NotImplementedError(_(u'iterable in on_data_post return value is not used yet')) | |
957
67bf14c91d5c
server (pages): added a confirm flag on successful post:
Goffi <goffi@goffi.org>
parents:
956
diff
changeset
|
1817 session_data = self.host.getSessionData(request, session_iface.ISATSession) |
974
4aa38c49bff7
pages: fixed use of request data in _on_data_post_redirect
Goffi <goffi@goffi.org>
parents:
972
diff
changeset
|
1818 request_data = self.getRData(request) |
4aa38c49bff7
pages: fixed use of request data in _on_data_post_redirect
Goffi <goffi@goffi.org>
parents:
972
diff
changeset
|
1819 if 'post_redirect_page' in request_data: |
4aa38c49bff7
pages: fixed use of request data in _on_data_post_redirect
Goffi <goffi@goffi.org>
parents:
972
diff
changeset
|
1820 redirect_page_data = request_data['post_redirect_page'] |
968
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1821 if isinstance(redirect_page_data, tuple): |
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1822 redirect_page = redirect_page_data[0] |
972
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
1823 redirect_page_args = redirect_page_data[1:] |
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
1824 redirect_uri = redirect_page.getURL(*redirect_page_args) |
968
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1825 else: |
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1826 redirect_page = redirect_page_data |
972
c4e58c4dba75
server: getURL + minor improvments:
Goffi <goffi@goffi.org>
parents:
968
diff
changeset
|
1827 redirect_uri = redirect_page.url |
968
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1828 else: |
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1829 redirect_page = self |
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1830 redirect_uri = request.uri |
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1831 |
962 | 1832 if not C.POST_NO_CONFIRM in ret: |
968
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1833 session_data.setPageFlag(redirect_page, C.FLAG_CONFIRM) |
956
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1834 request.setResponseCode(C.HTTP_SEE_OTHER) |
968
4d37b23777c3
pages (core, tickets/new): replaced post_redirect_uri mechanism by post_redirect_page:
Goffi <goffi@goffi.org>
parents:
966
diff
changeset
|
1835 request.setHeader("location", redirect_uri) |
955
4f7cb6335a33
server(pages): do Post/Redirect/Get pattern when on_data_post is used (avoid double posting on refresh)
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
1836 request.finish() |
4f7cb6335a33
server(pages): do Post/Redirect/Get pattern when on_data_post is used (avoid double posting on refresh)
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
1837 raise failure.Failure(exceptions.CancelError(u'Post/Redirect/Get is used')) |
4f7cb6335a33
server(pages): do Post/Redirect/Get pattern when on_data_post is used (avoid double posting on refresh)
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
1838 |
956
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1839 def _on_data_post(self, dummy, request): |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1840 csrf_token = self.host.getSessionData(request, session_iface.ISATSession).csrf_token |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1841 try: |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1842 given_csrf = self.getPostedData(request, u'csrf_token') |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1843 except KeyError: |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1844 given_csrf = None |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1845 if given_csrf is None or given_csrf != csrf_token: |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1846 log.warning(_(u"invalid CSRF token, hack attempt? URL: {url}, IP: {ip}").format( |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1847 url=request.uri, |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1848 ip=request.getClientIP())) |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1849 self.pageError(request, C.HTTP_UNAUTHORIZED) |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1850 d = defer.maybeDeferred(self.on_data_post, self, request) |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1851 d.addCallback(self._on_data_post_redirect, request) |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1852 return d |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1853 |
931
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1854 def getPostedData(self, request, keys, multiple=False): |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1855 """get data from a POST request and decode it |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1856 |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1857 @param request(server.Request): request linked to the session |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1858 @param keys(unicode, iterable[unicode]): name of the value(s) to get |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1859 unicode to get one value |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1860 iterable to get more than one |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1861 @param multiple(bool): True if multiple values are possible/expected |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1862 if False, the first value is returned |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1863 @return (iterator[unicode], list[iterator[unicode], unicode, list[unicode]): values received for this(these) key(s) |
956
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1864 @raise KeyError: one specific key has been requested, and it is missing |
931
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1865 """ |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1866 if isinstance(keys, basestring): |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1867 keys = [keys] |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1868 get_first = True |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1869 else: |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1870 get_first = False |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1871 |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1872 ret = [] |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1873 for key in keys: |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1874 gen = (urllib.unquote(v).decode('utf-8') for v in request.args.get(key,[])) |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1875 if multiple: |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1876 ret.append(gen) |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1877 else: |
956
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1878 try: |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1879 ret.append(next(gen)) |
dabecab10faa
server (pages): impleted CSRF protection:
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
1880 except StopIteration: |
962 | 1881 raise KeyError(key) |
931
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1882 |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1883 return ret[0] if get_first else ret |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1884 |
959 | 1885 def getAllPostedData(self, request, except_=()): |
1886 """get all posted data | |
1887 | |
1888 @param request(server.Request): request linked to the session | |
1889 @param except_(iterable[unicode]): key of values to ignore | |
1890 csrf_token will always be ignored | |
1891 @return (dict[unicode, list[unicode]]): post values | |
1892 """ | |
1893 except_ = tuple(except_) + (u'csrf_token',) | |
1894 ret = {} | |
1895 for key, values in request.args.iteritems(): | |
1896 key = urllib.unquote(key).decode('utf-8') | |
1897 if key in except_: | |
1898 continue | |
1899 ret[key] = [urllib.unquote(v).decode('utf-8') for v in values] | |
1900 return ret | |
1901 | |
922
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1902 def getProfile(self, request): |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1903 """helper method to easily get current profile |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1904 |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1905 @return (unicode, None): current profile |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1906 None if no profile session is started |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1907 """ |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1908 sat_session = self.host.getSessionData(request, session_iface.ISATSession) |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1909 return sat_session.profile |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1910 |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1911 def getRData(self, request): |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1912 """helper method to get request data dict |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1913 |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1914 this dictionnary if for the request only, it is not saved in session |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1915 It is mainly used to pass data between pages/methods called during request workflow |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1916 @return (dict): request data |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1917 """ |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1918 try: |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1919 return request.data |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1920 except AttributeError: |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1921 request.data = {} |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1922 return request.data |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1923 |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1924 def _checkAccess(self, data, request): |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1925 """Check access according to self.access |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1926 |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1927 if access is not granted, show a HTTP_UNAUTHORIZED pageError and stop request, |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1928 else return data (so it can be inserted in deferred chain |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1929 """ |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1930 if self.access == C.PAGES_ACCESS_PUBLIC: |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1931 pass |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1932 elif self.access == C.PAGES_ACCESS_PROFILE: |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1933 profile = self.getProfile(request) |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1934 if not profile: |
962 | 1935 # no session started |
1936 if not self.host.options["allow_registration"]: | |
1937 # registration not allowed, access is not granted | |
1938 self.pageError(request, C.HTTP_UNAUTHORIZED) | |
1939 else: | |
1940 # registration allowed, we redirect to login page | |
1941 login_url = self.getPageRedirectURL(request) | |
1942 self.HTTPRedirect(request, login_url) | |
922
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1943 |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1944 return data |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1945 |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1946 def renderPage(self, request, skip_parse_url=False): |
937
00236973e138
server (pages): an HTTP internal error is raised if an error is uncatched during page workflow
Goffi <goffi@goffi.org>
parents:
936
diff
changeset
|
1947 """Main method to handle the workflow of a LiberviaPage""" |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1948 # template_data are the variables passed to template |
917 | 1949 if not hasattr(request, 'template_data'): |
957
67bf14c91d5c
server (pages): added a confirm flag on successful post:
Goffi <goffi@goffi.org>
parents:
956
diff
changeset
|
1950 session_data = self.host.getSessionData(request, session_iface.ISATSession) |
67bf14c91d5c
server (pages): added a confirm flag on successful post:
Goffi <goffi@goffi.org>
parents:
956
diff
changeset
|
1951 csrf_token = session_data.csrf_token |
67bf14c91d5c
server (pages): added a confirm flag on successful post:
Goffi <goffi@goffi.org>
parents:
956
diff
changeset
|
1952 request.template_data = {u'csrf_token': csrf_token} |
922
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1953 |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1954 # XXX: here is the code which need to be executed once |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1955 # at the beginning of the request hanling |
917 | 1956 if request.postpath and not request.postpath[-1]: |
1957 # we don't differenciate URLs finishing with '/' or not | |
1958 del request.postpath[-1] | |
922
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1959 |
917 | 1960 d = defer.Deferred() |
922
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1961 d.addCallback(self._checkAccess, request) |
16d1084d1371
server (pages): added "None" access (page is not rendered at all) and some HTTP code constants + helper methods to get session data
Goffi <goffi@goffi.org>
parents:
921
diff
changeset
|
1962 |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1963 if self.redirect is not None: |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1964 self.pageRedirect(self.redirect, request, skip_parse_url=False) |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1965 |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1966 if self.parse_url is not None and not skip_parse_url: |
917 | 1967 d.addCallback(self.parse_url, request) |
1968 | |
1969 d.addCallback(self._subpagesHandler, request) | |
1970 | |
931
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1971 if request.method not in (C.HTTP_METHOD_GET, C.HTTP_METHOD_POST): |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1972 # only HTTP GET and POST are handled so far |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1973 d.addCallback(lambda dummy: self.pageError(request, C.HTTP_BAD_REQUEST)) |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1974 |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1975 if request.method == C.HTTP_METHOD_POST: |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1976 if self.on_data_post is None: |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1977 # if we don't have on_data_post, the page was not expecting POST |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1978 # so we return an error |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1979 d.addCallback(lambda dummy: self.pageError(request, C.HTTP_BAD_REQUEST)) |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1980 else: |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1981 d.addCallback(self._on_data_post, request) |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1982 # by default, POST follow normal behaviour after on_data_post is called |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1983 # this can be changed by a redirection or other method call in on_data_post |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
1984 |
917 | 1985 if self.prepare_render: |
1986 d.addCallback(self._prepare_render, request) | |
1987 | |
1988 if self.template: | |
962 | 1989 d.addCallback(self._render_template, request) |
917 | 1990 elif self.render_method: |
1991 d.addCallback(self._render_method, request) | |
1992 | |
1993 d.addCallback(self.writeData, request) | |
1994 d.addErrback(self._renderEb, request) | |
937
00236973e138
server (pages): an HTTP internal error is raised if an error is uncatched during page workflow
Goffi <goffi@goffi.org>
parents:
936
diff
changeset
|
1995 d.addErrback(self._internalError, request) |
917 | 1996 d.callback(self) |
1997 return server.NOT_DONE_YET | |
1998 | |
923
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
1999 def render_GET(self, request): |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
2000 return self.renderPage(request) |
edb322c87ea4
server (pages): pages now handle redirection, check self.pageRedirect docstring for details
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
2001 |
931
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
2002 def render_POST(self, request): |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
2003 return self.renderPage(request) |
8a393ae90f8c
server (pages): post requests are now handled:
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
2004 |
917 | 2005 |
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
|
2006 class Libervia(service.Service): |
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
|
2007 |
810 | 2008 def __init__(self, options): |
2009 self.options = options | |
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
|
2010 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
|
2011 self.waiting_profiles = WaitingRequests() # FIXME: should be removed |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
2012 |
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
|
2013 if self.options['base_url_ext']: |
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
|
2014 self.base_url_ext = self.options.pop('base_url_ext') |
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
|
2015 if self.base_url_ext[-1] != '/': |
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
|
2016 self.base_url_ext += '/' |
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
|
2017 self.base_url_ext_data = urlparse.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
|
2018 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
|
2019 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
|
2020 # 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
|
2021 # scheme = self.base_url_ext_data.scheme or 'https' |
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
|
2022 self.base_url_ext_data = urlparse.urlsplit('') |
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
|
2023 |
810 | 2024 if not self.options['port_https_ext']: |
2025 self.options['port_https_ext'] = self.options['port_https'] | |
2026 if self.options['data_dir'] == DATA_DIR_DEFAULT: | |
2027 coerceDataDir(self.options['data_dir']) # this is not done when using the default value | |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
2028 |
810 | 2029 self.html_dir = os.path.join(self.options['data_dir'], C.HTML_DIR) |
2030 self.themes_dir = os.path.join(self.options['data_dir'], C.THEMES_DIR) | |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
2031 |
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
|
2032 self._cleanup = [] |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
2033 |
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
|
2034 self.signal_handler = SignalHandler(self) |
451 | 2035 self.sessions = {} # key = session value = user |
2036 self.prof_connected = set() # Profiles connected | |
470
34ce41e014c4
server side: options managing improvments:
Goffi <goffi@goffi.org>
parents:
465
diff
changeset
|
2037 |
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
|
2038 ## bridge ## |
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
|
2039 try: |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2040 self.bridge = Bridge() |
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
|
2041 except BridgeExceptionNoService: |
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
|
2042 print(u"Can't connect to SàT backend, are you sure it's launched ?") |
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
|
2043 sys.exit(1) |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2044 self.bridge.bridgeConnect(callback=self._bridgeCb, errback=self._bridgeEb) |
553
8492c2bb463b
server_side: enable HTTP gzip compression
souliane <souliane@mailoo.org>
parents:
522
diff
changeset
|
2045 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2046 def backendReady(self, dummy): |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2047 self.root = root = LiberviaRootResource(self.options, self.html_dir) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2048 _register = Register(self) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2049 _upload_radiocol = UploadManagerRadioCol(self) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2050 _upload_avatar = UploadManagerAvatar(self) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2051 self.signal_handler.plugRegister(_register) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2052 self.bridge.register_signal("connected", self.signal_handler.connected) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2053 self.bridge.register_signal("disconnected", self.signal_handler.disconnected) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2054 #core |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2055 for signal_name in ['presenceUpdate', 'messageNew', 'subscribe', 'contactDeleted', |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2056 'newContact', 'entityDataUpdated', 'paramUpdate']: |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2057 self.bridge.register_signal(signal_name, self.signal_handler.getGenericCb(signal_name)) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2058 # XXX: actionNew is handled separately because the handler must manage security_limit |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2059 self.bridge.register_signal('actionNew', self.signal_handler.actionNewHandler) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2060 #plugins |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2061 for signal_name in ['psEvent', 'mucRoomJoined', 'tarotGameStarted', 'tarotGameNew', 'tarotGameChooseContrat', |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2062 'tarotGameShowCards', 'tarotGameInvalidCards', 'tarotGameCardsPlayed', 'tarotGameYourTurn', 'tarotGameScore', 'tarotGamePlayers', |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2063 'radiocolStarted', 'radiocolPreload', 'radiocolPlay', 'radiocolNoUpload', 'radiocolUploadOk', 'radiocolSongRejected', 'radiocolPlayers', |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2064 'mucRoomLeft', 'mucRoomUserChangedNick', 'chatStateReceived']: |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2065 self.bridge.register_signal(signal_name, self.signal_handler.getGenericCb(signal_name), "plugin") |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2066 self.media_dir = self.bridge.getConfig('', 'media_dir') |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2067 self.local_dir = self.bridge.getConfig('', 'local_dir') |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2068 self.cache_root_dir = os.path.join( |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2069 self.local_dir, |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2070 C.CACHE_DIR) |
858 | 2071 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2072 # JSON APIs |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2073 self.putChild('json_signal_api', self.signal_handler) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2074 self.putChild('json_api', MethodHandler(self)) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2075 self.putChild('register_api', _register) |
858 | 2076 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2077 # files upload |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2078 self.putChild('upload_radiocol', _upload_radiocol) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2079 self.putChild('upload_avatar', _upload_avatar) |
858 | 2080 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2081 # static pages |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2082 self.putChild('blog', MicroBlog(self)) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2083 self.putChild(C.THEMES_URL, ProtectedFile(self.themes_dir)) |
858 | 2084 |
917 | 2085 LiberviaPage.importPages(self) |
2086 | |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2087 # media dirs |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2088 # FIXME: get rid of dirname and "/" in C.XXX_DIR |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2089 self.putChild(os.path.dirname(C.MEDIA_DIR), ProtectedFile(self.media_dir)) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2090 self.cache_resource = web_resource.NoResource() |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2091 self.putChild(C.CACHE_DIR, self.cache_resource) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2092 |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2093 # special |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2094 self.putChild('radiocol', ProtectedFile(_upload_radiocol.getTmpDir(), defaultType="audio/ogg")) # FIXME: We cheat for PoC because we know we are on the same host, so we use directly upload dir |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2095 # pyjamas tests, redirected only for dev versions |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2096 if self.version[-1] == 'D': |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2097 self.putChild('test', web_util.Redirect('/libervia_test.html')) |
858 | 2098 |
2099 | |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2100 wrapped = web_resource.EncodingResourceWrapper(root, [server.GzipEncoderFactory()]) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2101 self.site = server.Site(wrapped) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2102 self.site.sessionFactory = LiberviaSession |
917 | 2103 self.renderer = template.Renderer(self) |
2104 self.putChild('templates', ProtectedFile(self.renderer.base_dir)) | |
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
|
2105 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2106 |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2107 def _bridgeCb(self): |
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
|
2108 self.bridge.getReady(lambda: self.initialised.callback(None), |
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
|
2109 lambda failure: self.initialised.errback(Exception(failure))) |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2110 self.initialised.addCallback(self.backendReady) |
694
82123705474b
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
692
diff
changeset
|
2111 self.initialised.addErrback(lambda failure: log.error(u"Init error: %s" % failure)) |
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
|
2112 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2113 def _bridgeEb(self, failure): |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2114 log.error(u"Can't connect to bridge: {}".format(failure)) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2115 |
682
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2116 @property |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2117 def version(self): |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2118 """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
|
2119 return C.APP_VERSION |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2120 |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2121 @property |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2122 def full_version(self): |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2123 """Return the full version of Libervia (with extra data when in development mode)""" |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2124 version = self.version |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2125 if version[-1] == 'D': |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2126 # 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
|
2127 try: |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2128 return self._version_cache |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2129 except AttributeError: |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2130 self._version_cache = u"{} ({})".format(version, utils.getRepositoryData(libervia)) |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2131 return self._version_cache |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2132 else: |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2133 return version |
e6bb64bd6b4d
server side: implemented methods to get SàT and Libervia versions
Goffi <goffi@goffi.org>
parents:
679
diff
changeset
|
2134 |
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
|
2135 def bridgeCall(self, method_name, *args, **kwargs): |
c3ae008f7a0f
server: move asyncBridgeCall to Libervia.bridgeCall, this way async bridge calls can be used easily everywhere.
Goffi <goffi@goffi.org>
parents:
931
diff
changeset
|
2136 """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
|
2137 |
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
|
2138 @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
|
2139 @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
|
2140 |
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
|
2141 """ |
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
|
2142 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
|
2143 |
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
|
2144 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
|
2145 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
|
2146 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
|
2147 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
|
2148 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
|
2149 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
|
2150 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
|
2151 |
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
|
2152 def _errback(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
|
2153 d.errback(failure.Failure(jsonrpclib.Fault(C.ERRNUM_BRIDGE_ERRBACK, result.classname))) |
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
|
2154 |
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
|
2155 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
|
2156 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
|
2157 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
|
2158 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
|
2159 |
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
|
2160 def _logged(self, profile, 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
|
2161 """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
|
2162 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2163 @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
|
2164 @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
|
2165 @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
|
2166 - 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
|
2167 - 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
|
2168 @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
|
2169 """ |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2170 register_with_ext_jid = self.waiting_profiles.getRegisterWithExtJid(profile) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2171 self.waiting_profiles.purgeRequest(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
|
2172 _session = request.getSession() |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2173 sat_session = session_iface.ISATSession(_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
|
2174 if sat_session.profile: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2175 log.error(_(u'/!\\ Session has already a profile, this should NEVER happen!')) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2176 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
|
2177 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2178 sat_session.profile = profile |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2179 self.prof_connected.add(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
|
2180 cache_dir = os.path.join(self.cache_root_dir, regex.pathEscape(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
|
2181 # FIXME: would be better to have a global /cache URL which redirect to profile's cache directory, without uuid |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2182 self.cache_resource.putChild(sat_session.uuid, ProtectedFile(cache_dir)) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2183 log.debug(_(u"profile cache resource added from {uuid} to {path}").format(uuid=sat_session.uuid, path=cache_dir)) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2184 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2185 def onExpire(): |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2186 log.info(u"Session expired (profile={profile})".format(profile=profile,)) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2187 self.cache_resource.delEntity(sat_session.uuid) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2188 log.debug(_(u"profile cache resource {uuid} deleted").format(uuid = sat_session.uuid)) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2189 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
|
2190 #We purge the queue |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2191 del self.signal_handler.queue[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
|
2192 except KeyError: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2193 pass |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2194 #and now we disconnect the 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
|
2195 self.bridge.disconnect(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
|
2196 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2197 _session.notifyOnExpire(onExpire) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2198 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2199 return C.PROFILE_LOGGED_EXT_JID if register_with_ext_jid else 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
|
2200 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2201 @defer.inlineCallbacks |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2202 def connect(self, request, login, password): |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2203 """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
|
2204 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2205 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
|
2206 @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
|
2207 @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
|
2208 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
|
2209 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
|
2210 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
|
2211 @param password(unicode): user 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
|
2212 @return (unicode, None): C.SESSION_ACTIVE: if session was aleady active else self._logged value |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2213 @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
|
2214 @raise exceptions.ProfileUnknownError: this login doesn't exist |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2215 @raise exceptions.PermissionError: a login is not accepted (e.g. empty password not allowed) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2216 @raise exceptions.NotReady: a profile connection is already waiting |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2217 @raise exceptions.TimeoutError: didn't received and answer from Bridge |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2218 @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
|
2219 @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
|
2220 @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
|
2221 """ |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2222 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2223 # XXX: all security checks must be done here, even if present in javascript |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2224 if login.startswith('@'): |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2225 raise failure.Failure(exceptions.DataError('No profile_key allowed')) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2226 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2227 if '@' in 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
|
2228 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
|
2229 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
|
2230 except (RuntimeError, jid.InvalidFormat, AttributeError): |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2231 raise failure.Failure(exceptions.DataError('No profile_key allowed')) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2232 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2233 # FIXME: should it be cached? |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2234 new_account_domain = yield self.bridgeCall("getNewAccountDomain") |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2235 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2236 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
|
2237 # 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
|
2238 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
|
2239 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
|
2240 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
|
2241 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
|
2242 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2243 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
|
2244 profile = yield self.bridgeCall("profileNameGet", login) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2245 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
|
2246 # FIXME: find a better way to handle bridge errors |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2247 if login_jid is not None and login_jid.user: # try to create a new sat profile using the XMPP credentials |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2248 if not self.options["allow_registration"]: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2249 log.warning(u"Trying to register JID account while registration is not allowed") |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2250 raise failure.Failure(exceptions.DataError(u"JID login while registration is not allowed")) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2251 profile = login # FIXME: what if there is a resource? |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2252 connect_method = "asyncConnectWithXMPPCredentials" |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2253 register_with_ext_jid = True |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2254 else: # non existing username |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2255 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
|
2256 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
|
2257 if profile != login or (not password and profile not in self.options['empty_password_allowed_warning_dangerous_list']): |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2258 # 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
|
2259 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
|
2260 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
|
2261 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2262 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
|
2263 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2264 # we check if there is not already an active session |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2265 sat_session = session_iface.ISATSession(request.getSession()) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2266 if sat_session.profile: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2267 # yes, there is |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2268 if sat_session.profile != profile: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2269 # it's a different profile, we need to disconnect it |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2270 log.warning(_(u"{new_profile} requested login, but {old_profile} was already connected, disconnecting {old_profile}").format( |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2271 old_profile = sat_session.profile, |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2272 new_profile = profile)) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2273 self.purgeSession(request) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2274 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2275 if self.waiting_profiles.getRequest(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
|
2276 # FIXME: check if and when this can happen |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2277 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
|
2278 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2279 self.waiting_profiles.setRequest(request, profile, register_with_ext_jid) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2280 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
|
2281 connected = yield self.bridgeCall(connect_method, profile, password) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2282 except Exception as failure_: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2283 fault = failure_.faultString |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2284 self.waiting_profiles.purgeRequest(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
|
2285 if fault in ('PasswordError', '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
|
2286 log.info(u"Profile {profile} doesn't exist or the submitted password is wrong".format(profile=profile)) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2287 raise failure.Failure(ValueError(C.PROFILE_AUTH_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
|
2288 elif fault == 'SASLAuthError': |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2289 log.info(u"The XMPP password of profile {profile} is wrong".format(profile=profile)) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2290 raise failure.Failure(ValueError(C.XMPP_AUTH_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
|
2291 elif fault == 'NoReply': |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2292 log.info(_("Did not receive a reply (the timeout expired or the connection is broken)")) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2293 raise exceptions.TimeOutError |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2294 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
|
2295 log.error(u'Unmanaged fault string "{fault}" in errback for the connection of profile {profile}'.format( |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2296 fault=fault, profile=profile)) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2297 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
|
2298 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2299 if connected: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2300 # profile is already connected in backend |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2301 # do we have a corresponding session in Libervia? |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2302 sat_session = session_iface.ISATSession(request.getSession()) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2303 if sat_session.profile: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2304 # yes, session is active |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2305 if sat_session.profile != profile: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2306 # 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
|
2307 # so this line should never be reached |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2308 log.error(_(u'session profile [{session_profile}] differs from login profile [{profile}], this should not happen!').format( |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2309 session_profile = sat_session.profile, |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2310 profile = profile |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2311 )) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2312 raise exceptions.InternalError("profile mismatch") |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2313 defer.returnValue(C.SESSION_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
|
2314 log.info(_(u"profile {profile} was already connected in backend".format(profile=profile))) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2315 # no, we have to create it |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2316 defer.returnValue(self._logged(profile, 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
|
2317 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2318 def registerNewAccount(self, request, login, password, email): |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2319 """Create a new account, or return error |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2320 @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
|
2321 @param login(unicode): new account requested login |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2322 @param email(unicode): new account email |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2323 @param password(unicode): new account password |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2324 @return(unicode): a constant indicating the state: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2325 - 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
|
2326 - 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
|
2327 - 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
|
2328 - 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
|
2329 - 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
|
2330 @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
|
2331 """ |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2332 if not self.options["allow_registration"]: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2333 log.warning(_(u"Registration received while it is not allowed, hack attempt?")) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2334 raise failure.Failure(exceptions.PermissionError(u"Registration is not allowed on this server")) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2335 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2336 if not re.match(C.REG_LOGIN_RE, login) or \ |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2337 not re.match(C.REG_EMAIL_RE, email, re.IGNORECASE) or \ |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2338 len(password) < C.PASSWORD_MIN_LENGTH: |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2339 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
|
2340 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2341 def registered(result): |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2342 return C.REGISTRATION_SUCCEED |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2343 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2344 def registeringError(failure): |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2345 status = failure.value.faultString |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2346 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
|
2347 return C.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
|
2348 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
|
2349 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
|
2350 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
|
2351 log.error(_(u'Unknown registering error status: {status }').format( |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2352 status = status)) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2353 return status |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2354 |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2355 d = self.bridgeCall("registerSatAccount", email, password, login) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2356 d.addCallback(registered) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2357 d.addErrback(registeringError) |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2358 return d |
22fe06569b1a
server: moved logging worflow in separated method, so it can be used by Libervia Pages
Goffi <goffi@goffi.org>
parents:
959
diff
changeset
|
2359 |
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
|
2360 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
|
2361 """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
|
2362 |
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
|
2363 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
|
2364 @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
|
2365 @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
|
2366 @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
|
2367 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
|
2368 |
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
|
2369 def startService(self): |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
2370 """Connect the profile for Libervia and start the HTTP(S) server(s)""" |
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
2371 def eb(e): |
694
82123705474b
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
692
diff
changeset
|
2372 log.error(_(u"Connection failed: %s") % e) |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
2373 self.stop() |
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
2374 |
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
|
2375 def initOk(dummy): |
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
|
2376 try: |
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
|
2377 connected = self.bridge.isConnected(C.SERVICE_PROFILE) |
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
|
2378 except Exception as e: |
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
|
2379 # we don't want the traceback |
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
|
2380 msg = [l for l in unicode(e).split('\n') if l][-1] |
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
|
2381 log.error(u"Can't check service profile ({profile}), are you sure it exists ?\n{error}".format( |
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
|
2382 profile=C.SERVICE_PROFILE, error=msg)) |
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
|
2383 self.stop() |
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
|
2384 return |
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
|
2385 if not connected: |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2386 self.bridge.connect(C.SERVICE_PROFILE, self.options['passphrase'], |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2387 {}, callback=self._startService, errback=eb) |
472
42c8e91af048
server side: fixed start sequence when SERVICE_PROFILE is already connected
Goffi <goffi@goffi.org>
parents:
471
diff
changeset
|
2388 else: |
42c8e91af048
server side: fixed start sequence when SERVICE_PROFILE is already connected
Goffi <goffi@goffi.org>
parents:
471
diff
changeset
|
2389 self._startService() |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
2390 |
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
|
2391 self.initialised.addCallback(initOk) |
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
|
2392 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2393 ## URLs ## |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
2394 |
914
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2395 def putChild(self, path, resource): |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2396 """Add a child to the root resource""" |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2397 # FIXME: check that no information is leaked (c.f. https://twistedmatrix.com/documents/current/web/howto/using-twistedweb.html#request-encoders) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2398 self.root.putChild(path, web_resource.EncodingResourceWrapper(resource, [server.GzipEncoderFactory()])) |
0c0551967bdf
server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents:
913
diff
changeset
|
2399 |
920
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2400 ## Sessions ## |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2401 |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2402 def purgeSession(self, request): |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2403 """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
|
2404 session = request.session |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2405 if session is not None: |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2406 log.debug(_(u"session purge")) |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2407 session.expire() |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2408 # 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
|
2409 # session during request handling |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2410 request._secureSession = request._insecureSession = None |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2411 |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2412 def getSessionData(self, request, *args): |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2413 """helper method to retrieve session data |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2414 |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2415 @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
|
2416 @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
|
2417 @return (iterator(data)): requested session data |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2418 """ |
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2419 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
|
2420 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
|
2421 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
|
2422 else: |
94f88277c2e7
libervia (pages): getSessionData return one session if used with one argument, else an iterator
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
2423 return (iface(session) for iface in args) |
920
8cea8bf41b03
server: new purgeSession and getSessionData helper methods
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
2424 |
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
|
2425 ## TLS related methods ## |
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
|
2426 |
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
|
2427 def _TLSOptionsCheck(self): |
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
|
2428 """Check options coherence if TLS is activated, and update missing values |
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
|
2429 |
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
|
2430 Must be called only if TLS is activated |
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
|
2431 """ |
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
|
2432 if not self.options['tls_certificate']: |
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
|
2433 log.error(u"a TLS certificate is needed to activate HTTPS connection") |
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
|
2434 self.quit(1) |
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
|
2435 if not self.options['tls_private_key']: |
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
|
2436 self.options['tls_private_key'] = self.options['tls_certificate'] |
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
|
2437 |
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
|
2438 |
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
|
2439 if not self.options['tls_private_key']: |
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
|
2440 self.options['tls_private_key'] = self.options['tls_certificate'] |
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
|
2441 |
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
|
2442 def _loadCertificates(self, f): |
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
|
2443 """Read a .pem file with a list of certificates |
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
|
2444 |
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
|
2445 @param f (file): file obj (opened .pem file) |
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
|
2446 @return (list[OpenSSL.crypto.X509]): list of certificates |
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
|
2447 @raise OpenSSL.crypto.Error: error while parsing the file |
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
|
2448 """ |
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
|
2449 # XXX: didn't found any method to load a .pem file with several certificates |
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
|
2450 # so the certificates split is done here |
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
|
2451 certificates = [] |
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
|
2452 buf = [] |
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
|
2453 while True: |
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
|
2454 line = f.readline() |
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
|
2455 buf.append(line) |
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
|
2456 if '-----END CERTIFICATE-----' in line: |
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
|
2457 certificates.append(OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, ''.join(buf))) |
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
|
2458 buf=[] |
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
|
2459 elif not line: |
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
|
2460 log.debug(u"{} certificate(s) found".format(len(certificates))) |
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
|
2461 return certificates |
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
|
2462 |
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
|
2463 def _loadPKey(self, f): |
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
|
2464 """Read a private key from a .pem file |
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
|
2465 |
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
|
2466 @param f (file): file obj (opened .pem file) |
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
|
2467 @return (list[OpenSSL.crypto.PKey]): private key object |
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
|
2468 @raise OpenSSL.crypto.Error: error while parsing the file |
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
|
2469 """ |
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
|
2470 return OpenSSL.crypto.load_privatekey(OpenSSL.crypto.FILETYPE_PEM, f.read()) |
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
|
2471 |
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
|
2472 def _loadCertificate(self, f): |
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
|
2473 """Read a public certificate from a .pem file |
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
|
2474 |
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
|
2475 @param f (file): file obj (opened .pem file) |
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
|
2476 @return (list[OpenSSL.crypto.X509]): public certificate |
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
|
2477 @raise OpenSSL.crypto.Error: error while parsing the file |
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
|
2478 """ |
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
|
2479 return OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, f.read()) |
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
|
2480 |
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
|
2481 def _getTLSContextFactory(self): |
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
|
2482 """Load TLS certificate and build the context factory needed for listenSSL""" |
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
|
2483 if ssl is None: |
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
|
2484 raise ImportError(u"Python module pyOpenSSL is not installed!") |
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
|
2485 |
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
|
2486 cert_options = {} |
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
|
2487 |
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
|
2488 for name, option, method in [('privateKey', 'tls_private_key', self._loadPKey), |
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
|
2489 ('certificate', 'tls_certificate', self._loadCertificate), |
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
|
2490 ('extraCertChain', 'tls_chain', self._loadCertificates)]: |
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
|
2491 path = self.options[option] |
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
|
2492 if not path: |
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
|
2493 assert option=='tls_chain' |
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
|
2494 continue |
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
|
2495 log.debug(u"loading {option} from {path}".format(option=option, path=path)) |
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
|
2496 try: |
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
|
2497 with open(path) as f: |
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
|
2498 cert_options[name] = method(f) |
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
|
2499 except IOError as e: |
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
|
2500 log.error(u"Error while reading file {path} for option {option}: {error}".format(path=path, option=option, error=e)) |
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
|
2501 self.quit(2) |
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
|
2502 except OpenSSL.crypto.Error: |
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
|
2503 log.error(u"Error while parsing file {path} for option {option}, are you sure it is a valid .pem file?".format(path=path, option=option)) |
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
|
2504 if option=='tls_private_key' and self.options['tls_certificate'] == path: |
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
|
2505 log.error(u"You are using the same file for private key and public certificate, make sure that both a in {path} or use --tls_private_key option".format(path=path)) |
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
|
2506 self.quit(2) |
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
|
2507 |
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
|
2508 return ssl.CertificateOptions(**cert_options) |
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
|
2509 |
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
|
2510 ## 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
|
2511 |
472
42c8e91af048
server side: fixed start sequence when SERVICE_PROFILE is already connected
Goffi <goffi@goffi.org>
parents:
471
diff
changeset
|
2512 def _startService(self, dummy=None): |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
448
diff
changeset
|
2513 """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
|
2514 |
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
|
2515 @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
|
2516 @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
|
2517 @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
|
2518 """ |
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
|
2519 # now that we have service profile connected, we add resource for its cache |
67a59552f3e3
server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents:
937
diff
changeset
|
2520 service_path = regex.pathEscape(C.SERVICE_PROFILE) |
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
|
2521 cache_dir = os.path.join(self.cache_root_dir, service_path) |
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
|
2522 self.cache_resource.putChild(service_path, ProtectedFile(cache_dir)) |
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
|
2523 self.service_cache_url = os.path.join(C.CACHE_DIR, service_path) |
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
|
2524 |
810 | 2525 if self.options['connection_type'] in ('https', 'both'): |
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
|
2526 self._TLSOptionsCheck() |
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
|
2527 context_factory = self._getTLSContextFactory() |
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
|
2528 reactor.listenSSL(self.options['port_https'], self.site, context_factory) |
810 | 2529 if self.options['connection_type'] in ('http', 'both'): |
2530 if self.options['connection_type'] == 'both' and self.options['redirect_to_https']: | |
2531 reactor.listenTCP(self.options['port'], server.Site(RedirectToHTTPS(self.options['port'], self.options['port_https_ext']))) | |
446
c406e46fe9c0
server_side: update the connection mechanism to handle profile passwords
souliane <souliane@mailoo.org>
parents:
445
diff
changeset
|
2532 else: |
810 | 2533 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
|
2534 |
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
|
2535 def stopService(self): |
473
d1565906f228
server_side: fixed some forgotten print statement
Goffi <goffi@goffi.org>
parents:
472
diff
changeset
|
2536 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
|
2537 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
|
2538 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
|
2539 try: |
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
|
2540 self.bridge.disconnect(C.SERVICE_PROFILE) |
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
|
2541 except Exception: |
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
|
2542 log.warning(u"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
|
2543 |
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
|
2544 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
|
2545 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
|
2546 |
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
|
2547 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
|
2548 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
|
2549 |
812
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
2550 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
|
2551 """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
|
2552 |
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
2553 @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
|
2554 """ |
fd6965c16e7e
server: added "quit" method to exit with an exit code when reactor is running
Goffi <goffi@goffi.org>
parents:
810
diff
changeset
|
2555 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
|
2556 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
|
2557 |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
2558 |
858 | 2559 class RedirectToHTTPS(web_resource.Resource): |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
2560 |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
2561 def __init__(self, old_port, new_port): |
858 | 2562 web_resource.Resource.__init__(self) |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
2563 self.isLeaf = True |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
2564 self.old_port = old_port |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
2565 self.new_port = new_port |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
2566 |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
2567 def render(self, request): |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
2568 netloc = request.URLPath().netloc.replace(':%s' % self.old_port, ':%s' % self.new_port) |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
2569 url = "https://" + netloc + request.uri |
858 | 2570 return web_util.redirectTo(url, request) |
415
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
2571 |
fadbba1d793f
server_side: added support for SSL and related parameters:
souliane <souliane@mailoo.org>
parents:
413
diff
changeset
|
2572 |
919
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
2573 registerAdapter(session_iface.SATSession, server.Session, session_iface.ISATSession) |
7b267496da1d
server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
917
diff
changeset
|
2574 registerAdapter(session_iface.SATGuestSession, server.Session, session_iface.ISATGuestSession) |