Преглед на файлове

Use plain text message payloads instead of JSON

master
JustAnotherArchivist преди 4 години
родител
ревизия
542cdb7140
променени са 1 файла, в които са добавени 18 реда и са изтрити 13 реда
  1. +18
    -13
      http2irc.py

+ 18
- 13
http2irc.py Целия файл

@@ -4,7 +4,6 @@ import asyncio
import base64
import collections
import concurrent.futures
import json
import logging
import signal
import ssl
@@ -223,6 +222,7 @@ class IRCClientProtocol(asyncio.Protocol):
logging.debug(f'{id(self)}: got message: {message!r}')
if message is None:
break
#TODO Split if the message is too long.
self.unconfirmedMessages.append((channel, message))
self.send(b'PRIVMSG ' + channel.encode('utf-8') + b' :' + message.encode('utf-8'))
await asyncio.sleep(1) # Rate limit
@@ -339,28 +339,33 @@ class WebServer:
await runner.cleanup()

async def post(self, request):
logging.info(f'Received request for {request.path!r} with data {await request.read()!r}')
logging.info(f'Received request for {request.path!r}')
try:
channel, auth = self._paths[request.path]
except KeyError:
logging.info(f'Bad request: no path {request.path!r}')
raise aiohttp.web.HTTPNotFound()
if auth:
authHeader = request.headers.get('Authorization')
if not authHeader or authHeader != auth:
logging.info(f'Bad request: authentication failed: {authHeader!r} != {auth}')
raise aiohttp.web.HTTPForbidden()
try:
data = await request.json()
except (aiohttp.ContentTypeError, json.JSONDecodeError) as e:
logging.error(f'Invalid data received: {await request.read()!r}')
message = await request.text()
except Exception as e:
logging.info(f'Bad request: exception while reading request data: {e!s}')
raise aiohttp.web.HTTPBadRequest() # Yes, it's always the client's fault. :-)
logging.debug(f'Request payload: {message!r}')
# Strip optional [CR] LF at the end of the payload
if message.endswith('\r\n'):
message = message[:-2]
elif message.endswith('\n'):
message = message[:-1]
if '\r' in message or '\n' in message:
logging.info('Bad request: linebreaks in message')
raise aiohttp.web.HTTPBadRequest()
if 'message' not in data:
logging.error(f'Message missing: {await request.read()!r}')
raise aiohttp.web.HTTPBadRequest()
if '\r' in data['message'] or '\n' in data['message']:
logging.error(f'Linebreaks in message: {await request.read()!r}')
raise aiohttp.web.HTTPBadRequest()
logging.debug(f'Putting message {data["message"]!r} for {channel} into message queue')
self.messageQueue.put_nowait((channel, data['message']))
logging.debug(f'Putting message {message!r} for {channel} into message queue')
self.messageQueue.put_nowait((channel, message))
raise aiohttp.web.HTTPOk()




Зареждане…
Отказ
Запис