You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.8 KiB
56 lines
1.8 KiB
4 years ago
|
# coding=utf-8
|
||
|
|
||
2 years ago
|
import os
|
||
|
|
||
3 years ago
|
from flask import Flask
|
||
5 years ago
|
from flask_socketio import SocketIO
|
||
|
|
||
2 years ago
|
from .get_args import args
|
||
|
from .config import settings, base_url
|
||
5 years ago
|
|
||
4 years ago
|
socketio = SocketIO()
|
||
5 years ago
|
|
||
|
|
||
|
def create_app():
|
||
|
# Flask Setup
|
||
|
app = Flask(__name__,
|
||
2 years ago
|
template_folder=os.path.join(os.path.dirname(os.path.dirname(__file__)), '..', 'frontend', 'build'),
|
||
|
static_folder=os.path.join(os.path.dirname(os.path.dirname(__file__)), '..', 'frontend', 'build', 'static'),
|
||
5 years ago
|
static_url_path=base_url.rstrip('/') + '/static')
|
||
5 years ago
|
app.wsgi_app = ReverseProxied(app.wsgi_app)
|
||
5 years ago
|
app.route = prefix_route(app.route, base_url.rstrip('/'))
|
||
|
|
||
4 years ago
|
app.config["SECRET_KEY"] = settings.general.flask_secret_key
|
||
4 years ago
|
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True
|
||
|
app.config['JSON_AS_ASCII'] = False
|
||
5 years ago
|
|
||
|
if args.dev:
|
||
|
app.config["DEBUG"] = True
|
||
|
else:
|
||
|
app.config["DEBUG"] = False
|
||
|
|
||
3 years ago
|
socketio.init_app(app, path=base_url.rstrip('/')+'/api/socket.io', cors_allowed_origins='*',
|
||
|
async_mode='threading', allow_upgrades=False, transports='polling')
|
||
5 years ago
|
return app
|
||
|
|
||
|
|
||
|
def prefix_route(route_function, prefix='', mask='{0}{1}'):
|
||
|
# Defines a new route function with a prefix.
|
||
|
# The mask argument is a `format string` formatted with, in that order: prefix, route
|
||
|
def newroute(route, *args, **kwargs):
|
||
|
# New function to prefix the route
|
||
|
return route_function(mask.format(prefix, route), *args, **kwargs)
|
||
|
|
||
|
return newroute
|
||
5 years ago
|
|
||
|
|
||
|
class ReverseProxied(object):
|
||
|
def __init__(self, app):
|
||
|
self.app = app
|
||
|
|
||
|
def __call__(self, environ, start_response):
|
||
|
scheme = environ.get('HTTP_X_FORWARDED_PROTO')
|
||
|
if scheme:
|
||
|
environ['wsgi.url_scheme'] = scheme
|
||
|
return self.app(environ, start_response)
|