diff --git a/src/nucleus/domains/http/parsers/cookie.py b/src/nucleus/domains/http/parsers/cookie.py new file mode 100644 index 0000000..2a2646d --- /dev/null +++ b/src/nucleus/domains/http/parsers/cookie.py @@ -0,0 +1,14 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' + + +def cookie_parse(raw): + print('\n') + print('cookie_parse') + print(raw) + items = raw.split('; ') + result = {} + for item in items: + key, value = item.split('=', 1) + result[key] = value + return result diff --git a/src/nucleus/domains/http/parsers/request.py b/src/nucleus/domains/http/parsers/request.py index 2aa581c..7f81f65 100644 --- a/src/nucleus/domains/http/parsers/request.py +++ b/src/nucleus/domains/http/parsers/request.py @@ -4,6 +4,7 @@ __email__ = 'remizoffalex@mail.ru' from nucleus.domains.http.models.request import Request from .contenttype import contenttype_parse from .json import parse_json +from .cookie import cookie_parse def urlsplit(url): @@ -53,7 +54,6 @@ def parse_url(raw): def parse(raw): - print(raw) request = Request() request.raw = raw parts = raw.split(b'\r\n', 1) @@ -72,4 +72,6 @@ def parse(raw): if request.content_type.media_type=='application/json': request.json = parse_json(body) request.is_json = True + if 'Cookie' in request.headers: + request.cookies = cookie_parse(request.headers['Cookie']) return request diff --git a/tests/test_request_parser.py b/tests/test_request_parser.py index d07262b..f8d563c 100644 --- a/tests/test_request_parser.py +++ b/tests/test_request_parser.py @@ -34,7 +34,6 @@ class TestRequestParse(unittest.TestCase): print(url) def test_parse_post_json(self): - raw = b'POST /api HTTP/1.1\r\nHost: 10.2.0.1:9000\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36\r\nContent-Length: 277\r\nAccept: application/json, text/*\r\nAccept-Language: ru,en-US;q=0.9,en;q=0.8\r\nContent-Type: application/json; charset=UTF-8\r\nCookie: specialistoff_net=eyJpcCI6IjE5Mi4xNjguMzMuODgiLCJ1c2VyX2lkIjoxfQ.aMimlA.Lm8R-IvrbW_1MTtM5An50NH-154; session=eyJpcCI6IjE3Mi4xNi4xLjEiLCJ1c2VyX2lkIjoxfQ.acgSFg.5KkGM_fT5IDNodYcytMzJHd7prk\r\nX-Forwarded-For: 192.18.3.1\r\nX-Forwarded-Host: 10.2.0.1:9000\r\nX-Forwarded-Port: 9000\r\nX-Forwarded-Proto: http\r\nX-Forwarded-Server: 8dd1deb61302\r\nX-Real-Ip: 192.18.3.1\r\nAccept-Encoding: gzip\r\n\r\n[{"jsonrpc":"2.0","method":"questions","params":{"page":1,"order_by":{"field":"id","order":"desc"},"fields":["id","title","created","updated",{"tags":["id","name"],"user":["id","name"]}]},"id":"1099d48b231bb"},{"jsonrpc":"2.0","method":"questions.count","id":"41dbfec0441e68"}]' raw = b'POST /api HTTP/1.1\r\nHost: 10.2.0.1:9000\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:149.0) Gecko/20100101 Firefox/149.0\r\nContent-Length: 276\r\nAccept: application/json, text/*\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7\r\nCache-Control: no-cache\r\nContent-Type: application/json; charset=utf-8\r\nOrigin: http://10.2.0.1:9000\r\nPragma: no-cache\r\nReferer: http://10.2.0.1:9000/questions\r\nX-Forwarded-For: 192.18.3.1\r\nX-Forwarded-Host: 10.2.0.1:9000\r\nX-Forwarded-Port: 9000\r\nX-Forwarded-Proto: http\r\nX-Forwarded-Server: 8dd1deb61302\r\nX-Real-Ip: 192.18.3.1\r\n\r\n[{"jsonrpc":"2.0","method":"questions","params":{"page":1,"order_by":{"field":"id","order":"desc"},"fields":["id","title","created","updated",{"tags":["id","name"],"user":["id","name"]}]},"id":"6759189805cce"},{"jsonrpc":"2.0","method":"questions.count","id":"821f0655b5d4d"}]' request = parse(raw) @@ -44,3 +43,11 @@ class TestRequestParse(unittest.TestCase): self.assertIsInstance(data, list) elif isinstance(data, dict): self.assertIsInstance(dict) + + def test_parse_cookie(self): + raw = b'POST /api HTTP/1.1\r\nHost: 10.2.0.1:9000\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36\r\nContent-Length: 277\r\nAccept: application/json, text/*\r\nAccept-Language: ru,en-US;q=0.9,en;q=0.8\r\nContent-Type: application/json; charset=UTF-8\r\nCookie: specialistoff_net=qwe.123.asd; session=qwe.123.asd\r\nX-Forwarded-For: 192.18.3.1\r\nX-Forwarded-Host: 10.2.0.1:9000\r\nX-Forwarded-Port: 9000\r\nX-Forwarded-Proto: http\r\nX-Forwarded-Server: 8dd1deb61302\r\nX-Real-Ip: 192.18.3.1\r\nAccept-Encoding: gzip\r\n\r\n[{"jsonrpc":"2.0","method":"questions","params":{"page":1,"order_by":{"field":"id","order":"desc"},"fields":["id","title","created","updated",{"tags":["id","name"],"user":["id","name"]}]},"id":"1099d48b231bb"},{"jsonrpc":"2.0","method":"questions.count","id":"41dbfec0441e68"}]' + request = parse(raw) + + self.assertIsInstance(request.cookies, dict) + print(request.cookies) + # self.assertIsInstance(request.cookies, dict)