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/') 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//') 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)