master
nathaniel smith 2015-08-02 19:02:39 -07:00
parent 6e467b35e9
commit 7005888d34
3 changed files with 117 additions and 5 deletions

View File

@ -5,10 +5,14 @@ import random
import time import time
from sys import argv from sys import argv
from tempfile import mkdtemp, mkstemp from tempfile import mkdtemp, mkstemp
from pyhocon import ConfigFactory
import requests
from flask import Flask, render_template, request, redirect from flask import Flask, render_template, request, redirect
from stats import get_data from stats import get_data
## disgusting hack for python 3.4 ## disgusting hack for python 3.4.0
import pkgutil import pkgutil
orig_get_loader = pkgutil.get_loader orig_get_loader = pkgutil.get_loader
def get_loader(name): def get_loader(name):
@ -17,12 +21,17 @@ def get_loader(name):
except AttributeError: except AttributeError:
pass pass
pkgutil.get_loader = get_loader pkgutil.get_loader = get_loader
########### ##########
SITE_NAME = 'tilde.town' SITE_NAME = 'tilde.town'
app = Flask('~cgi') app = Flask('~cgi')
@lru_cache(maxsize=32)
def cfg(k):
conf = ConfigFactory.parse_file('cfg.conf')
return conf[k]
@lru_cache(maxsize=32) @lru_cache(maxsize=32)
def site_context(): def site_context():
return get_data() return get_data()
@ -73,8 +82,43 @@ def post_guestbook():
return redirect("/guestbook") return redirect("/guestbook")
@app.route('/helpdesk', methods=['GET']) @app.route('/helpdesk', methods=['GET'])
def helpdesk(): def get_helpdesk():
return "HELPDESK UNDER CONSTRUCTION" status = request.args.get('status', 'unsubmitted')
desc = request.args.get('desc', '')
context = {
'status': status,
'desc': desc,
}
context.update(site_context())
return render_template('helpdesk.html', **context)
def send_email(data):
name = data.get('name', 'anonymous')
email = data['email']
request_type = data['type']
desc = request.form['desc']
response = requests.post(
cfg('mailgun_url'),
auth=("api", cfg('mailgun_key')),
data={"from": "root@tilde.town",
"to": cfg('trello'),
"subject": "{} from {} <{}>".format(request_type, name, email),
"text": desc})
return response.status_code == 200
@app.route('/helpdesk', methods=['POST'])
def post_helpdesk():
desc = request.form['desc']
captcha = request.form['hmm']
if captcha == 'scrop':
status = "success" if send_email(request.form) else "fail"
else:
status = "fail"
# should we bother restoring other fields beside desc?
return redirect('/helpdesk?status={}&desc={}'.format(status, desc))
if __name__ == '__main__': if __name__ == '__main__':
if len(argv) == 2: if len(argv) == 2:

View File

@ -2,7 +2,7 @@
<html> <html>
<head> <head>
<title>{{site_name}} guestbook</title> <title>{{site_name}} guestbook</title>
<link rel="stylesheet" type="text/css" href="http://tilde.town/style.css"> <link rel="stylesheet" type="text/css" href="{{site_url}}/style.css">
</head> </head>
<body> <body>
<h1>{{site_name}} guestbook</h1> <h1>{{site_name}} guestbook</h1>

View File

@ -0,0 +1,68 @@
<!DOCTYPE html>
<html>
<head>
<title> {{ site_name }} help desk </title>
<link rel="stylesheet" href="{{ site_url }}/style.css">
</head>
<body>
<h1>{{ site_name }} help desk</h1>
<p>
hi! this form exists to make it a little easier for {{ site_name }} admins
to help people out with system issues like logging in, installing
packages, and general questions about how to do stuff.
</p>
<p>
in using this system, recall that there are only a handful of admins and
you'll get a response (by email) as they are able to help out.
</p>
<p>
thanks!
</p>
{% if status == 'fail' %}
<p style="background-color:red">
oops, sorry! that didn't work. either something is wrong on the server or
there was a problem with the form..try again?
</p>
{% endif %}
{% if status == 'success' %}
<p style="background-color:green">
hooray, your request has been sent.
</p>
{% endif %}
<form method="post">
<p>
name: <input type="text" name="name" maxlength="140">
</p>
<p>
email: <input type="email" name="email" maxlength="140" required="true">
</p>
<p>
type of issue:
<select name="type">
<option value="login">help logging in</option>
<option value="concern">concern about the site or another user</option>
<option value="package">new package installed</option>
<option value="question">a question</option>
<option value="other">something else</option>
</select>
</p>
<p>
describe your issue (in 500 characters or less):<br>
<textarea name="desc" required="true" rows="10" cols="50" maxlength="500">{{desc}}</textarea>
</p>
<p>
are you a robot?<br>
<input type="radio" name="hmm" value="scriz" checked="true">yeah<br>
<input type="radio" name="hmm" value="scrop">nope<br>
</p>
<p>
<input type="submit" value="<3">
</p>
</form>
</body>
</html>