-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
119 lines (100 loc) · 3.13 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import os
import secrets
from flask import Flask, jsonify
from flask_smorest import Api
from flask_jwt_extended import JWTManager
from dotenv import load_dotenv
from flask_cors import CORS
from db import db
import models
from resources.user import blp as UserBlueprint
from resources.transaction import TransactionBlueprint
from resources.coupon import CouponBlueprint
def create_app(db_url=None):
app = Flask(__name__)
load_dotenv()
app.config["API_TITLE"] = "MarTech REST API"
app.config["API_VERSION"] = "v1"
app.config["OPENAPI_VERSION"] = "3.0.3"
app.config["OPENAPI_URL_PREFIX"] = "/"
app.config["OPENAPI_SWAGGER_UI_PATH"] = "/"
app.config[
"OPENAPI_SWAGGER_UI_URL"
] = "https://cdn.jsdelivr.net/npm/swagger-ui-dist/"
app.config["SQLALCHEMY_DATABASE_URI"] = db_url or os.getenv("DATABASE_URL", "sqlite:///data.db")
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.config["PROPAGATE_EXCEPTIONS"] = True
app.config['API_SPEC_OPTIONS'] = {
'security':[{"bearerAuth": []}],
'components':{
"securitySchemes":
{
"bearerAuth": {
"type":"http",
"scheme": "bearer",
"bearerFormat": "JWT"
}
}
}
}
db.init_app(app)
api = Api(app)
# Enable CORS
CORS(app)
app.config["JWT_SECRET_KEY"] = "121055982679089208576533403122492505118"
jwt = JWTManager(app)
# JWT configuration starts
@jwt.expired_token_loader
def expired_token_callback(jwt_header, jwt_payload):
return (
jsonify({"message": "O token venceu.", "error": "token_expired"}),
401,
)
@jwt.invalid_token_loader
def invalid_token_callback(error):
return (
jsonify(
{"message": "Verificação falhou.", "error": "invalid_token"}
),
401,
)
@jwt.unauthorized_loader
def missing_token_callback(error):
return (
jsonify(
{
"description": "Não possui um token de acesso.",
"error": "authorization_required",
}
),
401,
)
@jwt.needs_fresh_token_loader
def token_not_fresh_callback(jwt_header, jwt_payload):
return (
jsonify(
{
"description": "O token não é novo.",
"error": "fresh_token_required",
}
),
401,
)
@jwt.revoked_token_loader
def revoked_token_callback(jwt_header, jwt_payload):
return (
jsonify(
{"description": "O token foi revogado.", "error": "token_revoked"}
),
401,
)
# JWT configuration ends
with app.app_context():
db.create_all()
api.register_blueprint(UserBlueprint)
api.register_blueprint(TransactionBlueprint)
api.register_blueprint(CouponBlueprint)
if __name__ == "__main__":
app = create_app()
app.run(debug=True)
return app