site/edit/save.py (39 lines of code) (raw):
#!/usr/bin/env python3
import os
import cgi
import json
import re
from email.mime.text import MIMEText
from subprocess import Popen, PIPE
print ("Content-Type: text/html\r\n\r\n")
print ("Received!")
try:
form = cgi.FieldStorage()
user = os.environ['HTTP_X_AUTHENTICATED_USER'] if 'HTTP_X_AUTHENTICATED_USER' in os.environ else "nobody"
f = form['file'].value if 'file' in form else None
if f and not re.search(r"([^-.a-zA-Z0-9])", f):
project = f
f = "%s.json" % f
js = {}
for k in form:
js[k] = form[k].value
with open("../json/projects/%s" % f, "w") as out:
json.dump(js, out, sort_keys=True, indent=0)
with open("../json/foundation/projects.json", "r") as g:
gjson = json.loads(g.read())
gjson[project] = js
with open("../json/foundation/projects.json", "w", encoding='utf-8') as og:
json.dump(gjson, og, sort_keys=True, indent=0, ensure_ascii=False)
text = """
Hello,
The following new base data was set for %s by %s:
%s
With regards,
projects.apache.org
""" % (project, user, json.dumps(js, indent=4))
msg = MIMEText(text)
msg["From"] = "no-reply@projects.apache.org"
msg["To"] = "dev@community.apache.org"
msg["Reply-To"] = "dev@community.apache.org, %s@apache.org" % user
msg["Subject"] = "Project base data change for project '%s'" % project
p = Popen(["/usr/sbin/sendmail", "-t"], stdin=PIPE)
p.communicate(msg.as_string())
print("And saved!")
else:
print("But no valid JSON was present!")
except Exception as err:
print("Exception: %s" % err)