from .config import Production as Config from .models import * from .extensions import bootstrap, csrf, db, login_manager, mail from .tools.logs import write from flask import flash, Flask, render_template, request from flask.helpers import abort, url_for from flask.json import jsonify from flask_wtf.csrf import CSRFError from werkzeug.middleware.proxy_fix import ProxyFix from datetime import datetime def create_app(): app = Flask(__name__) app.config.from_object(Config()) app.wsgi_app = ProxyFix(app.wsgi_app, x_proto= 1, x_host= 1) bootstrap.init_app(app) csrf.init_app(app) db.init_app(app) login_manager.init_app(app) mail.init_app(app) login_manager.login_view = 'admin._login' @login_manager.user_loader def _load_user(id): try: return User.query.filter_by(id=id).first() except Exception as exception: write('system.log', f'Database error when loading user fo login manager: {exception}') return abort(500) @app.before_request def _check_cookie_consent(): if request.cookies.get('cookie_consent'): return if any([ request.path.startswith(x) for x in [ '/admin/static/', '/root/', '/quiz/static', '/cookies/', '/admin/editor/static', '/admin/view/static' ] ]): return flash(f'Cookie Consent: This web site only stores minimal, functional cookies. It does not store any tracking information. By using this site, you consent to this use of cookies. For more information, see our privacy policy.', 'cookie_alert') @app.errorhandler(404) def _404_handler(error): return render_template('404.html') @app.errorhandler(CSRFError) def _csrf_handler(): return jsonify({'error':'Could not validate a secure connection.'}), 403 @app.context_processor def _now(): return {'now': datetime.now()} from .admin.views import admin from .api.views import api from .quiz.views import quiz from .views import views from .editor.views import editor from .view.views import view from .analysis.views import analysis app.register_blueprint(admin, url_prefix='/admin') app.register_blueprint(api, url_prefix='/api') app.register_blueprint(views) app.register_blueprint(quiz) app.register_blueprint(editor, url_prefix='/admin/editor') app.register_blueprint(view, url_prefix='/admin/view') app.register_blueprint(analysis, url_prefix='/admin/analysis') """Create Database Tables before First Request""" @app.before_first_request def _create_database_tables(): with app.app_context(): db.create_all() return app