#!/usr/bin/env python3
"""HTTP server for the MojoJS POC.

Serves:
  /poc.html        from this directory
  /gen/...         from the Chromium build's gen/ directory (mojom-lite.js
                   bindings)

Usage:
  CHROMIUM_OUT=/path/to/chromium/src/out/asan python3 server.py [port]
  # default CHROMIUM_OUT=../out/asan, port=8080
"""
import http.server
import os
import socketserver
import sys

PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 8080
HERE = os.path.dirname(os.path.abspath(__file__))
OUT_DIR = os.environ.get(
    'CHROMIUM_OUT',
    os.path.abspath(os.path.join(HERE, '..', 'out', 'asan')))
GEN_DIR = os.path.join(OUT_DIR, 'gen')


class Handler(http.server.SimpleHTTPRequestHandler):
  def translate_path(self, path):  # noqa: N802
    p = path.split('?', 1)[0].split('#', 1)[0]
    if p.startswith('/gen/'):
      return os.path.join(GEN_DIR, p[len('/gen/'):])
    return os.path.join(HERE, p.lstrip('/'))

  def end_headers(self):  # noqa: N802
    self.send_header('Cache-Control', 'no-store')
    super().end_headers()


if __name__ == '__main__':
  if not os.path.isdir(GEN_DIR):
    sys.stderr.write(
        'WARNING: gen dir not found at %s\n'
        '         set CHROMIUM_OUT=/path/to/chromium/src/out/<build>\n'
        % GEN_DIR)
  socketserver.TCPServer.allow_reuse_address = True
  with socketserver.TCPServer(('127.0.0.1', PORT), Handler) as httpd:
    print('Serving POC at http://127.0.0.1:%d/poc.html' % PORT)
    print('  /gen/ -> %s' % GEN_DIR)
    httpd.serve_forever()
