"""Serve static files; show Safari/iOS notice for private Space on root request.""" import http.server import re import urllib.parse SAFARI_IOS_PAGE = """ Open in another browser

Private Space – use another browser

Private Spaces may not work in Safari or on iOS. Open the link below in Chrome or Firefox (on Mac or Windows) to view this Space.

""" SAFARI_IOS_PATTERN = re.compile( r"(Safari|iPhone|iPad|iPod)(?!.*Chrome|.*CriOS|.*FxiOS)", re.IGNORECASE ) class Handler(http.server.SimpleHTTPRequestHandler): def do_GET(self): path = urllib.parse.unquote(self.path) path = path.split("?")[0].lstrip("/") or "index.html" if path in ("", "index.html") and self.headers.get("User-Agent"): ua = self.headers.get("User-Agent", "") if SAFARI_IOS_PATTERN.search(ua): self.send_response(200) self.send_header("Content-type", "text/html; charset=utf-8") self.end_headers() self.wfile.write(SAFARI_IOS_PAGE.encode("utf-8")) return return super().do_GET() def end_headers(self): self.send_header("Cache-Control", "no-store") super().end_headers() if __name__ == "__main__": http.server.test(HandlerClass=Handler, port=7860, bind="0.0.0.0")