From b86c8a01643f9c68a759f924017ca97a2f18b41d Mon Sep 17 00:00:00 2001 From: Andrew Godwin Date: Fri, 5 Feb 2016 17:33:02 -0800 Subject: [PATCH] Update WS protocol to have ASGI format --- daphne/http_protocol.py | 26 +++++++++++++------------- daphne/ws_protocol.py | 7 ++++--- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/daphne/http_protocol.py b/daphne/http_protocol.py index 1bebca6..b2304df 100755 --- a/daphne/http_protocol.py +++ b/daphne/http_protocol.py @@ -36,6 +36,17 @@ class WebRequest(http.Request): upgrade_header = None if self.requestHeaders.hasHeader("Upgrade"): upgrade_header = self.requestHeaders.getRawHeaders("Upgrade")[0] + # Calculate query string + self.query_string = "" + if b"?" in self.uri: + self.query_string = self.uri.split(b"?", 1)[1] + # Sanitize headers + self.headers = {} + for name, value in self.requestHeaders.getAllRawHeaders(): + # Prevent CVE-2015-0219 + if b"_" in name: + continue + self.headers[name.lower().decode("latin1")] = value[0] # Is it WebSocket? IS IT?! if upgrade_header == "websocket": # Make WebSocket protocol to hand off to @@ -68,17 +79,6 @@ class WebRequest(http.Request): else: logging.debug("HTTP %s request for %s", self.method, self.reply_channel) self.content.seek(0, 0) - # Calculate query string - query_string = "" - if b"?" in self.uri: - query_string = self.uri.split(b"?", 1)[1] - # Sanitize headers - headers = {} - for name, value in self.requestHeaders.getAllRawHeaders(): - # Prevent CVE-2015-0219 - if b"_" in name: - continue - headers[name.lower().decode("latin1")] = value[0] # Send message self.factory.channel_layer.send("http.request", { "reply_channel": self.reply_channel, @@ -87,8 +87,8 @@ class WebRequest(http.Request): "method": self.method.decode("ascii"), "path": self.path, "scheme": "http", - "query_string": query_string, - "headers": headers, + "query_string": self.query_string, + "headers": self.headers, "body": self.content.read(), "client": [self.client.host, self.client.port], "server": [self.host.host, self.host.port], diff --git a/daphne/ws_protocol.py b/daphne/ws_protocol.py index a962675..ed3544c 100755 --- a/daphne/ws_protocol.py +++ b/daphne/ws_protocol.py @@ -4,7 +4,6 @@ import time import logging from autobahn.twisted.websocket import WebSocketServerProtocol, WebSocketServerFactory -from django.http import parse_cookie logger = logging.getLogger(__name__) @@ -22,8 +21,10 @@ class WebSocketProtocol(WebSocketServerProtocol): def onConnect(self, request): self.request_info = { "path": request.path, - "get": request.params, - "cookies": parse_cookie(request.headers.get('cookie', '')) + "headers": self.headers, + "query_string": request.query_string, + "client": [request.client.host, request.client.port], + "server": [request.host.host, request.host.port], } def onOpen(self):