Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1from flask import Flask 

2from jwt import ExpiredSignatureError 

3 

4from src.addons import db, ma, migrate, cors, bcrypt, jwt, flask_uuid, socketio 

5from src.utils import err_resp 

6import settings 

7 

8 

9def create_app(config=None): 

10 """ 

11 Create application 

12 """ 

13 #: Flask application 

14 app = Flask(__name__) 

15 if config is None: 

16 app.config.from_object(settings) 

17 else: 

18 app.config.from_object(config) 

19 

20 # Registers flask extensions 

21 db.init_app(app) 

22 ma.init_app(app) 

23 jwt.init_app(app) 

24 bcrypt.init_app(app) 

25 cors.init_app(app, resources={r"*": {"origins": "*"}}) 

26 migrate.init_app(app, db=db) 

27 flask_uuid.init_app(app) 

28 socketio.init_app(app, cors_allowed_origins="*") 

29 

30 # JWT overrided method 

31 from .model import RevokedTokenModel 

32 

33 @jwt.token_in_blacklist_loader 

34 def check_if_token_is_revoked(decrypted_token): 

35 return RevokedTokenModel.is_revoked(decrypted_token['jti']) 

36 

37 @jwt.user_identity_loader 

38 def user_identity_lookup(user): 

39 return user.uuid 

40 

41 @jwt.user_claims_loader 

42 def add_claims_to_access_token(user): 

43 return {'permissions': [p.permission for role in user.role for p in role.permission]} 

44 

45 @jwt.expired_token_loader 

46 def custom_expired_token_loader_callback(): 

47 return err_resp('The token has expired', 401) 

48 

49 @app.errorhandler(ExpiredSignatureError) 

50 def handle_expired_token(e): 

51 return err_resp('The token has expired', 401) 

52 

53 # Register blueprints 

54 from .resources import api_bp 

55 

56 app.register_blueprint(api_bp, url_prefix="/api") 

57 

58 # Register websocket 

59 from .resources.ws import SandboxResource 

60 

61 socketio.on_namespace(SandboxResource("/recommend")) 

62 

63 return app, socketio