# HG changeset patch # User Goffi # Date 1589878952 -7200 # Node ID 6b7f9c3558cc0321c1e7944bab79bfe8e90894e3 # Parent 24e2973378f6743db0e045f425081db1671069d8 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 diff -r 24e2973378f6 -r 6b7f9c3558cc libervia/pages/blog/page_meta.py --- a/libervia/pages/blog/page_meta.py Tue May 19 11:02:31 2020 +0200 +++ b/libervia/pages/blog/page_meta.py Tue May 19 11:02:32 2020 +0200 @@ -35,7 +35,7 @@ list(entities_own.keys()) + list(entities_roster.keys()) ) entities_url = template_data["entities_url"] = {} - identities = template_data["identities"] = self.host.getSessionData( + identities = self.host.getSessionData( request, session_iface.ISATSession ).identities d_list = [] diff -r 24e2973378f6 -r 6b7f9c3558cc libervia/pages/blog/view/page_meta.py --- a/libervia/pages/blog/view/page_meta.py Tue May 19 11:02:31 2020 +0200 +++ b/libervia/pages/blog/view/page_meta.py Tue May 19 11:02:32 2020 +0200 @@ -214,7 +214,7 @@ ## identities ## # identities are used to show nice nickname or avatars - identities = template_data['identities'] = self.host.getSessionData(request, session_iface.ISATSession).identities + identities = self.host.getSessionData(request, session_iface.ISATSession).identities ## Comments ## # if comments are requested, we need to take them diff -r 24e2973378f6 -r 6b7f9c3558cc libervia/pages/chat/page_meta.py --- a/libervia/pages/chat/page_meta.py Tue May 19 11:02:31 2020 +0200 +++ b/libervia/pages/chat/page_meta.py Tue May 19 11:02:32 2020 +0200 @@ -84,14 +84,14 @@ profile, ) authors = {m[2] for m in history} - identities = {} + identities = session.identities for author in authors: id_raw = yield self.host.bridgeCall( "identityGet", author, [], True, profile) identities[author] = data_format.deserialise(id_raw) template_data["messages"] = data_objects.Messages(history) - rdata['identities'] = template_data["identities"] = identities + rdata['identities'] = identities template_data["target_jid"] = target_jid template_data["chat_type"] = chat_type diff -r 24e2973378f6 -r 6b7f9c3558cc libervia/pages/forums/topics/page_meta.py --- a/libervia/pages/forums/topics/page_meta.py Tue May 19 11:02:31 2020 +0200 +++ b/libervia/pages/forums/topics/page_meta.py Tue May 19 11:02:32 2020 +0200 @@ -29,7 +29,9 @@ topics, metadata = yield self.host.bridgeCall( "forumTopicsGet", service.full(), node, {}, profile ) - template_data["identities"] = identities = {} + identities = self.host.getSessionData( + request, session_iface.ISATSession + ).identities for topic in topics: parsed_uri = xmpp_uri.parseXMPPUri(topic["uri"]) author = topic["author"] diff -r 24e2973378f6 -r 6b7f9c3558cc libervia/server/pages.py --- a/libervia/server/pages.py Tue May 19 11:02:31 2020 +0200 +++ b/libervia/server/pages.py Tue May 19 11:02:32 2020 +0200 @@ -1308,11 +1308,14 @@ # if confirm variable is set in case of successfuly data post session_data = self.host.getSessionData(request, session_iface.ISATSession) + template_data['identities'] = session_data.identities if session_data.popPageFlag(self, C.FLAG_CONFIRM): template_data["confirm"] = True notifs = session_data.popPageNotifications(self) if notifs: template_data["notifications"] = notifs + if session_data.jid is not None: + template_data["own_jid"] = session_data.jid if session_data.locale is not None: template_data['locale'] = session_data.locale if self.vhost_root.site_name: diff -r 24e2973378f6 -r 6b7f9c3558cc libervia/server/server.py --- 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):