#! /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\n" except Exception: return "Status: 500 Internal Error\n" 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 "Status: 400 Bad Request\n" # Callbacks to handle webrings. webrings = { "gay": handle_be_crime_do_gay_webring } website_list = webrings[name]() if website_list == None or website_list == []: return "Status: 500 Internal Error\n" 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 "Status: 400 Bad Request\n\nSite not added to webring yet" # 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 "Status: 400 Bad Request\n" return f"Status: 302 Found\nLocation: {redirect_website}\n" print("Content-Type: text/html") print(handle_fields())