annotate libervia.tac @ 215:e830a0c60d32

server side: added the security_limit to setParam - in addition to the check which is done by the core, libervia checks if the param to be modified was really part of the XML that has been returned by getParams with security_limit = 0.
author souliane <souliane@mailoo.org>
date Sat, 07 Sep 2013 02:07:07 +0200
parents 7b26be266ab1
children 4e6467efd6bf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
3
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
4 """
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
5 Libervia: a Salut à Toi frontend
165
9763dec220ed dates update
Goffi <goffi@goffi.org>
parents: 164
diff changeset
6 Copyright (C) 2011, 2012, 2013 Jérôme Poisson <goffi@goffi.org>
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
7
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
8 This program is free software: you can redistribute it and/or modify
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
9 it under the terms of the GNU Affero General Public License as published by
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
10 the Free Software Foundation, either version 3 of the License, or
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
11 (at your option) any later version.
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
12
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
13 This program is distributed in the hope that it will be useful,
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
16 GNU Affero General Public License for more details.
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
17
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
18 You should have received a copy of the GNU Affero General Public License
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
20 """
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
21
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
22 from twisted.application import internet, service
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
23 from twisted.internet import glib2reactor
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
24 glib2reactor.install()
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from twisted.internet import reactor, defer
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
26 from twisted.web import server
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
27 from twisted.web import error as weberror
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
28 from twisted.web.static import File
61
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
29 from twisted.web.resource import Resource, NoResource
172
631556a64850 server side: added root redirection to libervia.html
Goffi <goffi@goffi.org>
parents: 165
diff changeset
30 from twisted.web.util import Redirect
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
31 from twisted.python.components import registerAdapter
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents: 3
diff changeset
32 from twisted.words.protocols.jabber.jid import JID
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
33 from txjsonrpc.web import jsonrpc
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
34 from txjsonrpc import jsonrpclib
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
35 from sat_frontends.bridge.DBus import DBusBridgeFrontend,BridgeExceptionNoService
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
36 from logging import debug, info, warning, error
127
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
37 import re, glob
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
38 import os.path, sys
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
39 import tempfile, shutil, uuid
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents: 3
diff changeset
40 from server_side.blog import MicroBlog
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
41 from zope.interface import Interface, Attribute, implements
215
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
42 from xml.dom import minidom
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
43
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
44
151
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
45 #import time
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents: 3
diff changeset
46
154
82043fe5be4d server_side: set timeout to 300 s
Goffi <goffi@goffi.org>
parents: 153
diff changeset
47 TIMEOUT = 300 #Session's time out, after that the user will be disconnected
36
1d406077b49b Tarot Game: first draft
Goffi <goffi@goffi.org>
parents: 35
diff changeset
48 LIBERVIA_DIR = "output/"
77
975e6be24e11 media paths update
Goffi <goffi@goffi.org>
parents: 67
diff changeset
49 MEDIA_DIR = "media/"
110
dfc02690deb4 browser side: CSS: header, unibox, tabs + drag'n' drop reworked
Adrien Vigneron <adrienvigneron@mailoo.org>
parents: 107
diff changeset
50 AVATARS_DIR = "avatars/"
77
975e6be24e11 media paths update
Goffi <goffi@goffi.org>
parents: 67
diff changeset
51 CARDS_DIR = "games/cards/tarot"
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
52
215
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
53 # Security limit for Libervia (get/set params)
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
54 SECURITY_LIMIT = 0
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
55
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
56 class ISATSession(Interface):
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
57 profile = Attribute("Sat profile")
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
58 jid = Attribute("JID associated with the profile")
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
59
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
60 class SATSession(object):
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
61 implements(ISATSession)
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
62 def __init__(self, session):
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
63 self.profile = None
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
64 self.jid = None
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
65
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
66 class LiberviaSession(server.Session):
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
67 sessionTimeout = TIMEOUT
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
68
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
69 def __init__(self, *args, **kwargs):
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
70 self.__lock = False
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
71 server.Session.__init__(self, *args, **kwargs)
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
72
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
73 def lock(self):
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
74 """Prevent session from expiring"""
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
75 self.__lock = True
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
76 self._expireCall.reset(sys.maxint)
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
77
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
78 def unlock(self):
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
79 """Allow session to expire again, and touch it"""
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
80 self.__lock = False
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
81 self.touch()
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
82
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
83 def touch(self):
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
84 if not self.__lock:
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
85 server.Session.touch(self)
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
86
59
d0fa4e96a5e4 server side: 404 error is now sent instead of directory listing when requesting a directory
Goffi <goffi@goffi.org>
parents: 57
diff changeset
87 class ProtectedFile(File):
d0fa4e96a5e4 server side: 404 error is now sent instead of directory listing when requesting a directory
Goffi <goffi@goffi.org>
parents: 57
diff changeset
88 """A File class which doens't show directory listing"""
d0fa4e96a5e4 server side: 404 error is now sent instead of directory listing when requesting a directory
Goffi <goffi@goffi.org>
parents: 57
diff changeset
89
d0fa4e96a5e4 server side: 404 error is now sent instead of directory listing when requesting a directory
Goffi <goffi@goffi.org>
parents: 57
diff changeset
90 def directoryListing(self):
d0fa4e96a5e4 server side: 404 error is now sent instead of directory listing when requesting a directory
Goffi <goffi@goffi.org>
parents: 57
diff changeset
91 return NoResource()
d0fa4e96a5e4 server side: 404 error is now sent instead of directory listing when requesting a directory
Goffi <goffi@goffi.org>
parents: 57
diff changeset
92
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
93 class SATActionIDHandler(object):
140
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
94 """Manage SàT action action_id lifecycle"""
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
95 ID_LIFETIME = 30 #after this time (in seconds), action_id will be suppressed and action result will be ignored
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
96
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
97 def __init__(self):
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
98 self.waiting_ids = {}
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
99
140
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
100 def waitForId(self, callback, action_id, profile, *args, **kwargs):
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
101 """Wait for an action result
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
102 @param callback: method to call when action gave a result back
140
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
103 @param action_id: action_id to wait for
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
104 @param profile: %(doc_profile)s
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
105 @param *args: additional argument to pass to callback
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
106 @param **kwargs: idem"""
140
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
107 action_tuple = (action_id, profile)
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
108 self.waiting_ids[action_tuple] = (callback, args, kwargs)
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
109 reactor.callLater(self.ID_LIFETIME, self.purgeID, action_tuple)
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
110
140
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
111 def purgeID(self, action_tuple):
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
112 """Called when an action_id has not be handled in time"""
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
113 if action_tuple in self.waiting_ids:
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
114 warning ("action of action_id %s [%s] has not been managed, action_id is now ignored" % action_tuple)
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
115 del self.waiting_ids[action_tuple]
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
116
140
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
117 def actionResultCb(self, answer_type, action_id, data, profile):
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
118 """Manage the actionResult signal"""
140
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
119 action_tuple = (action_id, profile)
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
120 if action_tuple in self.waiting_ids:
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
121 callback, args, kwargs = self.waiting_ids[action_tuple]
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
122 del self.waiting_ids[action_tuple]
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
123 callback(answer_type, action_id, data, *args, **kwargs)
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
124
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
125 class MethodHandler(jsonrpc.JSONRPC):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
126
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
127 def __init__(self, sat_host):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
128 jsonrpc.JSONRPC.__init__(self)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
129 self.sat_host=sat_host
215
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
130 self.authorized_params = None
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
131
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
132 def render(self, request):
1
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
133 self.session = request.getSession()
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
134 profile = ISATSession(self.session).profile
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
135 if not profile:
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
136 #user is not identified, we return a jsonrpc fault
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
137 parsed = jsonrpclib.loads(request.content.read())
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
138 fault = jsonrpclib.Fault(0, "Not allowed") #FIXME: define some standard error codes for libervia
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
139 return jsonrpc.JSONRPC._cbRender(self, fault, request, parsed.get('id'), parsed.get('jsonrpc'))
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
140 return jsonrpc.JSONRPC.render(self, request)
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 14
diff changeset
141
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 14
diff changeset
142 def jsonrpc_getProfileJid(self):
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 14
diff changeset
143 """Return the jid of the profile"""
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
144 sat_session = ISATSession(self.session)
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
145 profile = sat_session.profile
61
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
146 sat_session.jid = JID(self.sat_host.bridge.getParamA("JabberID", "Connection", profile_key=profile))
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
147 return sat_session.jid.full()
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
148
156
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
149 def jsonrpc_disconnect(self):
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
150 """Disconnect the profile"""
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
151 sat_session = ISATSession(self.session)
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
152 profile = sat_session.profile
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
153 self.sat_host.bridge.disconnect(profile)
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
154
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
155 def jsonrpc_getContacts(self):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
156 """Return all passed args."""
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
157 profile = ISATSession(self.session).profile
1
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
158 return self.sat_host.bridge.getContacts(profile)
20
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
159
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
160 def jsonrpc_addContact(self, entity, name, groups):
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
161 """Subscribe to contact presence, and add it to the given groups"""
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
162 profile = ISATSession(self.session).profile
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
163 self.sat_host.bridge.addContact(entity, profile)
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
164 self.sat_host.bridge.updateContact(entity, name, groups, profile)
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
165
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
166 def jsonrpc_delContact(self, entity):
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
167 """Remove contact from contacts list"""
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
168 profile = ISATSession(self.session).profile
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
169 self.sat_host.bridge.delContact(entity, profile)
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
170
57
e552a67b933d Contact update + add dedication in About dialog
Goffi <goffi@goffi.org>
parents: 55
diff changeset
171 def jsonrpc_updateContact(self, entity, name, groups):
e552a67b933d Contact update + add dedication in About dialog
Goffi <goffi@goffi.org>
parents: 55
diff changeset
172 """Update contact's roster item"""
e552a67b933d Contact update + add dedication in About dialog
Goffi <goffi@goffi.org>
parents: 55
diff changeset
173 profile = ISATSession(self.session).profile
e552a67b933d Contact update + add dedication in About dialog
Goffi <goffi@goffi.org>
parents: 55
diff changeset
174 self.sat_host.bridge.updateContact(entity, name, groups, profile)
e552a67b933d Contact update + add dedication in About dialog
Goffi <goffi@goffi.org>
parents: 55
diff changeset
175
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
176 def jsonrpc_subscription(self, sub_type, entity, name, groups):
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
177 """Confirm (or infirm) subscription,
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
178 and setup user roster in case of subscription"""
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
179 profile = ISATSession(self.session).profile
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
180 self.sat_host.bridge.subscription(sub_type, entity, profile)
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
181 if sub_type == 'subscribed':
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
182 self.sat_host.bridge.updateContact(entity, name, groups, profile)
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
183
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
184 def jsonrpc_getWaitingSub(self):
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
185 """Return list of room already joined by user"""
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
186 profile = ISATSession(self.session).profile
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
187 return self.sat_host.bridge.getWaitingSub(profile)
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
188
20
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
189 def jsonrpc_setStatus(self, status):
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
190 """Change the status"""
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
191 profile = ISATSession(self.session).profile
20
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
192 self.sat_host.bridge.setPresence('', '', 0, {'':status}, profile)
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
193
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 14
diff changeset
194
214
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
195 def jsonrpc_sendMessage(self, to_jid, msg, subject, _type, options={}):
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 14
diff changeset
196 """send message"""
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
197 profile = ISATSession(self.session).profile
214
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
198 return self.sat_host.bridge.sendMessage(to_jid, msg, subject, _type, options, profile)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
199
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
200 def jsonrpc_sendMblog(self, _type, dest, text):
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
201 """ Send microblog message
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
202 @param _type: one of "PUBLIC", "GROUP"
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
203 @param dest: destinees (list of groups, ignored for "PUBLIC")
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
204 @param text: microblog's text
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
205 """
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
206 profile = ISATSession(self.session).profile
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
207 if _type in ("PUBLIC", "GROUP") and text:
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
208 if _type == "PUBLIC":
14
9bf8ed012adc - Group microblog management, first draft
Goffi <goffi@goffi.org>
parents: 11
diff changeset
209 #This text if for the public microblog
133
4ad621df9e34 browser side: group blog is now used to send all microblogs
Goffi <goffi@goffi.org>
parents: 132
diff changeset
210 print "sending public blog"
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
211 return self.sat_host.bridge.sendGroupBlog("PUBLIC", [], text, {'allow_comments': 'True'}, profile)
14
9bf8ed012adc - Group microblog management, first draft
Goffi <goffi@goffi.org>
parents: 11
diff changeset
212 else:
133
4ad621df9e34 browser side: group blog is now used to send all microblogs
Goffi <goffi@goffi.org>
parents: 132
diff changeset
213 print "sending group blog"
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
214 return self.sat_host.bridge.sendGroupBlog("GROUP", [dest], text, {'allow_comments': 'True'}, profile)
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
215 else:
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
216 raise Exception("Invalid data")
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
217
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
218 def jsonrpc_sendMblogComment(self, node, text):
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
219 """ Send microblog message
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
220 @param node: url of the comments node
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
221 @param text: comment
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
222 """
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
223 profile = ISATSession(self.session).profile
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
224 if node and text:
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
225 return self.sat_host.bridge.sendGroupBlogComment(node, text, profile)
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
226 else:
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
227 raise Exception("Invalid data")
132
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
228
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
229 def jsonrpc_getLastMblogs(self, publisher_jid, max_item):
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
230 """Get last microblogs posted by a contact
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
231 @param publisher_jid: jid of the publisher
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
232 @param max_item: number of items to ask
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
233 @return list of microblog data (dict)"""
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
234 profile = ISATSession(self.session).profile
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
235 d = defer.Deferred()
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
236 self.sat_host.bridge.getLastGroupBlogs(publisher_jid, max_item, profile, callback=d.callback, errback=d.errback)
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
237 return d
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
238
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
239 def jsonrpc_getMassiveLastMblogs(self, publishers_type, publishers_list, max_item):
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
240 """Get lasts microblogs posted by several contacts at once
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
241 @param publishers_type: one of "ALL", "GROUP", "JID"
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
242 @param publishers_list: list of publishers type (empty list of all, list of groups or list of jids)
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
243 @param max_item: number of items to ask
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
244 @return: dictionary key=publisher's jid, value=list of microblog data (dict)"""
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
245 profile = ISATSession(self.session).profile
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
246 d = defer.Deferred()
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
247 self.sat_host.bridge.getMassiveLastGroupBlogs(publishers_type, publishers_list, max_item, profile, callback=d.callback, errback=d.errback)
135
ceef355156de server + browser side: groupblog subscription + fixed blog insertion order
Goffi <goffi@goffi.org>
parents: 133
diff changeset
248 self.sat_host.bridge.massiveSubscribeGroupBlogs(publishers_type, publishers_list, profile)
132
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
249 return d
14
9bf8ed012adc - Group microblog management, first draft
Goffi <goffi@goffi.org>
parents: 11
diff changeset
250
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
251 def jsonrpc_getMblogComments(self, service, node):
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
252 """Get all comments of given node
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
253 @param service: jid of the service hosting the node
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
254 @param node: comments node
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
255 """
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
256 profile = ISATSession(self.session).profile
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
257 d = defer.Deferred()
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
258 self.sat_host.bridge.getGroupBlogComments(service, node, profile, callback=d.callback, errback=d.errback)
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
259 return d
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
260
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
261
20
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
262 def jsonrpc_getPresenceStatus(self):
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
263 """Get Presence information for connected contacts"""
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
264 profile = ISATSession(self.session).profile
20
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
265 return self.sat_host.bridge.getPresenceStatus(profile)
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
266
123
5cb852d9757e use of async history
Goffi <goffi@goffi.org>
parents: 121
diff changeset
267 def jsonrpc_getHistory(self, from_jid, to_jid, size, between):
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 14
diff changeset
268 """Return history for the from_jid/to_jid couple"""
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
269 sat_session = ISATSession(self.session)
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
270 profile = sat_session.profile
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
271 sat_jid = sat_session.jid
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
272 if not sat_jid:
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 14
diff changeset
273 error("No jid saved for this profile")
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 14
diff changeset
274 return {}
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
275 if JID(from_jid).userhost() != sat_jid.userhost() and JID(to_jid).userhost() != sat_jid.userhost():
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 14
diff changeset
276 error("Trying to get history from a different jid, maybe a hack attempt ?")
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 14
diff changeset
277 return {}
123
5cb852d9757e use of async history
Goffi <goffi@goffi.org>
parents: 121
diff changeset
278 d = defer.Deferred()
140
09a512d9a0c0 server side: fixed getHistory call and action result management
Goffi <goffi@goffi.org>
parents: 137
diff changeset
279 self.sat_host.bridge.getHistory(from_jid, to_jid, size, between, profile, callback=d.callback, errback=d.errback)
123
5cb852d9757e use of async history
Goffi <goffi@goffi.org>
parents: 121
diff changeset
280 def show(result_dbus):
5cb852d9757e use of async history
Goffi <goffi@goffi.org>
parents: 121
diff changeset
281 result = []
5cb852d9757e use of async history
Goffi <goffi@goffi.org>
parents: 121
diff changeset
282 for line in result_dbus:
5cb852d9757e use of async history
Goffi <goffi@goffi.org>
parents: 121
diff changeset
283 #XXX: we have to do this stupid thing because Python D-Bus use its own types instead of standard types
5cb852d9757e use of async history
Goffi <goffi@goffi.org>
parents: 121
diff changeset
284 # and txJsonRPC doesn't accept D-Bus types, resulting in a empty query
137
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
285 timestamp, from_jid, to_jid, message, mess_type = line
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
286 result.append((float(timestamp), unicode(from_jid), unicode(to_jid), unicode(message), unicode(mess_type)))
123
5cb852d9757e use of async history
Goffi <goffi@goffi.org>
parents: 121
diff changeset
287 return result
5cb852d9757e use of async history
Goffi <goffi@goffi.org>
parents: 121
diff changeset
288 d.addCallback(show)
5cb852d9757e use of async history
Goffi <goffi@goffi.org>
parents: 121
diff changeset
289 return d
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 14
diff changeset
290
50
72c51a4839cc MUC group joining
Goffi <goffi@goffi.org>
parents: 46
diff changeset
291 def jsonrpc_joinMUC(self, room_jid, nick):
72c51a4839cc MUC group joining
Goffi <goffi@goffi.org>
parents: 46
diff changeset
292 """Join a Multi-User Chat room"""
72c51a4839cc MUC group joining
Goffi <goffi@goffi.org>
parents: 46
diff changeset
293 profile = ISATSession(self.session).profile
72c51a4839cc MUC group joining
Goffi <goffi@goffi.org>
parents: 46
diff changeset
294 try:
72c51a4839cc MUC group joining
Goffi <goffi@goffi.org>
parents: 46
diff changeset
295 room_jid = JID(room_jid)
72c51a4839cc MUC group joining
Goffi <goffi@goffi.org>
parents: 46
diff changeset
296 except:
72c51a4839cc MUC group joining
Goffi <goffi@goffi.org>
parents: 46
diff changeset
297 warning('Invalid room jid')
72c51a4839cc MUC group joining
Goffi <goffi@goffi.org>
parents: 46
diff changeset
298 return
125
f9d63624699f radio collective integration, first draft
Goffi <goffi@goffi.org>
parents: 124
diff changeset
299 self.sat_host.bridge.joinMUC(room_jid.userhost(), nick, {}, profile)
50
72c51a4839cc MUC group joining
Goffi <goffi@goffi.org>
parents: 46
diff changeset
300
179
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 172
diff changeset
301 def jsonrpc_mucLeave(self, room_jid):
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 172
diff changeset
302 """Quit a Multi-User Chat room"""
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 172
diff changeset
303 profile = ISATSession(self.session).profile
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 172
diff changeset
304 try:
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 172
diff changeset
305 room_jid = JID(room_jid)
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 172
diff changeset
306 except:
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 172
diff changeset
307 warning('Invalid room jid')
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 172
diff changeset
308 return
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 172
diff changeset
309 self.sat_host.bridge.mucLeave(room_jid.userhost(), profile)
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 172
diff changeset
310
121
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
311 def jsonrpc_getRoomsJoined(self):
30
7684e3ceb12d server_side: added getRoomJoined method
Goffi <goffi@goffi.org>
parents: 24
diff changeset
312 """Return list of room already joined by user"""
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
313 profile = ISATSession(self.session).profile
121
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
314 return self.sat_host.bridge.getRoomsJoined(profile)
30
7684e3ceb12d server_side: added getRoomJoined method
Goffi <goffi@goffi.org>
parents: 24
diff changeset
315
24
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
316 def jsonrpc_launchTarotGame(self, other_players):
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
317 """Create a room, invite the other players and start a Tarot game"""
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
318 profile = ISATSession(self.session).profile
24
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
319 self.sat_host.bridge.tarotGameLaunch(other_players, profile)
11
331c093e4eb3 magicBox is now able to send global microblog
Goffi <goffi@goffi.org>
parents: 10
diff changeset
320
36
1d406077b49b Tarot Game: first draft
Goffi <goffi@goffi.org>
parents: 35
diff changeset
321 def jsonrpc_getTarotCardsPaths(self):
1d406077b49b Tarot Game: first draft
Goffi <goffi@goffi.org>
parents: 35
diff changeset
322 """Give the path of all the tarot cards"""
77
975e6be24e11 media paths update
Goffi <goffi@goffi.org>
parents: 67
diff changeset
323 _join = os.path.join
975e6be24e11 media paths update
Goffi <goffi@goffi.org>
parents: 67
diff changeset
324 _media_dir = _join(self.sat_host.media_dir,'')
975e6be24e11 media paths update
Goffi <goffi@goffi.org>
parents: 67
diff changeset
325 return map(lambda x: _join(MEDIA_DIR, x[len(_media_dir):]),glob.glob(_join(_media_dir,CARDS_DIR,'*_*.png')));
36
1d406077b49b Tarot Game: first draft
Goffi <goffi@goffi.org>
parents: 35
diff changeset
326
37
b306aa090438 Tarot game: game launching (first hand showed), and contract selection
Goffi <goffi@goffi.org>
parents: 36
diff changeset
327 def jsonrpc_tarotGameReady(self, player, referee):
b306aa090438 Tarot game: game launching (first hand showed), and contract selection
Goffi <goffi@goffi.org>
parents: 36
diff changeset
328 """Tell to the server that we are ready to start the game"""
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
329 profile = ISATSession(self.session).profile
153
ada146bac8fe server side: fixed tarotGameReady call
Goffi <goffi@goffi.org>
parents: 151
diff changeset
330 self.sat_host.bridge.tarotGameReady(player, referee, profile)
36
1d406077b49b Tarot Game: first draft
Goffi <goffi@goffi.org>
parents: 35
diff changeset
331
37
b306aa090438 Tarot game: game launching (first hand showed), and contract selection
Goffi <goffi@goffi.org>
parents: 36
diff changeset
332 def jsonrpc_tarotGameContratChoosed(self, player_nick, referee, contrat):
b306aa090438 Tarot game: game launching (first hand showed), and contract selection
Goffi <goffi@goffi.org>
parents: 36
diff changeset
333 """Tell to the server that we are ready to start the game"""
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
334 profile = ISATSession(self.session).profile
37
b306aa090438 Tarot game: game launching (first hand showed), and contract selection
Goffi <goffi@goffi.org>
parents: 36
diff changeset
335 self.sat_host.bridge.tarotGameContratChoosed(player_nick, referee, contrat, profile)
39
305e81c7a32c Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents: 38
diff changeset
336
305e81c7a32c Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents: 38
diff changeset
337 def jsonrpc_tarotGamePlayCards(self, player_nick, referee, cards):
128
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
338 """Tell to the server the cards we want to put on the table"""
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
339 profile = ISATSession(self.session).profile
39
305e81c7a32c Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents: 38
diff changeset
340 self.sat_host.bridge.tarotGamePlayCards(player_nick, referee, cards, profile)
36
1d406077b49b Tarot Game: first draft
Goffi <goffi@goffi.org>
parents: 35
diff changeset
341
125
f9d63624699f radio collective integration, first draft
Goffi <goffi@goffi.org>
parents: 124
diff changeset
342 def jsonrpc_launchRadioCollective(self, invited):
f9d63624699f radio collective integration, first draft
Goffi <goffi@goffi.org>
parents: 124
diff changeset
343 """Create a room, invite people, and start a radio collective"""
f9d63624699f radio collective integration, first draft
Goffi <goffi@goffi.org>
parents: 124
diff changeset
344 profile = ISATSession(self.session).profile
f9d63624699f radio collective integration, first draft
Goffi <goffi@goffi.org>
parents: 124
diff changeset
345 self.sat_host.bridge.radiocolLaunch(invited, profile)
f9d63624699f radio collective integration, first draft
Goffi <goffi@goffi.org>
parents: 124
diff changeset
346
137
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
347 def jsonrpc_getEntityData(self, jid, keys):
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
348 """Get cached data for an entit
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
349 @param jid: jid of contact from who we want data
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
350 @param keys: name of data we want (list)
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
351 @return: requested data"""
124
6d1f4a3da29b server: fixed buggy vcard cache retrieving, fixes avatar issue
Goffi <goffi@goffi.org>
parents: 123
diff changeset
352 profile = ISATSession(self.session).profile
137
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
353 return self.sat_host.bridge.getEntityData(jid, keys, profile)
110
dfc02690deb4 browser side: CSS: header, unibox, tabs + drag'n' drop reworked
Adrien Vigneron <adrienvigneron@mailoo.org>
parents: 107
diff changeset
354
204
890776a6fdb7 browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents: 202
diff changeset
355 def jsonrpc_getCard(self, jid):
890776a6fdb7 browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents: 202
diff changeset
356 """Get VCard for entiry
890776a6fdb7 browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents: 202
diff changeset
357 @param jid: jid of contact from who we want data
890776a6fdb7 browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents: 202
diff changeset
358 @return: id to retrieve the profile"""
890776a6fdb7 browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents: 202
diff changeset
359 profile = ISATSession(self.session).profile
890776a6fdb7 browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents: 202
diff changeset
360 return self.sat_host.bridge.getCard(jid, profile)
890776a6fdb7 browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents: 202
diff changeset
361
214
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
362 def jsonrpc_getParamsUI(self):
215
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
363 """Return the parameters XML for profile"""
214
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
364 profile = ISATSession(self.session).profile
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
365 d = defer.Deferred()
215
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
366
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
367 def setAuthorizedParams(d):
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
368 if self.authorized_params is None:
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
369 self.authorized_params = {}
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
370 for cat in minidom.parseString(d.encode('utf-8')).getElementsByTagName("category"):
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
371 params = cat.getElementsByTagName("param")
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
372 params_list = [param.getAttribute("name") for param in params]
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
373 self.authorized_params[cat.getAttribute("name")] = params_list
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
374 return d
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
375 d.addCallback(setAuthorizedParams)
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
376
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
377 from sat.tools.xml_tools import paramsXml2xmlUI
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
378 d.addCallback(lambda d: paramsXml2xmlUI(d))
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
379
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
380 self.sat_host.bridge.getParams(SECURITY_LIMIT, profile, callback=d.callback, errback=d.errback)
214
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
381 return d
148
8635bc9db9bf added parameter management to test XMLUI, but it's currently deactivated for security reasons (need some configuration options) + separated mainTabPanel CSS from LiberviaTabPanel
Goffi <goffi@goffi.org>
parents: 140
diff changeset
382
214
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
383 def jsonrpc_setParam(self, name, value, category):
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
384 profile = ISATSession(self.session).profile
215
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
385 if category in self.authorized_params and name in self.authorized_params[category]:
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
386 return self.sat_host.bridge.setParam(name, value, category, SECURITY_LIMIT, profile)
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
387 else:
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
388 warning("Trying to set parameter '%s' in category '%s' without authorization!!!"
e830a0c60d32 server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 214
diff changeset
389 % (name, category))
148
8635bc9db9bf added parameter management to test XMLUI, but it's currently deactivated for security reasons (need some configuration options) + separated mainTabPanel CSS from LiberviaTabPanel
Goffi <goffi@goffi.org>
parents: 140
diff changeset
390
8635bc9db9bf added parameter management to test XMLUI, but it's currently deactivated for security reasons (need some configuration options) + separated mainTabPanel CSS from LiberviaTabPanel
Goffi <goffi@goffi.org>
parents: 140
diff changeset
391 def jsonrpc_launchAction(self, action_type, data):
8635bc9db9bf added parameter management to test XMLUI, but it's currently deactivated for security reasons (need some configuration options) + separated mainTabPanel CSS from LiberviaTabPanel
Goffi <goffi@goffi.org>
parents: 140
diff changeset
392 profile = ISATSession(self.session).profile
8635bc9db9bf added parameter management to test XMLUI, but it's currently deactivated for security reasons (need some configuration options) + separated mainTabPanel CSS from LiberviaTabPanel
Goffi <goffi@goffi.org>
parents: 140
diff changeset
393 return self.sat_host.bridge.launchAction(action_type, data, profile)
8635bc9db9bf added parameter management to test XMLUI, but it's currently deactivated for security reasons (need some configuration options) + separated mainTabPanel CSS from LiberviaTabPanel
Goffi <goffi@goffi.org>
parents: 140
diff changeset
394
214
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
395 def jsonrpc_chatStateComposing(self, to_jid_s):
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
396 """Broadcast a signal for "composing" state.
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
397 @param to_jid_s: contact the user is composing to
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
398 """
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
399 profile = ISATSession(self.session).profile
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
400 self.sat_host.bridge.chatStateComposing(to_jid_s, profile)
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
401
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
402
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
403 class Register(jsonrpc.JSONRPC):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
404 """This class manage the registration procedure with SàT
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
405 It provide an api for the browser, check password and setup the web server"""
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
406
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
407 def __init__(self, sat_host):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
408 jsonrpc.JSONRPC.__init__(self)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
409 self.sat_host=sat_host
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
410 self.profiles_waiting={}
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
411 self.request=None
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
412
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
413 def getWaitingRequest(self, profile):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
414 """Tell if a profile is trying to log in"""
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
415 if self.profiles_waiting.has_key(profile):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
416 return self.profiles_waiting[profile]
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
417 else:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
418 return None
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
419
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
420 def render(self, request):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
421 """
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
422 Render method with some hacks:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
423 - if login is requested, try to login with form data
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
424 - except login, every method is jsonrpc
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
425 - user doesn't need to be authentified for isRegistered, but must be for all other methods
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
426 """
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
427 if request.postpath==['login']:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
428 return self.login(request)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
429 _session = request.getSession()
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
430 parsed = jsonrpclib.loads(request.content.read())
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
431 if parsed.get("method")!="isRegistered":
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
432 #if we don't call login or isRegistered, we need to be identified
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
433 profile = ISATSession(_session).profile
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
434 if not profile:
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
435 #user is not identified, we return a jsonrpc fault
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
436 fault = jsonrpclib.Fault(0, "Not allowed") #FIXME: define some standard error codes for libervia
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
437 return jsonrpc.JSONRPC._cbRender(self, fault, request, parsed.get('id'), parsed.get('jsonrpc'))
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
438 self.request = request
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
439 return jsonrpc.JSONRPC.render(self, request)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
440
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
441 def login(self, request):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
442 """
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
443 this method is called with the POST information from the registering form
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
444 it test if the password is ok, and log in if it's the case,
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
445 else it return an error
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
446 @param request: request of the register formulaire, must have "login" and "password" as arguments
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
447 @return: A constant indicating the state:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
448 - BAD REQUEST: something is wrong in the request (bad arguments, profile_key for login)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
449 - AUTH ERROR: either the profile or the password is wrong
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
450 - ALREADY WAITING: a request has already be made for this profile
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
451 - server.NOT_DONE_YET: the profile is being processed, the return value will be given by self._logged or self._logginError
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
452 """
160
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
453
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
454 try:
66
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 61
diff changeset
455 if request.args['submit_type'][0] == 'login':
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 61
diff changeset
456 _login = request.args['login'][0]
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 61
diff changeset
457 if _login.startswith('@'):
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 61
diff changeset
458 raise Exception('No profile_key allowed')
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 61
diff changeset
459 _pass = request.args['login_password'][0]
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 61
diff changeset
460
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 61
diff changeset
461 elif request.args['submit_type'][0] == 'register':
160
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
462 return self._registerNewAccount(request)
66
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 61
diff changeset
463
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 61
diff changeset
464 else:
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 61
diff changeset
465 raise Exception('Unknown submit type')
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
466 except KeyError:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
467 return "BAD REQUEST"
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
468
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
469 _profile_check = self.sat_host.bridge.getProfileName(_login)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
470
121
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
471 def profile_pass_cb(_profile_pass):
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
472 if not _profile_check or _profile_check != _login or _profile_pass != _pass:
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
473 request.write("AUTH ERROR")
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
474 request.finish()
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
475 return
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
476
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
477 if self.profiles_waiting.has_key(_login):
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
478 request.write("ALREADY WAITING")
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
479 request.finish()
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
480 return
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
481
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
482 if self.sat_host.bridge.isConnected(_login):
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
483 request.write(self._logged(_login, request, finish=False))
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
484 request.finish()
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
485 return
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
486
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
487 self.profiles_waiting[_login] = request
155
9c4550b1df3c server side: async connection
Goffi <goffi@goffi.org>
parents: 154
diff changeset
488 d = defer.Deferred()
9c4550b1df3c server side: async connection
Goffi <goffi@goffi.org>
parents: 154
diff changeset
489 self.sat_host.bridge.asyncConnect(_login, lambda: d.callback(None), d.errback)
9c4550b1df3c server side: async connection
Goffi <goffi@goffi.org>
parents: 154
diff changeset
490 return d
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
491
121
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
492 def profile_pass_errback(ignore):
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
493 error("INTERNAL ERROR: can't check profile password")
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
494 request.write("AUTH ERROR")
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
495 request.finish()
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
496
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
497 d = defer.Deferred()
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
498 self.sat_host.bridge.asyncGetParamA("Password", "Connection", profile_key=_login, callback=d.callback, errback=d.errback)
2d40b0f5fb37 server side: asynchronous login
Goffi <goffi@goffi.org>
parents: 117
diff changeset
499 d.addCallbacks(profile_pass_cb, profile_pass_errback)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
500
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
501 return server.NOT_DONE_YET
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
502
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
503 def _postAccountCreation(self, answer_type, id, data, profile):
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
504 """Called when a account has just been created,
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
505 setup stuff has microblog access"""
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
506 def _connected(ignore):
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
507 mblog_d = defer.Deferred()
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
508 self.sat_host.bridge.setMicroblogAccess("open", profile, lambda: mblog_d.callback(None), mblog_d.errback)
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
509 mblog_d.addBoth(lambda ignore: self.sat_host.bridge.disconnect(profile))
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
510
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
511 d = defer.Deferred()
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
512 self.sat_host.bridge.asyncConnect(profile, lambda: d.callback(None), d.errback)
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
513 d.addCallback(_connected)
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
514
160
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
515 def _registerNewAccount(self, request):
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
516 """Create a new account, or return error
160
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
517 @param request: initial login request
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
518 @return: "REGISTRATION" in case of success"""
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
519 #TODO: must be moved in SàT core
160
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
520
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
521 try:
160
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
522 profile = login = request.args['register_login'][0]
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
523 password = request.args['register_password'][0] #FIXME: password is ignored so far
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
524 email = request.args['email'][0]
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
525 except KeyError:
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
526 return "BAD REQUEST"
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
527 if not re.match(r'^[a-z0-9_-]+$', login, re.IGNORECASE) or \
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
528 not re.match(r'^.+@.+\..+', email, re.IGNORECASE):
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
529 return "BAD REQUEST"
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
530
160
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
531 def registered(result):
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
532 request.write('REGISTRATION')
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
533 request.finish()
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
534 #import pudb
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
535 #pudb.set_trace()
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
536
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
537 def registeringError(failure):
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
538 reason = str(failure.value)
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
539 if reason == "CONFLICT":
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
540 request.write('ALREADY EXISTS')
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
541 elif reason == "INTERNAL":
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
542 request.write('INTERNAL')
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
543 else:
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
544 #import pdb
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
545 #pdb.set_trace()
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
546
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
547 error('Unknown registering error: %s' % (reason,))
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
548 request.write('Unknown error (%s)' % reason)
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
549 request.finish()
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
550
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
551 d = defer.Deferred()
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
552 self.sat_host.bridge.registerSatAccount(email, password, profile, lambda: d.callback(None), d.errback)
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
553 d.addCallback(registered)
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
554 d.addErrback(registeringError)
6f913f5adca8 server side: registration refactoring first draft; main registration code is moved to SàT backend
Goffi <goffi@goffi.org>
parents: 156
diff changeset
555 return server.NOT_DONE_YET
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
556
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
557 def __cleanWaiting(self, login):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
558 """Remove login from waiting queue"""
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
559 try:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
560 del self.profiles_waiting[login]
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
561 except KeyError:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
562 pass
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
563
14
9bf8ed012adc - Group microblog management, first draft
Goffi <goffi@goffi.org>
parents: 11
diff changeset
564 def _logged(self, profile, request, finish=True):
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
565 """Set everything when a user just logged
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
566 and return "LOGGED" to the requester"""
61
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
567 def result(answer):
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
568 if finish:
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
569 request.write(answer)
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
570 request.finish()
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
571 else:
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
572 return answer
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
573
14
9bf8ed012adc - Group microblog management, first draft
Goffi <goffi@goffi.org>
parents: 11
diff changeset
574 self.__cleanWaiting(profile)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
575 _session = request.getSession()
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
576 sat_session = ISATSession(_session)
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
577 if sat_session.profile:
61
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
578 error (('/!\\ Session has already a profile, this should NEVER happen !'))
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
579 return result('SESSION_ACTIVE')
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
580 sat_session.profile = profile
24
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
581 self.sat_host.prof_connected.add(profile)
45
7f106052326f server side: user is now disconnected on session end, and queue is purged
Goffi <goffi@goffi.org>
parents: 44
diff changeset
582
7f106052326f server side: user is now disconnected on session end, and queue is purged
Goffi <goffi@goffi.org>
parents: 44
diff changeset
583 def onExpire():
156
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
584 info ("Session expired (profile=%s)" % (profile,))
45
7f106052326f server side: user is now disconnected on session end, and queue is purged
Goffi <goffi@goffi.org>
parents: 44
diff changeset
585 try:
7f106052326f server side: user is now disconnected on session end, and queue is purged
Goffi <goffi@goffi.org>
parents: 44
diff changeset
586 #We purge the queue
7f106052326f server side: user is now disconnected on session end, and queue is purged
Goffi <goffi@goffi.org>
parents: 44
diff changeset
587 del self.sat_host.signal_handler.queue[profile]
7f106052326f server side: user is now disconnected on session end, and queue is purged
Goffi <goffi@goffi.org>
parents: 44
diff changeset
588 except KeyError:
7f106052326f server side: user is now disconnected on session end, and queue is purged
Goffi <goffi@goffi.org>
parents: 44
diff changeset
589 pass
130
6576c5a90060 Working Radio Collective \o/
Goffi <goffi@goffi.org>
parents: 129
diff changeset
590 #and now we disconnect the profile
45
7f106052326f server side: user is now disconnected on session end, and queue is purged
Goffi <goffi@goffi.org>
parents: 44
diff changeset
591 self.sat_host.bridge.disconnect(profile)
7f106052326f server side: user is now disconnected on session end, and queue is purged
Goffi <goffi@goffi.org>
parents: 44
diff changeset
592
7f106052326f server side: user is now disconnected on session end, and queue is purged
Goffi <goffi@goffi.org>
parents: 44
diff changeset
593 _session.notifyOnExpire(onExpire)
7f106052326f server side: user is now disconnected on session end, and queue is purged
Goffi <goffi@goffi.org>
parents: 44
diff changeset
594
14
9bf8ed012adc - Group microblog management, first draft
Goffi <goffi@goffi.org>
parents: 11
diff changeset
595 d = defer.Deferred()
61
80c490e6a1a7 server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 59
diff changeset
596 return result('LOGGED')
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
597
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
598 def _logginError(self, login, request, error_type):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
599 """Something went wrong during loggin, return an error"""
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
600 self.__cleanWaiting(login)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
601 return error_type
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
602
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
603 def jsonrpc_isConnected(self):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
604 _session = self.request.getSession()
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
605 profile = ISATSession(_session).profile
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
606 return self.sat_host.bridge.isConnected(profile)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
607
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
608 def jsonrpc_connect(self):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
609 _session = self.request.getSession()
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
610 profile = ISATSession(_session).profile
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
611 if self.profiles_waiting.has_key(profile):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
612 raise jsonrpclib.Fault('1','Already waiting') #FIXME: define some standard error codes for libervia
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
613 self.profiles_waiting[profile] = self.request
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
614 self.sat_host.bridge.connect(profile)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
615 return server.NOT_DONE_YET
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
616
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
617 def jsonrpc_isRegistered(self):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
618 """Tell if the user is already registered"""
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
619 _session = self.request.getSession()
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
620 profile = ISATSession(_session).profile
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
621 return bool(profile)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
622
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
623 class SignalHandler(jsonrpc.JSONRPC):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
624
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
625 def __init__(self, sat_host):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
626 Resource.__init__(self)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
627 self.register=None
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
628 self.sat_host=sat_host
3
154d4caa57f4 server side: proper profile management in signals generic callback
Goffi <goffi@goffi.org>
parents: 2
diff changeset
629 self.signalDeferred = {}
45
7f106052326f server side: user is now disconnected on session end, and queue is purged
Goffi <goffi@goffi.org>
parents: 44
diff changeset
630 self.queue = {}
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
631
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
632 def plugRegister(self, register):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
633 self.register = register
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
634
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
635 def jsonrpc_getSignals(self):
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
636 """Keep the connection alive until a signal is received, then send it
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
637 @return: (signal, *signal_args)"""
3
154d4caa57f4 server side: proper profile management in signals generic callback
Goffi <goffi@goffi.org>
parents: 2
diff changeset
638 _session = self.request.getSession()
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
639 profile = ISATSession(_session).profile
24
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
640 if profile in self.queue: #if we have signals to send in queue
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
641 if self.queue[profile]:
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
642 return self.queue[profile].pop(0)
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
643 else:
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
644 #the queue is empty, we delete the profile from queue
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
645 del self.queue[profile]
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
646 _session.lock() #we don't want the session to expire as long as this connection is active
156
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
647 def unlock(signal, profile):
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
648 _session.unlock()
156
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
649 try:
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
650 source_defer = self.signalDeferred[profile]
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
651 if source_defer.called and source_defer.result[0] == "disconnected":
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
652 info(u"[%s] disconnected" % (profile,))
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
653 _session.expire()
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
654 except IndexError:
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
655 error("Deferred result should be a tuple with fonction name first")
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
656
3
154d4caa57f4 server side: proper profile management in signals generic callback
Goffi <goffi@goffi.org>
parents: 2
diff changeset
657 self.signalDeferred[profile] = defer.Deferred()
156
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
658 self.request.notifyFinish().addBoth(unlock, profile)
3
154d4caa57f4 server side: proper profile management in signals generic callback
Goffi <goffi@goffi.org>
parents: 2
diff changeset
659 return self.signalDeferred[profile]
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
660
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
661 def getGenericCb(self, function_name):
3
154d4caa57f4 server side: proper profile management in signals generic callback
Goffi <goffi@goffi.org>
parents: 2
diff changeset
662 """Return a generic function which send all params to signalDeferred.callback
154d4caa57f4 server side: proper profile management in signals generic callback
Goffi <goffi@goffi.org>
parents: 2
diff changeset
663 function must have profile as last argument"""
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
664 def genericCb(*args):
3
154d4caa57f4 server side: proper profile management in signals generic callback
Goffi <goffi@goffi.org>
parents: 2
diff changeset
665 profile = args[-1]
24
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
666 if not profile in self.sat_host.prof_connected:
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
667 return
3
154d4caa57f4 server side: proper profile management in signals generic callback
Goffi <goffi@goffi.org>
parents: 2
diff changeset
668 if profile in self.signalDeferred:
154d4caa57f4 server side: proper profile management in signals generic callback
Goffi <goffi@goffi.org>
parents: 2
diff changeset
669 self.signalDeferred[profile].callback((function_name,args[:-1]))
24
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
670 del self.signalDeferred[profile]
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
671 else:
24
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
672 if not self.queue.has_key(profile):
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
673 self.queue[profile] = []
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
674 self.queue[profile].append((function_name, args[:-1]))
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
675 return genericCb
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
676
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
677 def connected(self, profile):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
678 assert(self.register) #register must be plugged
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
679 request = self.register.getWaitingRequest(profile)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
680 if request:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
681 self.register._logged(profile, request)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
682
156
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
683 def disconnected(self, profile):
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
684 if not profile in self.sat_host.prof_connected:
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
685 error("'disconnected' signal received for a not connected profile")
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
686 return
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
687 self.sat_host.prof_connected.remove(profile)
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
688 if profile in self.signalDeferred:
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
689 self.signalDeferred[profile].callback(("disconnected",))
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
690 del self.signalDeferred[profile]
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
691 else:
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
692 if not self.queue.has_key(profile):
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
693 self.queue[profile] = []
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
694 self.queue[profile].append(("disconnected",))
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
695
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
696
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
697 def connectionError(self, error_type, profile):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
698 assert(self.register) #register must be plugged
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
699 request = self.register.getWaitingRequest(profile)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
700 if request: #The user is trying to log in
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
701 if error_type == "AUTH_ERROR":
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
702 _error_t = "AUTH ERROR"
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
703 else:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
704 _error_t = "UNKNOWN"
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
705 self.register._logginError(profile, request, _error_t)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
706
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
707 def render(self, request):
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
708 """
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
709 Render method wich reject access if user is not identified
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
710 """
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
711 _session = request.getSession()
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
712 parsed = jsonrpclib.loads(request.content.read())
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
713 profile = ISATSession(_session).profile
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
714 if not profile:
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
715 #user is not identified, we return a jsonrpc fault
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
716 fault = jsonrpclib.Fault(0, "Not allowed") #FIXME: define some standard error codes for libervia
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
717 return jsonrpc.JSONRPC._cbRender(self, fault, request, parsed.get('id'), parsed.get('jsonrpc'))
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
718 self.request = request
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
719 return jsonrpc.JSONRPC.render(self, request)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
720
127
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
721 class UploadManager(Resource):
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
722 """This class manage the upload of a file
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
723 It redirect the stream to SàT core backend"""
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
724 isLeaf = True
151
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
725 NAME = 'path' #name use by the FileUpload
127
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
726
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
727 def __init__(self, sat_host):
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
728 self.sat_host=sat_host
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
729 self.upload_dir = tempfile.mkdtemp()
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
730 self.sat_host.addCleanup(shutil.rmtree, self.upload_dir)
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
731
128
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
732 def getTmpDir(self):
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
733 return self.upload_dir
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
734
151
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
735 def _getFileName(self, request):
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
736 """Generate unique filename for a file"""
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
737 raise NotImplementedError
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
738
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
739 def _fileWritten(self, request, filepath):
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
740 """Called once the file is actually written on disk"""
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
741 raise NotImplementedError
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
742
127
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
743 def render(self, request):
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
744 """
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
745 Render method with some hacks:
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
746 - if login is requested, try to login with form data
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
747 - except login, every method is jsonrpc
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
748 - user doesn't need to be authentified for isRegistered, but must be for all other methods
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
749 """
151
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
750 #start = time.time()
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
751 filename = self._getFileName(request)
128
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
752 filepath = os.path.join(self.upload_dir, filename)
151
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
753 #FIXME: the uploaded file is fully loaded in memory at form parsing time so far
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
754 # (see twisted.web.http.Request.requestReceived). A custom requestReceived should
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
755 # be written in the futur. In addition, it is not yet possible to get progression informations
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
756 # (see http://twistedmatrix.com/trac/ticket/288)
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
757
128
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
758 with open(filepath,'w') as f:
151
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
759 f.write(request.args[self.NAME][0])
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
760 self._fileWritten(request, filepath)
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
761 #end = time.time()
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
762 #print "time spent in render: %fs" % (end - start)
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
763 return "OK"
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
764
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
765 class UploadManagerRadioCol(UploadManager):
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
766 NAME = 'song'
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
767
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
768 def _getFileName(self, request):
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
769 return "%s.ogg" % str(uuid.uuid4()) #XXX: chromium doesn't seem to play song without the .ogg extension, even with audio/ogg mime-type
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
770
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
771 def _fileWritten(self, request, filepath):
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
772 """Called once the file is actually written on disk"""
128
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
773 profile = ISATSession(request.getSession()).profile
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
774 self.sat_host.bridge.radiocolSongAdded(request.args['referee'][0], filepath, profile)
151
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
775
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
776 class UploadManagerAvatar(UploadManager):
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
777 NAME = 'avatar_path'
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
778
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
779 def _getFileName(self, request):
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
780 return str(uuid.uuid4())
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
781
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
782 def _fileWritten(self, request, filepath):
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
783 """Called once the file is actually written on disk"""
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
784 profile = ISATSession(request.getSession()).profile
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
785 print u"fichier écrit:", filepath
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
786 self.sat_host.bridge.setAvatar(filepath, profile)
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents: 3
diff changeset
787
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
788 class Libervia(service.Service):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
789
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
790 def __init__(self):
127
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
791 self._cleanup = []
59
d0fa4e96a5e4 server side: 404 error is now sent instead of directory listing when requesting a directory
Goffi <goffi@goffi.org>
parents: 57
diff changeset
792 root = ProtectedFile(LIBERVIA_DIR)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
793 self.signal_handler = SignalHandler(self)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
794 _register = Register(self)
151
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
795 _upload_radiocol = UploadManagerRadioCol(self)
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
796 _upload_avatar = UploadManagerAvatar(self)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
797 self.signal_handler.plugRegister(_register)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
798 self.sessions = {} #key = session value = user
24
28e203f13144 server side: misc stuff
Goffi <goffi@goffi.org>
parents: 20
diff changeset
799 self.prof_connected = set() #Profiles connected
46
c3ee630914ba Account creation
Goffi <goffi@goffi.org>
parents: 45
diff changeset
800 self.action_handler = SATActionIDHandler()
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
801 ## bridge ##
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
802 try:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
803 self.bridge=DBusBridgeFrontend()
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
804 except BridgeExceptionNoService:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
805 print(u"Can't connect to SàT backend, are you sure it's launched ?")
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
806 sys.exit(1)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
807 self.bridge.register("connected", self.signal_handler.connected)
156
46835a4e2551 server side: disconnection
Goffi <goffi@goffi.org>
parents: 155
diff changeset
808 self.bridge.register("disconnected", self.signal_handler.disconnected)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
809 self.bridge.register("connectionError", self.signal_handler.connectionError)
117
2e2e10785c33 server side: refactored signal according to SàT's bridge changes + getCardCache handling + updatedValue handling
Goffi <goffi@goffi.org>
parents: 110
diff changeset
810 self.bridge.register("actionResult", self.action_handler.actionResultCb)
2e2e10785c33 server side: refactored signal according to SàT's bridge changes + getCardCache handling + updatedValue handling
Goffi <goffi@goffi.org>
parents: 110
diff changeset
811 #core
137
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
812 for signal_name in ['presenceUpdate', 'newMessage', 'subscribe', 'contactDeleted', 'newContact', 'entityDataUpdated']:
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
813 self.bridge.register(signal_name, self.signal_handler.getGenericCb(signal_name))
117
2e2e10785c33 server side: refactored signal according to SàT's bridge changes + getCardCache handling + updatedValue handling
Goffi <goffi@goffi.org>
parents: 110
diff changeset
814 #plugins
2e2e10785c33 server side: refactored signal according to SàT's bridge changes + getCardCache handling + updatedValue handling
Goffi <goffi@goffi.org>
parents: 110
diff changeset
815 for signal_name in ['personalEvent', 'roomJoined', 'roomUserJoined', 'roomUserLeft', 'tarotGameStarted', 'tarotGameNew', 'tarotGameChooseContrat',
127
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
816 'tarotGameShowCards', 'tarotGameInvalidCards', 'tarotGameCardsPlayed', 'tarotGameYourTurn', 'tarotGameScore',
214
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
817 'radiocolStarted', 'radiocolPreload', 'radiocolPlay', 'radiocolNoUpload', 'radiocolUploadOk', 'radiocolSongRejected',
7b26be266ab1 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents: 204
diff changeset
818 'chatStateReceived']:
117
2e2e10785c33 server side: refactored signal according to SàT's bridge changes + getCardCache handling + updatedValue handling
Goffi <goffi@goffi.org>
parents: 110
diff changeset
819 self.bridge.register(signal_name, self.signal_handler.getGenericCb(signal_name), "plugin")
77
975e6be24e11 media paths update
Goffi <goffi@goffi.org>
parents: 67
diff changeset
820 self.media_dir = self.bridge.getConfig('','media_dir')
107
c3fb3292f582 browser side: CSS: changed tabs margin + fixed dragover background for chat panels
Goffi <goffi@goffi.org>
parents: 77
diff changeset
821 self.local_dir = self.bridge.getConfig('','local_dir')
172
631556a64850 server side: added root redirection to libervia.html
Goffi <goffi@goffi.org>
parents: 165
diff changeset
822 root.putChild('', Redirect('libervia.html'))
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents: 3
diff changeset
823 root.putChild('json_signal_api', self.signal_handler)
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents: 3
diff changeset
824 root.putChild('json_api', MethodHandler(self))
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents: 3
diff changeset
825 root.putChild('register_api', _register)
151
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
826 root.putChild('upload_radiocol', _upload_radiocol)
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
827 root.putChild('upload_avatar', _upload_avatar)
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents: 3
diff changeset
828 root.putChild('blog', MicroBlog(self))
59
d0fa4e96a5e4 server side: 404 error is now sent instead of directory listing when requesting a directory
Goffi <goffi@goffi.org>
parents: 57
diff changeset
829 root.putChild('css', ProtectedFile("server_css/"))
77
975e6be24e11 media paths update
Goffi <goffi@goffi.org>
parents: 67
diff changeset
830 root.putChild(os.path.dirname(MEDIA_DIR), ProtectedFile(self.media_dir))
110
dfc02690deb4 browser side: CSS: header, unibox, tabs + drag'n' drop reworked
Adrien Vigneron <adrienvigneron@mailoo.org>
parents: 107
diff changeset
831 root.putChild(os.path.dirname(AVATARS_DIR), ProtectedFile(os.path.join(self.local_dir, AVATARS_DIR)))
151
a159cc29b556 server side: file upload is now more generic:
Goffi <goffi@goffi.org>
parents: 148
diff changeset
832 root.putChild('radiocol', ProtectedFile(_upload_radiocol.getTmpDir(), defaultType="audio/ogg")) #We cheat for PoC because we know we are on the same host, so we use directly upload dir
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents: 3
diff changeset
833 self.site = server.Site(root)
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
834 self.site.sessionFactory = LiberviaSession
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
835
127
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
836 def addCleanup(self, callback, *args, **kwargs):
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
837 """Add cleaning method to call when service is stopped
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
838 cleaning method will be called in reverse order of they insertion
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
839 @param callback: callable to call on service stop
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
840 @param *args: list of arguments of the callback
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
841 @param **kwargs: list of keyword arguments of the callback"""
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
842 self._cleanup.insert(0, (callback, args, kwargs))
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
843
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
844 def startService(self):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
845 reactor.listenTCP(8080, self.site)
127
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
846
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
847 def stopService(self):
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
848 print "launching cleaning methods"
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
849 for callback, args, kwargs in self._cleanup:
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 125
diff changeset
850 callback(*args, **kwargs)
1
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
851
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
852 def run(self):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
853 reactor.run()
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
854
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
855 def stop(self):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
856 reactor.stop()
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
857
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
858
44
2744dd31e8a5 server side: Session management refactoring
Goffi <goffi@goffi.org>
parents: 41
diff changeset
859 registerAdapter(SATSession, server.Session, ISATSession)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
860 application = service.Application('Libervia')
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
861 service = Libervia()
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
862 service.setServiceParent(application)