aboutsummaryrefslogtreecommitdiff
path: root/cgi-bin/webring_redirect.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'cgi-bin/webring_redirect.cgi')
-rwxr-xr-xcgi-bin/webring_redirect.cgi96
1 files changed, 96 insertions, 0 deletions
diff --git a/cgi-bin/webring_redirect.cgi b/cgi-bin/webring_redirect.cgi
new file mode 100755
index 0000000..2b114cc
--- /dev/null
+++ b/cgi-bin/webring_redirect.cgi
@@ -0,0 +1,96 @@
+#! /usr/bin/env python
+
+import cgi
+import requests
+import random
+import json
+
+WEBSITE_URL = "http://nathansmith117.beevomit.org"
+
+def handle_be_crime_do_gay_webring():
+ try:
+ # https://codeberg.org/artemislena/artemislena.eu#be-crime-do-gay-webring
+ req = requests.get("https://artemislena.eu/services/downloads/beCrimeDoGay.json", timeout=5)
+ req.raise_for_status
+ return req.json()
+ except requests.exceptions.Timeout:
+ return "Status: 503 Service Unavailable"
+ except Exception:
+ return "Status: 500 Internal Error"
+
+def handle_fields():
+ form = cgi.FieldStorage()
+
+ # Name of the webring name and direction.
+ name = form.getvalue("name")
+ direction = form.getvalue("direction")
+
+ if name is None or direction is None:
+ return "Not enough optinos"
+
+ # Callbacks to handle webrings.
+ webrings = {
+ "gay": handle_be_crime_do_gay_webring
+ }
+
+ website_list = webrings[name]()
+
+ if website_list == None or website_list == []:
+ return "Can't get website list for webring"
+ if type(website_list) is str:
+ return website_list
+
+ # Find this website in webring.
+ position = 0
+
+ try:
+ position = website_list.index(WEBSITE_URL)
+ except ValueError:
+ return "Website not in webring"
+
+ # Handle direction
+ redirect_website = ""
+
+ if direction == "next":
+ redirect_website = website_list[(position + 1) % len(website_list)]
+ elif direction == "previous":
+ redirect_website = website_list[(position - 1) % len(website_list)]
+ elif direction == "random":
+ website_list.pop(position)
+ redirect_website = random.choice(website_list)
+ else:
+ return "Invalid direction"
+
+ return [
+ f"redirecting to <a href=\"{redirect_website}\">{redirect_website}</a>",
+ f"<meta http-equiv=\"refresh\" content=\"0; URL={redirect_website}\"/>"
+ ]
+
+def display_html(fields_reponse):
+ print("Content-Type: text/html")
+
+ html_text = """
+ <!DOCTYPE html>
+ <html>
+
+ <head>
+ {redirect}
+ <title>Webrings</title>
+ </head>
+
+ <body>
+ {fields_reponse}
+ </body>
+ </html>
+ """
+
+ if type(fields_reponse) is list:
+ html_text = html_text.format(fields_reponse=fields_reponse[0], redirect=fields_reponse[1])
+ else:
+ html_text = html_text.format(fields_reponse=fields_reponse, redirect="")
+
+ print(html_text)
+
+fields_reponse = handle_fields()
+display_html(fields_reponse)
+