#!/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())