#!/usr/bin/env python3 import os, urllib, cgitb, datetime, dns.resolver from dotenv import load_dotenv # Log errors to disk only cgitb.enable(display=0, logdir="/var/log/gemini", format="plain") # Load config load_dotenv() msg_file = os.getenv("MESSAGE_FILE") # Load CGI vars msg = os.getenv("QUERY_STRING") ip = os.getenv("REMOTE_ADDR") name = os.getenv("REMOTE_USER") if msg == "": # Prompt for message print("10 Leave a Message\r") else: # Default name if no client cert provided name = name or "Anonymous" try: # Look up client RDNS host = str( dns.resolver.resolve_address( ip )[0] ) except dns.resolver.NXDOMAIN as e: # No RDNS set, use IP host = ip # Time of message now = datetime.datetime.now() dt = now.strftime("%Y-%m-%d %H:%M:%S") # Message template fromLine = "## Message from " + name + " (" + host + ") at " + dt + "\n" msgLine = urllib.parse.unquote(msg) + "\n" # Save message to file f = open(msg_file, "a") f.write( fromLine + msgLine ) # Generate confirmation screen print("20 text/gemini; lang=en-GB\r") print("# Message Sent\n") print( msgLine ) print("=> / Back")