summaryrefslogtreecommitdiff
path: root/embed.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'embed.cgi')
-rwxr-xr-xembed.cgi123
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}">&lt; 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 &gt;</a></p>
+ </main>
+ </body>
+</html>""")
+