initial working state

This commit is contained in:
Ville Rantanen
2018-12-02 23:11:32 +02:00
commit 083915e69a
23 changed files with 837 additions and 0 deletions

93
abot.py Normal file
View File

@@ -0,0 +1,93 @@
import sqlite3
from flask import Flask, request, g, url_for, \
render_template
from revprox import ReverseProxied
from utils import *
import manager
DATABASE = 'abot.sqlite'
DEBUG = False
SECRET_KEY = 'otwet6oi539iosf'
QUESTIONS = 'questions' # path to questions
# create our little application :)
app = Flask(__name__)
app.config.from_object(__name__)
app.wsgi_app = ReverseProxied(app.wsgi_app)
def connect_db():
return sqlite3.connect(app.config['DATABASE'])
@app.before_request
def before_request():
g.db = connect_db()
@app.teardown_request
def teardown_request(exception):
db = getattr(g, 'db', None)
if db is not None:
db.close()
@app.route('/')
def index():
return render_template('index.html')
@app.route('/preview/<key>')
def preview(key):
if not is_key(key):
return render_template('blank.html', message = "Unknown key")
form = parse_form(key)
if not form:
return render_template('blank.html', message = "Error creating form")
if not is_draft(form):
return render_template('blank.html', message = "Preview not enabled")
valid_for = time_to_expiry(form)
return render_template(
'preview.html',
key = key,
form = form,
valid_for = valid_for
)
@app.route('/vote/<key>/<token>')
def vote(key, token):
if not is_key(key):
return render_template('blank.html', message = "Unknown key")
form = parse_form(key)
if not form:
return render_template('blank.html', message = "Error creating form")
if is_draft(form):
return render_template('blank.html', message = "Not published")
if is_expired(form):
return render_template('blank.html', message = "Voting has closed")
if has_voted(key, token):
return render_template('blank.html', message = "Token already used")
valid_for = time_to_expiry(form)
return render_template('vote.html', form = form, key = key, token = token, valid_for = valid_for)
@app.route('/save', methods=['POST'])
def save_vote():
key = request.form['key']
token = request.form['token']
if not is_key(key):
return render_template('blank.html', message = "Unknown key")
form = parse_form(key)
if not form:
return render_template('blank.html', message = "Error creating form")
create_voter_table(g.db, key)
if is_draft(form):
return render_template('blank.html', message = "Not published")
if is_expired(form):
return render_template('blank.html', message = "Voting has closed")
if has_voted(key, token):
return render_template('blank.html', message = "Token already used")
create_result_table(key)
write_vote(key, token, request.form, form) # using request.
return render_template('thank_you.html')
if __name__ == "__main__":
manager.main(DATABASE, QUESTIONS)