88from flask_admin import Admin
99from flask_cors import CORS
1010from flask_migrate import Migrate
11- from flask_jwt_extended import JWTManager , jwt_required , get_jwt_identity , create_access_token , create_refresh_token , set_access_cookies , set_refresh_cookies , verify_jwt_in_request
11+ from flask_jwt_extended import (
12+ JWTManager ,
13+ jwt_required ,
14+ get_jwt_identity ,
15+ create_access_token ,
16+ create_refresh_token ,
17+ set_access_cookies ,
18+ set_refresh_cookies ,
19+ verify_jwt_in_request ,
20+ )
1221
1322from miminet_admin import (
1423 MiminetAdminIndexView ,
2433 insert_test_user ,
2534 login_index ,
2635 login_manager ,
27- remove_test_user , redirect_login ,
36+ remove_test_user ,
37+ redirect_login ,
2838)
2939from miminet_config import SECRET_KEY
3040from miminet_model import Network , db , init_db , User
7585)
7686
7787app .config .update (
78- JWT_SECRET_KEY = os .environ .get (' JWT_SECRET_KEY' , "secret-key" ),
79- JWT_TOKEN_LOCATION = [ ' cookies' ],
80- JWT_COOKIE_DOMAIN = f".{ os .environ .get ('BASE_DOMAIN' , 'local.tst' )} " ,
81- JWT_COOKIE_SECURE = False ,# True,
82- JWT_COOKIE_CSRF_PROTECT = False ,
83- JWT_COOKIE_SAMESITE = None ,
84- JWT_ACCESS_TOKEN_EXPIRES = timedelta (minutes = 3 ),
85- JWT_REFRESH_TOKEN_EXPIRES = timedelta (minutes = 30 )
88+ JWT_SECRET_KEY = os .environ .get (" JWT_SECRET_KEY" , "secret-key" ),
89+ JWT_TOKEN_LOCATION = [ " cookies" ],
90+ JWT_COOKIE_DOMAIN = f".{ os .environ .get ('BASE_DOMAIN' , 'local.tst' )} " ,
91+ JWT_COOKIE_SECURE = False , # True,
92+ JWT_COOKIE_CSRF_PROTECT = False ,
93+ JWT_COOKIE_SAMESITE = None ,
94+ JWT_ACCESS_TOKEN_EXPIRES = timedelta (minutes = 3 ),
95+ JWT_REFRESH_TOKEN_EXPIRES = timedelta (minutes = 30 ),
8696)
8797
88- CORS (app ,
89- resources = {
90- r"/*" : {
91- "origins" : os .environ .get ('ALLOWED_HOSTS' , ["http://quiz.local.tst" , "http://local.tst" ]),
92- "methods" : ["GET" , "POST" , "PUT" , "DELETE" , "OPTIONS" ],
93- "allow_headers" : ["Content-Type" , "Authorization" , "X-Requested-With" ],
94- "supports_credentials" : True ,
95- "max_age" : 3600
96- }
97- },
98- intercept_exceptions = False
98+ CORS (
99+ app ,
100+ resources = {
101+ r"/*" : {
102+ "origins" : os .environ .get (
103+ "ALLOWED_HOSTS" , ["http://quiz.local.tst" , "http://local.tst" ]
104+ ),
105+ "methods" : ["GET" , "POST" , "PUT" , "DELETE" , "OPTIONS" ],
106+ "allow_headers" : ["Content-Type" , "Authorization" , "X-Requested-With" ],
107+ "supports_credentials" : True ,
108+ "max_age" : 3600 ,
109+ }
110+ },
111+ intercept_exceptions = False ,
99112)
100113
101114# SQLAlchimy config
106119MAIN_URL = os .getenv ("MAIN_URL" )
107120
108121PUBLIC_CONFIG_KEYS = [
109- ' EXTERNAL_BASE_URL' ,
122+ " EXTERNAL_BASE_URL" ,
110123]
111124
125+
112126def get_database_uri (mode ):
113127 """
114128 Выбирает URI базы данных в зависимости от режима работы.
@@ -155,6 +169,7 @@ def get_database_uri(mode):
155169 else :
156170 raise ValueError (f"Unknown MODE: { mode } . Expected 'dev' or 'prod'" )
157171
172+
158173app .config ["SQLALCHEMY_DATABASE_URI" ] = get_database_uri (MODE )
159174app .config ["SQLALCHEMY_TRACK_MODIFICATIONS" ] = True
160175app .config ["SECRET_KEY" ] = SECRET_KEY
@@ -261,7 +276,9 @@ def get_database_uri(mode):
261276admin .add_view (SectionView (Section , db .session , name = "Разделы" ))
262277admin .add_view (QuestionView (Question , db .session , name = "Вопросы" ))
263278admin .add_view (AnswerView (Answer , db .session , name = "Ответы" ))
264- admin .add_view (QuestionCategoryView (QuestionCategory , db .session , name = "Категории вопросов" ))
279+ admin .add_view (
280+ QuestionCategoryView (QuestionCategory , db .session , name = "Категории вопросов" )
281+ )
265282admin .add_view (SessionQuestionView (SessionQuestion , db .session ))
266283admin .add_view (
267284 CreateCheckTaskView (
@@ -272,34 +289,43 @@ def get_database_uri(mode):
272289 )
273290)
274291
292+
275293@app .context_processor
276294def utility_processor ():
277295 return dict (external_url_for = external_url_for )
278296
297+
279298@app .context_processor
280299def inject_user ():
281300 try :
282301 verify_jwt_in_request ()
283302 current_user_id = get_jwt_identity ()
284303 current_user = User .query .filter (User .id == current_user_id ).first ()
285- return dict (current_user_id = current_user_id , is_authenticated = True , current_user = current_user )
304+ return dict (
305+ current_user_id = current_user_id ,
306+ is_authenticated = True ,
307+ current_user = current_user ,
308+ )
286309 except :
287310 return dict (current_user_id = None , is_authenticated = False , current_user = None )
288311
312+
289313@jwt .expired_token_loader
290314def expired_token_callback (jwt_header , jwt_payload ):
291315 if is_api_request ():
292316 return jsonify ({"msg" : "Token expired" }), 401
293317 else :
294318 return redirect_login ()
295319
320+
296321@jwt .invalid_token_loader
297322def invalid_token_callback (error ):
298323 if is_api_request ():
299324 return jsonify ({"msg" : "Invalid token" }), 422
300325 else :
301326 return redirect_login ()
302327
328+
303329@jwt .unauthorized_loader
304330def missing_token_callback (error ):
305331 if is_api_request ():
@@ -313,11 +339,11 @@ def confing_js():
313339 config = {key : os .getenv (key ) for key in PUBLIC_CONFIG_KEYS if os .getenv (key , "" )}
314340
315341 js_content = render_template_string (
316- open ('templates/config.js' , 'r' , encoding = 'utf-8' ).read (),
317- ** config
342+ open ("templates/config.js" , "r" , encoding = "utf-8" ).read (), ** config
318343 )
319344
320- return Response (js_content , mimetype = 'application/javascript' )
345+ return Response (js_content , mimetype = "application/javascript" )
346+
321347
322348@app .route ("/home" )
323349@jwt_required ()
@@ -331,14 +357,15 @@ def home():
331357 )
332358 return render_template ("home.html" , networks = networks )
333359
334- @app .route ('/refresh_access' , methods = ['POST' , 'GET' ])
360+
361+ @app .route ("/refresh_access" , methods = ["POST" , "GET" ])
335362@jwt_required (refresh = True )
336363def refresh_access ():
337364 identity = get_jwt_identity ()
338365 access_token = create_access_token (identity = identity )
339366 refresh_token = create_refresh_token (identity = identity )
340367
341- response = jsonify ({' msg' : ' access token refreshed' })
368+ response = jsonify ({" msg" : " access token refreshed" })
342369 set_access_cookies (response , access_token )
343370 set_refresh_cookies (response , refresh_token )
344371 return response
0 commit comments