#!/usr/bin/env python3
import http.server
import socketserver
import sys

PORT = 8080

class Handler(http.server.SimpleHTTPRequestHandler):
    extensions_map = {
        **http.server.SimpleHTTPRequestHandler.extensions_map,
        '.xhtml': 'application/xhtml+xml',
    }

    def do_GET(self):
        if self.path.startswith('/xss-fired'):
            sys.stderr.write(f'[SERVER] *** XSS BEACON RECEIVED: {self.path} ***\n')
            sys.stderr.flush()
            self.send_response(204)
            self.end_headers()
            return
        return super().do_GET()

    def do_POST(self):
        if self.path.startswith('/xss-fired'):
            length = int(self.headers.get('Content-Length', 0) or 0)
            self.rfile.read(length)
            sys.stderr.write(f'[SERVER] *** XSS BEACON RECEIVED: {self.path} ***\n')
            sys.stderr.flush()
            self.send_response(204)
            self.end_headers()
            return
        self.send_response(404)
        self.end_headers()

    def log_message(self, fmt, *args):
        sys.stderr.write('[SERVER] ' + (fmt % args) + '\n')

socketserver.TCPServer.allow_reuse_address = True
with socketserver.TCPServer(('127.0.0.1', PORT), Handler) as httpd:
    sys.stderr.write(f'[SERVER] listening on http://127.0.0.1:{PORT}/\n')
    httpd.serve_forever()
