#! /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 {redirect_website}", f"" ] def display_html(fields_reponse): print("Content-Type: text/html") html_text = """ {redirect} Webrings {fields_reponse} """ 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)