#!/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, parse_qs import sys from os import getenv if __name__ == "__main__": colors = { "bg": 'white', "fg": 'black', "george": '#3d3db8', "links": 'blue', "underline": "blue", } print("Content-Type: text/html") qs = getenv("QUERY_STRING") member,real_qs = (qs.split('&', 1) + [''])[:2] member=member.replace('%20',' ') query = parse_qs(real_qs) try: ind = order.index(member) except ValueError: print() print(f'<h1 style="color: red">no</h1><p>unknown member {member}</p>') else: correct_hn = urlparse(george[member]).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><p>bad referer hostname</p>') sys.exit(0) for q in query.keys(): if q.startswith('c_'): color = query[q][0] if color.isalnum() or (color[0] == '#' and color[1:].isalnum()): colors[q[2:]] = color 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: sandbox allow-top-navigation; 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: {colors["bg"]}; color: {colors["fg"]}; display: flex; flex-wrap: nowrap; justify-content: space-between; }} #george {{ color: {colors["george"]}; text-decoration: underline; text-decoration-color: {colors["underline"]}; 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: {colors["links"]}; }} </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>""")