49 lines
1.2 KiB
Python
Executable file
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")
|