Skip to content
Snippets Groups Projects
app.py 2.19 KiB
Newer Older
Luka's avatar
Luka committed
from flask import Flask, jsonify
from flask_cors import CORS
from flask_jwt_extended import JWTManager
from flask_migrate import Migrate
from jsonschema.exceptions import ValidationError
from werkzeug.exceptions import BadRequest
Luka's avatar
Luka committed

# These imports are required
from areas import api_v1
Luka's avatar
Luka committed
from cliapp import cli
from web import web
from areas import users
from areas import apps
from areas import auth
Luka's avatar
Luka committed
from cliapp import cliapp
from web import login
from database import db

from helpers import (
    BadRequest,
    KratosError,
Luka's avatar
Luka committed
    HydraError,
Davor's avatar
Davor committed
    Unauthorized,
    bad_request_error,
    validation_error,
    kratos_error,
    global_error,
Luka's avatar
Luka committed
    hydra_error,
Davor's avatar
Davor committed
    unauthorized_error,
Luka's avatar
Luka committed
from config import *
Luka's avatar
Luka committed

# Configure logging.
from logging.config import dictConfig
dictConfig({
    'version': 1,
    'formatters': {'default': {
        'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
    }},
    'handlers': {'wsgi': {
        'class': 'logging.StreamHandler',
        'stream': 'ext://flask.logging.wsgi_errors_stream',
        'formatter': 'default',
    }},
    'root': {
        'level': 'INFO',
        'handlers': ['wsgi'],
    }
})

Luka's avatar
Luka committed
app = Flask(__name__)
app.config["SECRET_KEY"] = SECRET_KEY
app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI
Luka's avatar
Luka committed
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = SQLALCHEMY_TRACK_MODIFICATIONS
Luka's avatar
Luka committed
cors = CORS(app)
Migrate(app, db)
db.init_app(app)

app.logger.setLevel(logging.INFO)
Luka's avatar
Luka committed
app.register_blueprint(api_v1)
app.register_blueprint(web)
Mart van Santen's avatar
Mart van Santen committed
app.register_blueprint(cli)
Luka's avatar
Luka committed

# Error handlers
app.register_error_handler(Exception, global_error)
app.register_error_handler(BadRequest, bad_request_error)
app.register_error_handler(ValidationError, validation_error)
app.register_error_handler(KratosError, kratos_error)
Luka's avatar
Luka committed
app.register_error_handler(HydraError, hydra_error)
Davor's avatar
Davor committed
app.register_error_handler(Unauthorized, unauthorized_error)
Luka's avatar
Luka committed
jwt = JWTManager(app)

# When token is not valid or missing handler
@jwt.invalid_token_loader
@jwt.unauthorized_loader
@jwt.expired_token_loader
def expired_token_callback(*args):
    return jsonify({"errorMessage": "Unauthorized"}), 401
Luka's avatar
Luka committed


Luka's avatar
Luka committed
def index():
Varac's avatar
Varac committed
    return "Stackspin API v1.0"