diff libervia/server/server.py @ 1266:6b7f9c3558cc

server, pages: better identities handling: - own identity is now retrieve on connection - use session identities all the time, fixed pages where an empty dict was used - identities and own_jid are alway set in template_data for normal rendering
author Goffi <goffi@goffi.org>
date Tue, 19 May 2020 11:02:32 +0200
parents 92ff09cdd6dd
children e628724530ec
line wrap: on
line diff
--- a/libervia/server/server.py	Tue May 19 11:02:31 2020 +0200
+++ b/libervia/server/server.py	Tue May 19 11:02:32 2020 +0200
@@ -51,6 +51,7 @@
 from sat.tools.common import template
 from sat.tools.common import uri as common_uri
 from sat.tools.common.utils import recursive_update
+from sat.tools.common import data_format
 import libervia
 from libervia.server import websockets
 from libervia.server.pages import LiberviaPage
@@ -1015,8 +1016,7 @@
         getattr(self.bridge, method_name)(*args, **kwargs)
         return d
 
-    @defer.inlineCallbacks
-    def _logged(self, profile, request):
+    async def _logged(self, profile, request):
         """Set everything when a user just logged in
 
         @param profile
@@ -1061,12 +1061,16 @@
         session.notifyOnExpire(onExpire)
 
         # FIXME: those session infos should be returned by connect or isConnected
-        infos = yield self.bridgeCall("sessionInfosGet", profile)
+        infos = await self.bridgeCall("sessionInfosGet", profile)
         sat_session.jid = jid.JID(infos["jid"])
+        own_bare_jid_s = sat_session.jid.userhost()
+        own_id_raw = await self.bridgeCall(
+            "identityGet", own_bare_jid_s, [], True, profile)
+        sat_session.identities[own_bare_jid_s] = data_format.deserialise(own_id_raw)
         sat_session.backend_started = int(infos["started"])
 
         state = C.PROFILE_LOGGED_EXT_JID if register_with_ext_jid else C.PROFILE_LOGGED
-        defer.returnValue(state)
+        return state
 
     @defer.inlineCallbacks
     def connect(self, request, login, password):
@@ -1218,7 +1222,7 @@
             )
             #  no, we have to create it
 
-        state = yield self._logged(profile, request)
+        state = yield defer.ensureDeferred(self._logged(profile, request))
         defer.returnValue(state)
 
     def registerNewAccount(self, request, login, password, email):