1
1
# -*- coding: utf-8 -*-
2
2
import babel
3
3
4
- from flask import Flask , redirect , render_template , session , url_for
4
+ from flask import Flask , redirect , render_template , session , url_for , request
5
5
from flask_sso import SSO
6
6
from flask_sqlalchemy import SQLAlchemy
7
7
from flask_wtf .csrf import CSRFProtect
@@ -72,21 +72,9 @@ def login(user_info):
72
72
else :
73
73
user = db .session .query (models .User ).filter_by (uuid = uuid ).first ()
74
74
try :
75
- session ["user_uuid" ] = user .uuid
76
- session ["user_email" ] = user .uuid
77
- session ["user_name" ] = user .name
78
- session ["user_id" ] = user .id
79
- session ["user_roles" ] = [role .name for role in user .role .all ()]
80
- session ["user_orgs" ] = ", " .join (
81
- org .name for org in user .organization .all ()
82
- )
83
- session ["user_role_ids" ] = [role .id for role in user .role .all ()]
84
- session ["user_org_ids" ] = [org .id for org in user .organization .all ()]
85
- roles = [i > 1 for i in session ["user_role_ids" ]]
86
- session ["can_edit" ] = True if all (roles ) and roles else []
75
+ _register_user_to_session (uuid )
87
76
except AttributeError :
88
- return redirect ("/" )
89
-
77
+ pass
90
78
return redirect ("/" )
91
79
92
80
@app .route ("/logout" )
@@ -96,6 +84,19 @@ def logout():
96
84
session .clear ()
97
85
return redirect (app .config .get ("LOGOUT_URL" ))
98
86
87
+ @app .route ("/ext-login" )
88
+ def ext_login ():
89
+ header_name = app .config .get ("AUTH_HEADER_NAME" , 'X-Authenticated-User' )
90
+ if header_name not in request .headers :
91
+ return render_template ("errors/401.j2" )
92
+ uuid = request .headers .get (header_name )
93
+ if uuid :
94
+ try :
95
+ _register_user_to_session (uuid )
96
+ except AttributeError :
97
+ return render_template ("errors/401.j2" )
98
+ return redirect ("/" )
99
+
99
100
@app .route ("/" )
100
101
@auth_required
101
102
def index ():
@@ -177,4 +178,20 @@ def format_datetime(value):
177
178
178
179
return babel .dates .format_datetime (value , format )
179
180
181
+ def _register_user_to_session (uuid : str ):
182
+ user = db .session .query (models .User ).filter_by (uuid = uuid ).first ()
183
+ session ["user_uuid" ] = user .uuid
184
+ session ["user_email" ] = user .uuid
185
+ session ["user_name" ] = user .name
186
+ session ["user_id" ] = user .id
187
+ session ["user_roles" ] = [role .name for role in user .role .all ()]
188
+ session ["user_orgs" ] = ", " .join (
189
+ org .name for org in user .organization .all ()
190
+ )
191
+ session ["user_role_ids" ] = [role .id for role in user .role .all ()]
192
+ session ["user_org_ids" ] = [org .id for org in user .organization .all ()]
193
+ roles = [i > 1 for i in session ["user_role_ids" ]]
194
+ session ["can_edit" ] = True if all (roles ) and roles else []
195
+
180
196
return app
197
+
0 commit comments