Titan/webapp/titanembeds/app.py

80 lines
2.8 KiB
Python
Raw Normal View History

from config import config
from .database import db
from flask import Flask, render_template, request, session, url_for, redirect, jsonify
2017-04-08 01:31:08 +02:00
from flask_sslify import SSLify
from titanembeds.utils import rate_limiter, discord_api, socketio, babel, redis_store, language_code_list
2017-08-19 07:09:13 +02:00
from .blueprints import api, user, admin, embed, gateway
import os
2017-07-22 04:06:45 +02:00
from titanembeds.database import get_administrators_list
import titanembeds.constants as constants
from datetime import timedelta
try:
import uwsgi
2017-08-20 21:56:54 +02:00
from gevent import monkey
monkey.patch_all()
except:
if config.get("websockets-mode", None) == "eventlet":
import eventlet
eventlet.monkey_patch()
elif config.get("websockets-mode", None) == "gevent":
from gevent import monkey
monkey.patch_all()
os.chdir(config['app-location'])
app = Flask(__name__, static_folder="static")
2017-09-05 08:54:54 +02:00
app.config['SQLALCHEMY_DATABASE_URI'] = config['database-uri']
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # Suppress the warning/no need this on for now.
app.config['RATELIMIT_HEADERS_ENABLED'] = True
app.config['SQLALCHEMY_POOL_RECYCLE'] = 250
app.config['SQLALCHEMY_POOL_SIZE'] = 100
app.config['RATELIMIT_STORAGE_URL'] = config["redis-uri"]
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=3)
app.config['REDIS_URL'] = config["redis-uri"]
app.secret_key = config['app-secret']
db.init_app(app)
2017-03-27 01:37:27 +02:00
rate_limiter.init_app(app)
2017-12-20 02:01:50 +01:00
if config.get("enable-ssl", False):
sslify = SSLify(app, permanent=True)
2017-08-20 21:56:54 +02:00
socketio.init_app(app, message_queue=config["redis-uri"], path='gateway', async_mode=config.get("websockets-mode", None))
babel.init_app(app)
redis_store.init_app(app)
app.register_blueprint(api.api, url_prefix="/api", template_folder="/templates")
app.register_blueprint(admin.admin, url_prefix="/admin", template_folder="/templates")
app.register_blueprint(user.user, url_prefix="/user", template_folder="/templates")
app.register_blueprint(embed.embed, url_prefix="/embed", template_folder="/templates")
2017-08-19 07:09:13 +02:00
socketio.on_namespace(gateway.Gateway('/gateway'))
@babel.localeselector
def get_locale():
param_lang = request.args.get("lang", None)
if param_lang in language_code_list():
return param_lang
return request.accept_languages.best_match(language_code_list())
@app.route("/")
def index():
return render_template("index.html.j2")
2017-05-11 04:12:26 +02:00
@app.route("/about")
def about():
return render_template("about.html.j2")
2017-09-12 06:06:29 +02:00
@app.route("/terms")
def terms():
return render_template("terms_and_conditions.html.j2")
@app.route("/privacy")
def privacy():
return render_template("privacy_policy.html.j2")
@app.before_first_request
def before_first_request():
discord_api.init_discordrest()
@app.context_processor
def context_processor():
return {"devs": get_administrators_list(), "constants": constants}