gem-message/write.cgi

49 lines
1.2 KiB
Python
Executable File

#!/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")