55from celery import Celery
66from flask_caching import Cache
77from depot .manager import DepotManager
8+ from flask_login import LoginManager
89
910mail = Mail ()
1011db = Orator ()
1112celery = Celery (__name__ , broker = DevelopmentConfig .CELERY_BROKER_URL , result_backend = DevelopmentConfig .RESULT_BACKEND )
1213cache = Cache ()
14+ login_manager = LoginManager ()
1315
1416
1517def factory (config = DevelopmentConfig ) -> Flask :
@@ -35,6 +37,9 @@ def factory(config=DevelopmentConfig) -> Flask:
3537 db .init_app (app )
3638 db .app = app
3739
40+ # initialize login_manager
41+ register_login_manager (app )
42+
3843 # configure depotmanager
3944 DepotManager .configure (name = 'default' , config = {
4045 'depot.storage_path' : 'storage/public'
@@ -46,14 +51,33 @@ def factory(config=DevelopmentConfig) -> Flask:
4651
4752 register_blueprints (app )
4853 register_logging (app )
54+ register_error_handlers (app )
4955
5056 return app
5157
5258
59+ def register_login_manager (app ):
60+ login_manager .login_view = 'auth.login_page'
61+ login_manager .init_app (app )
62+ login_manager .session_protection = 'strong'
63+ login_manager .login_message = 'Please login to access this page.'
64+ login_manager .login_message_category = 'info'
65+ login_manager .needs_refresh_message = 'To protect your account, please reauthenticate to access this page.'
66+ login_manager .needs_refresh_message_category = 'info'
67+ login_manager .refresh_view = 'login'
68+
69+ @login_manager .user_loader
70+ def load_user (user_id ):
71+ from app .models .User import User
72+ return User .find (user_id )
73+
74+
5375def register_blueprints (app ):
76+ from routes .auth import router as auth_router
5477 from routes .web import router as web_router
5578 from routes .api import router as api_router
5679
80+ app .register_blueprint (auth_router )
5781 app .register_blueprint (web_router )
5882 app .register_blueprint (api_router )
5983
@@ -86,24 +110,39 @@ def register_error_handlers(app) -> None:
86110 # 400 - Bad Request
87111 @app .errorhandler (400 )
88112 def bad_request (e ):
89- return render_template ('errors/400.html' ), 400
113+ return render_template ('errors/400.html' , context = {
114+ "title" : 400 ,
115+ "message" : "Bad Request"
116+ }), 400
90117
91118 # 403 - Forbidden
92119 @app .errorhandler (403 )
93120 def forbidden (e ):
94- return render_template ('errors/403.html' ), 403
121+ return render_template ('errors/403.html' , context = {
122+ "title" : 403 ,
123+ "message" : "Forbidden"
124+ }), 403
95125
96126 # 404 - Page Not Found
97127 @app .errorhandler (404 )
98128 def page_not_found (e ):
99- return render_template ('errors/404.html' ), 404
129+ return render_template ('errors/404.html' , context = {
130+ "title" : 404 ,
131+ "message" : "Page not found"
132+ }), 404
100133
101134 # 405 - Method Not Allowed
102135 @app .errorhandler (405 )
103136 def method_not_allowed (e ):
104- return render_template ('errors/405.html' ), 405
137+ return render_template ('errors/405.html' , context = {
138+ "title" : 405 ,
139+ "message" : "Method Not Allowed"
140+ }), 405
105141
106142 # 500 - Internal Server Error
107143 @app .errorhandler (500 )
108144 def server_error (e ):
109- return render_template ('errors/500.html' ), 500
145+ return render_template ('errors/500.html' , context = {
146+ "title" : 500 ,
147+ "message" : "Internal Server Error"
148+ }), 500
0 commit comments