viveksantayana
f548221a10
Moved most of app definitions out of guard function to use wsgi Updated configuration files and referencing of .env values. Local version needs dotenv or exporting of env variables. Dockerised version works fine without load_dotenv. Ready to test now!
81 lines
2.7 KiB
Python
81 lines
2.7 KiB
Python
from datetime import datetime
|
|
|
|
from flask import Flask, flash, request, render_template
|
|
from flask.helpers import url_for
|
|
from flask.json import jsonify
|
|
from flask_bootstrap import Bootstrap
|
|
from pymongo import MongoClient
|
|
from pymongo.errors import ConnectionFailure
|
|
from flask_wtf.csrf import CSRFProtect, CSRFError
|
|
from flask_mail import Mail
|
|
|
|
from common.security import check_keyfile_exists, generate_keyfile
|
|
import config
|
|
|
|
def create_app():
|
|
app = Flask(__name__)
|
|
app.config.from_object(config.TestingConfig())
|
|
|
|
from common.blueprints import cookie_consent
|
|
|
|
from admin.views import views as admin_views
|
|
from admin.auth import auth as admin_auth
|
|
from admin.results import results
|
|
from quiz.views import views as quiz_views
|
|
|
|
app.register_blueprint(quiz_views, url_prefix = '/')
|
|
app.register_blueprint(admin_views, url_prefix = '/admin/')
|
|
app.register_blueprint(admin_auth, url_prefix = '/admin/')
|
|
app.register_blueprint(results, url_prefix = '/admin/results/')
|
|
|
|
app.register_blueprint(cookie_consent, url_prefix = '/cookies/')
|
|
|
|
@app.before_request
|
|
def check_cookie_consent():
|
|
if request.cookies.get('cookie_consent') == 'True':
|
|
return
|
|
if any([ request.path.startswith(x) for x in [ '/admin/static/', '/static/', '/cookies/' ] ]):
|
|
return
|
|
flash(f'<strong>Cookie Consent</strong>: This web site only stores minimal, functional cookies. By using this site, you consent to this use of cookies. For more information, see our <a href="{url_for("quiz_views.privacy")}">privacy policy</a>.', 'cookie_alert')
|
|
|
|
from admin.views import check_login, get_user_from_db, get_id_from_cookie
|
|
|
|
@app.context_processor
|
|
def inject_now():
|
|
return {'now': datetime.utcnow()}
|
|
|
|
@app.context_processor
|
|
def _check_login():
|
|
return dict(check_login = check_login)
|
|
|
|
@app.context_processor
|
|
def _get_user_from_db():
|
|
return dict(get_user_from_db = get_user_from_db)
|
|
|
|
@app.context_processor
|
|
def _get_id_from_cookie():
|
|
return dict(get_id_from_cookie = get_id_from_cookie)
|
|
|
|
@app.errorhandler(404)
|
|
def _404_handler(e):
|
|
return render_template('/quiz/404.html'), 404
|
|
|
|
@app.errorhandler(CSRFError)
|
|
def csrf_error_handler(error):
|
|
return jsonify({ 'error': 'Could not validate a secure connection.'} ), 400
|
|
|
|
if not check_keyfile_exists():
|
|
generate_keyfile()
|
|
|
|
Bootstrap(app)
|
|
csrf = CSRFProtect(app)
|
|
|
|
return app
|
|
|
|
app = create_app()
|
|
mongo = MongoClient(app.config['MONGO_URI'])
|
|
db = mongo[app.config['MONGO_INITDB_DATABASE']]
|
|
mail = Mail(app)
|
|
|
|
if __name__ == '__main__':
|
|
app.run(host=app.config['APP_HOST']) |