"""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")