mirror of
https://github.com/DarrylNixon/drawbridge
synced 2024-04-22 12:17:07 -07:00
47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
#!/usr/bin/env python
|
|
|
|
import asyncio
|
|
import websockets
|
|
import json
|
|
|
|
connected = set()
|
|
|
|
|
|
def sanitize(message):
|
|
# A very secure sanitization function.
|
|
return message.replace('<', '').replace('>', '')
|
|
|
|
|
|
async def handler(websocket):
|
|
try:
|
|
connected.add(websocket)
|
|
print(f"Connected: {websocket.remote_address[0]}")
|
|
while True:
|
|
try:
|
|
message = await websocket.recv()
|
|
sanitized_message = sanitize(message)
|
|
sanitized_sender = sanitize(websocket.remote_address[0])
|
|
|
|
payload = json.dumps({
|
|
'sender': sanitized_sender,
|
|
'message': sanitized_message
|
|
})
|
|
|
|
print(f"{websocket.remote_address[0]} says: {message}")
|
|
for conn in connected:
|
|
await conn.send(payload)
|
|
|
|
except Exception:
|
|
break
|
|
finally:
|
|
print(f"Disconnected: {websocket.remote_address[0]}.")
|
|
connected.remove(websocket)
|
|
|
|
|
|
async def main():
|
|
async with websockets.serve(handler, "", 80, compression=None):
|
|
await asyncio.Future()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|