#!/usr/bin/env python3 """ A Flask-based questing platform. """ #TODO: look into how cloudflare proxying interacts with nginx import os import time from flask import Flask from flask_paranoid import Paranoid from flask_session import Session from flask_socketio import SocketIO from werkzeug.contrib.fixers import ProxyFix import database as db from views import views from events import socketio app = Flask(__name__) app.wsgi_app = ProxyFix(app.wsgi_app) app.register_blueprint(views) app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 app.config['SESSION_TYPE'] = 'filesystem' app.jinja_env.trim_blocks = True app.jinja_env.lstrip_blocks = True app.jinja_env.undefined = "StrictUndefined" Session(app) socketio.init_app(app) paranoid = Paranoid(app) paranoid.redirect_view = 'views.index' def init(): """ Initializes the application. """ # init secret key if os.path.exists("secret_key"): with open("secret_key", "rb") as file: secret_key = file.read() else: secret_key = os.urandom(64) with open("secret_key", "wb") as file: file.write(secret_key) app.secret_key = secret_key @app.template_filter("strftime") def unix2string(unix): """ Converts a unix timestamp into a string. """ form = "%Y-%m-%d %H:%M:%S" t = time.localtime(unix) return time.strftime(form, t) @app.template_filter("dice_chal") def get_dice_challenge(post_id): """ Returns the dice challenge for the given post_id. """ return db.get_dice_call(post_id)[3] @app.template_filter("is_write_in") def is_write_in(post_id): """ Returns true if the provided post_id is a poll write-in's are allowed in it. """ poll = db.get_poll(post_id) if poll and poll[3]: return True else: return False @app.after_request def minify(res): """ Minify the HTML response to decrease bandwidth usage. """ if res.content_type == "text/html; charset=utf-8" and False: res.set_data( res.get_data(as_text=True).replace("\n", "").replace("\t", "")) return res init() if __name__ == "__main__": app.run(host='0.0.0.0', port=5050)