Add webclient browser name identifier. Resolve #1650
This commit is contained in:
parent
6fef01a3b1
commit
a0c70ce465
3 changed files with 50 additions and 4 deletions
|
|
@ -54,6 +54,7 @@ class WebSocketClient(WebSocketServerProtocol, _BASE_SESSION_CLASS):
|
|||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.protocol_key = "webclient/websocket"
|
||||
self.browserstr = ""
|
||||
|
||||
def get_client_session(self):
|
||||
"""
|
||||
|
|
@ -65,7 +66,8 @@ class WebSocketClient(WebSocketServerProtocol, _BASE_SESSION_CLASS):
|
|||
|
||||
"""
|
||||
try:
|
||||
self.csessid = self.http_request_uri.split("?", 1)[1]
|
||||
# client will connect with wsurl?csessid&browserid
|
||||
webarg = self.http_request_uri.split("?", 1)[1]
|
||||
except IndexError:
|
||||
# this may happen for custom webclients not caring for the
|
||||
# browser session.
|
||||
|
|
@ -77,6 +79,11 @@ class WebSocketClient(WebSocketServerProtocol, _BASE_SESSION_CLASS):
|
|||
self.csessid = None
|
||||
logger.log_trace(str(self))
|
||||
return None
|
||||
|
||||
self.csessid, *browserstr = webarg.split("&", 1)
|
||||
if browserstr:
|
||||
self.browserstr = str(browserstr[0])
|
||||
|
||||
if self.csessid:
|
||||
return _CLIENT_SESSIONS(session_key=self.csessid)
|
||||
|
||||
|
|
@ -118,7 +125,8 @@ class WebSocketClient(WebSocketServerProtocol, _BASE_SESSION_CLASS):
|
|||
self.sessid = old_session.sessid
|
||||
self.sessionhandler.disconnect(old_session)
|
||||
|
||||
self.protocol_flags["CLIENTNAME"] = "Evennia Webclient (websocket)"
|
||||
browserstr = f":{self.browserstr}" if self.browserstr else ""
|
||||
self.protocol_flags["CLIENTNAME"] = f"Evennia Webclient (websocket{browserstr})"
|
||||
self.protocol_flags["UTF-8"] = True
|
||||
self.protocol_flags["OOB"] = True
|
||||
|
||||
|
|
|
|||
|
|
@ -129,6 +129,19 @@ class AjaxWebClient(resource.Resource):
|
|||
"""
|
||||
return html.escape(request.args[b"csessid"][0].decode("utf-8"))
|
||||
|
||||
def get_browserstr(self, request):
|
||||
"""
|
||||
Get browser-string out of the request.
|
||||
|
||||
Args:
|
||||
request (Request): Incoming request object.
|
||||
Returns:
|
||||
str: The browser name.
|
||||
|
||||
|
||||
"""
|
||||
return html.escape(request.args[b"browserstr"][0].decode("utf-8"))
|
||||
|
||||
def at_login(self):
|
||||
"""
|
||||
Called when this session gets authenticated by the server.
|
||||
|
|
@ -181,6 +194,7 @@ class AjaxWebClient(resource.Resource):
|
|||
|
||||
"""
|
||||
csessid = self.get_client_sessid(request)
|
||||
browserstr = self.get_browserstr(request)
|
||||
|
||||
remote_addr = request.getClientIP()
|
||||
|
||||
|
|
@ -204,6 +218,7 @@ class AjaxWebClient(resource.Resource):
|
|||
sess.init_session("ajax/comet", remote_addr, self.sessionhandler)
|
||||
|
||||
sess.csessid = csessid
|
||||
sess.browserstr = browserstr
|
||||
csession = _CLIENT_SESSIONS(session_key=sess.csessid)
|
||||
uid = csession and csession.get("webclient_authenticated_uid", False)
|
||||
if uid:
|
||||
|
|
@ -218,6 +233,11 @@ class AjaxWebClient(resource.Resource):
|
|||
self.keep_alive = LoopingCall(self._keepalive)
|
||||
self.keep_alive.start(_KEEPALIVE, now=False)
|
||||
|
||||
browserstr = f":{browserstr}" if browserstr else ""
|
||||
sess.protocol_flags["CLIENTNAME"] = f"Evennia Webclient (ajax{browserstr})"
|
||||
sess.protocol_flags["UTF-8"] = True
|
||||
sess.protocol_flags["OOB"] = True
|
||||
|
||||
# actually do the connection
|
||||
sess.sessionhandler.connect(sess)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue