#!/usr/bin/env python3
"""Local-only exfil demo server. Serves demo2.html, logs /collect requests to
exfil-log.txt so the user can SEE the captured data. Binds 127.0.0.1 only."""
import http.server
import socketserver
import urllib.parse
import datetime
import os

LOG = "/tmp/driveby-demo/exfil-log.txt"
DIR = "/tmp/driveby-demo"

class Handler(http.server.SimpleHTTPRequestHandler):
    def __init__(self, *a, **kw):
        super().__init__(*a, directory=DIR, **kw)

    def log_message(self, fmt, *args):
        # standard access log to stderr (visible in process output)
        super().log_message(fmt, *args)

    def do_GET(self):
        parsed = urllib.parse.urlparse(self.path)
        if parsed.path == "/collect":
            qs = urllib.parse.parse_qs(parsed.query)
            keys = qs.get("keys", [""])[0]
            browser = qs.get("browser", [""])[0]
            line = "[%s] CAPTURED keys=%r browser=%r" % (
                datetime.datetime.now().isoformat(), keys, browser)
            with open(LOG, "a") as f:
                f.write(line + "\n")
            body = b"OK: data logged (localhost demo)"
            self.send_response(200)
            self.send_header("Content-Type", "text/plain")
            self.send_header("Content-Length", str(len(body)))
            self.end_headers()
            self.wfile.write(body)
            return
        return super().do_GET()

socketserver.TCPServer.allow_reuse_address = True
with socketserver.TCPServer(("127.0.0.1", 8898), Handler) as httpd:
    print("exfil demo server on http://127.0.0.1:8898/demo2.html", flush=True)
    httpd.serve_forever()
