diff --git a/evennia/server/portal/portal.py b/evennia/server/portal/portal.py index c5c9740ef9..e8c310cae1 100644 --- a/evennia/server/portal/portal.py +++ b/evennia/server/portal/portal.py @@ -294,9 +294,9 @@ if WEBSERVER_ENABLED: # create ajax client processes at /webclientdata from evennia.server.portal import webclient_ajax - webclient = webclient_ajax.WebClient() - webclient.sessionhandler = PORTAL_SESSIONS - web_root.putChild("webclientdata", webclient) + ajax_webclient = webclient_ajax.AjaxWebClient() + ajax_webclient.sessionhandler = PORTAL_SESSIONS + web_root.putChild("webclientdata", ajax_webclient) webclientstr = "\n + webclient (ajax only)" if WEBSOCKET_CLIENT_ENABLED and not websocket_started: diff --git a/evennia/server/portal/webclient.py b/evennia/server/portal/webclient.py index 7d769ec899..d025b85018 100644 --- a/evennia/server/portal/webclient.py +++ b/evennia/server/portal/webclient.py @@ -93,7 +93,6 @@ class WebSocketClient(Protocol, Session): csession = self.get_client_session() if csession: - print("In disconnect: csession uid=%s" % csession.get("webclient_authenticated_uid", None)) csession["webclient_authenticated_uid"] = None csession.save() self.logged_in = False diff --git a/evennia/server/portal/webclient_ajax.py b/evennia/server/portal/webclient_ajax.py index 4ec78e3eb7..c31f5d8eab 100644 --- a/evennia/server/portal/webclient_ajax.py +++ b/evennia/server/portal/webclient_ajax.py @@ -53,11 +53,11 @@ def jsonify(obj): # -# WebClient resource - this is called by the ajax client +# AjaxWebClient resource - this is called by the ajax client # using POST requests to /webclientdata. # -class WebClient(resource.Resource): +class AjaxWebClient(resource.Resource): """ An ajax/comet long-polling transport @@ -163,13 +163,13 @@ class WebClient(resource.Resource): remote_addr = request.getClientIP() host_string = "%s (%s:%s)" % (_SERVERNAME, request.getRequestHostname(), request.getHost().port) - sess = WebClientSession() + sess = AjaxWebClientSession() sess.client = self sess.init_session("ajax/comet", remote_addr, self.sessionhandler) sess.csessid = csessid csession = _CLIENT_SESSIONS(session_key=sess.csessid) - uid = csession and csession.get("logged_in", False) + uid = csession and csession.get("webclient_authenticated_uid", False) if uid: # the client session is already logged in sess.uid = uid @@ -292,14 +292,26 @@ class WebClient(resource.Resource): # web client interface. # -class WebClientSession(session.Session): +class AjaxWebClientSession(session.Session): """ - This represents a session running in a webclient. + This represents a session running in an AjaxWebclient. """ def __init__(self, *args, **kwargs): self.protocol_name = "ajax/comet" - super(WebClientSession, self).__init__(*args, **kwargs) + super(AjaxWebClientSession, self).__init__(*args, **kwargs) + + def get_client_session(self): + """ + Get the Client browser session (used for auto-login based on browser session) + + Returns: + csession (ClientSession): This is a django-specific internal representation + of the browser session. + + """ + if self.csessid: + return _CLIENT_SESSIONS(session_key=self.csessid) def disconnect(self, reason="Server disconnected."): """ @@ -308,10 +320,22 @@ class WebClientSession(session.Session): Args: reason (str): Motivation for the disconnect. """ + csession = self.get_client_session() + + if csession: + csession["webclient_authenticated_uid"] = None + csession.save() + self.logged_in = False self.client.lineSend(self.csessid, ["connection_close", [reason], {}]) self.client.client_disconnect(self.csessid) self.sessionhandler.disconnect(self) + def at_login(self): + csession = self.get_client_session() + if csession: + csession["webclient_authenticated_uid"] = self.uid + csession.save() + def data_out(self, **kwargs): """ Data Evennia -> User