#!/usr/bin/env python3 from georgedata import george order = list(george.keys()) # dicts guarantee key order as of 3.7 from urllib.parse import urlparse import sys from os import getenv if __name__ == "__main__": print("Content-Type: text/html") qs = getenv("QUERY_STRING") qs = qs.replace("%20"," ") try: ind = order.index(qs) except ValueError: print() print('<h1 style="color: red">no</h1>') else: correct_hn = urlparse(george[qs]).hostname rf = getenv("HTTP_REFERER",None) if rf is not None: our_hn = urlparse(rf).hostname if our_hn != correct_hn: print() print('<h1 style="color: red">no</h1>') sys.exit(0) l = len(order) ni = (ind + 1)%l pi = (ind - 1)%l n = george[order[ni]] p = george[order[pi]] ref = getenv("HTTP_REFERER","the") print(f"Content-Security-Policy: frame-ancestors {correct_hn} http://{correct_hn};") print() print( f"""<!DOCTYPE html> <html> <head> <base target="_parent"> </head> <body> <style> body,html {{ overflow: hidden; font-family: sans-serif; padding:0; margin:0; }} main {{ margin:0; padding-left: 5px; padding-right: 5px; height: 45px; border: 1px solid black; box-shadow: 5px 5px black; /*background-color: pink;*/ display: flex; flex-wrap: nowrap; justify-content: space-between; }} #george {{ color: cyan; text-decoration: underline; text-decoration-color: blue; text-decoration-thickness: 2px; font-style: oblique; animation: 2s infinite alternate george; }} @media (prefers-reduced-motion) {{ #george {{ animation: none; }} }} #noble {{ font-size: min(3vw, 12pt); }} p {{ white-space: nowrap; align-self: center; }} @keyframes george {{ from {{ letter-spacing: 1px; }} to {{ letter-spacing: 6px; }} }} a {{ color: blue; }} </style> <main> <p><a href="{p}">< PREV</a></p> <p id="noble"> The <a href="https://george.gh0.pw" id="george">GEORGE</a> is a noble animal. </p> <p><a href="{n}">NEXT ></a></p> </main> </body> </html>""")