diff options
Diffstat (limited to 'embed.cgi')
-rwxr-xr-x | embed.cgi | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/embed.cgi b/embed.cgi new file mode 100755 index 0000000..99aa636 --- /dev/null +++ b/embed.cgi @@ -0,0 +1,123 @@ +#!/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' + } + + 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: 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: 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: {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>""") + |