11import os
22
3- from flask import (Flask , request , render_template , redirect , session ,
4- make_response )
3+ from flask import Flask , request , render_template , redirect , session , make_response
54
65from onelogin .saml2 .auth import OneLogin_Saml2_Auth
76from onelogin .saml2 .utils import OneLogin_Saml2_Utils
87
98
109app = Flask (__name__ )
11- app .config [' SECRET_KEY' ] = ' onelogindemopytoolkit'
12- app .config [' SAML_PATH' ] = os .path .join (os .path .dirname (os .path .abspath (__file__ )), ' saml' )
10+ app .config [" SECRET_KEY" ] = " onelogindemopytoolkit"
11+ app .config [" SAML_PATH" ] = os .path .join (os .path .dirname (os .path .abspath (__file__ )), " saml" )
1312
1413
1514def init_saml_auth (req ):
16- auth = OneLogin_Saml2_Auth (req , custom_base_path = app .config [' SAML_PATH' ])
15+ auth = OneLogin_Saml2_Auth (req , custom_base_path = app .config [" SAML_PATH" ])
1716 return auth
1817
1918
2019def prepare_flask_request (request ):
2120 # If server is behind proxys or balancers use the HTTP_X_FORWARDED fields
2221 return {
23- ' https' : 'on' if request .scheme == ' https' else ' off' ,
24- ' http_host' : request .host ,
25- ' script_name' : request .path ,
26- ' get_data' : request .args .copy (),
22+ " https" : "on" if request .scheme == " https" else " off" ,
23+ " http_host" : request .host ,
24+ " script_name" : request .path ,
25+ " get_data" : request .args .copy (),
2726 # Uncomment if using ADFS as IdP, https://github.com/onelogin/python-saml/pull/144
2827 # 'lowercase_urlencoding': True,
29- ' post_data' : request .form .copy ()
28+ " post_data" : request .form .copy (),
3029 }
3130
3231
33- @app .route ('/' , methods = [' GET' , ' POST' ])
32+ @app .route ("/" , methods = [" GET" , " POST" ])
3433def index ():
3534 req = prepare_flask_request (request )
3635 auth = init_saml_auth (req )
@@ -41,57 +40,57 @@ def index():
4140 attributes = False
4241 paint_logout = False
4342
44- if ' sso' in request .args :
43+ if " sso" in request .args :
4544 return redirect (auth .login ())
4645 # If AuthNRequest ID need to be stored in order to later validate it, do instead
4746 # sso_built_url = auth.login()
4847 # request.session['AuthNRequestID'] = auth.get_last_request_id()
4948 # return redirect(sso_built_url)
50- elif ' sso2' in request .args :
51- return_to = ' %sattrs/' % request .host_url
49+ elif " sso2" in request .args :
50+ return_to = " %sattrs/" % request .host_url
5251 return redirect (auth .login (return_to ))
53- elif ' slo' in request .args :
52+ elif " slo" in request .args :
5453 name_id = session_index = name_id_format = name_id_nq = name_id_spnq = None
55- if ' samlNameId' in session :
56- name_id = session [' samlNameId' ]
57- if ' samlSessionIndex' in session :
58- session_index = session [' samlSessionIndex' ]
59- if ' samlNameIdFormat' in session :
60- name_id_format = session [' samlNameIdFormat' ]
61- if ' samlNameIdNameQualifier' in session :
62- name_id_nq = session [' samlNameIdNameQualifier' ]
63- if ' samlNameIdSPNameQualifier' in session :
64- name_id_spnq = session [' samlNameIdSPNameQualifier' ]
54+ if " samlNameId" in session :
55+ name_id = session [" samlNameId" ]
56+ if " samlSessionIndex" in session :
57+ session_index = session [" samlSessionIndex" ]
58+ if " samlNameIdFormat" in session :
59+ name_id_format = session [" samlNameIdFormat" ]
60+ if " samlNameIdNameQualifier" in session :
61+ name_id_nq = session [" samlNameIdNameQualifier" ]
62+ if " samlNameIdSPNameQualifier" in session :
63+ name_id_spnq = session [" samlNameIdSPNameQualifier" ]
6564
6665 return redirect (auth .logout (name_id = name_id , session_index = session_index , nq = name_id_nq , name_id_format = name_id_format , spnq = name_id_spnq ))
67- elif ' acs' in request .args :
66+ elif " acs" in request .args :
6867 request_id = None
69- if ' AuthNRequestID' in session :
70- request_id = session [' AuthNRequestID' ]
68+ if " AuthNRequestID" in session :
69+ request_id = session [" AuthNRequestID" ]
7170
7271 auth .process_response (request_id = request_id )
7372 errors = auth .get_errors ()
7473 not_auth_warn = not auth .is_authenticated ()
7574 if len (errors ) == 0 :
76- if ' AuthNRequestID' in session :
77- del session [' AuthNRequestID' ]
78- session [' samlUserdata' ] = auth .get_attributes ()
79- session [' samlNameId' ] = auth .get_nameid ()
80- session [' samlNameIdFormat' ] = auth .get_nameid_format ()
81- session [' samlNameIdNameQualifier' ] = auth .get_nameid_nq ()
82- session [' samlNameIdSPNameQualifier' ] = auth .get_nameid_spnq ()
83- session [' samlSessionIndex' ] = auth .get_session_index ()
75+ if " AuthNRequestID" in session :
76+ del session [" AuthNRequestID" ]
77+ session [" samlUserdata" ] = auth .get_attributes ()
78+ session [" samlNameId" ] = auth .get_nameid ()
79+ session [" samlNameIdFormat" ] = auth .get_nameid_format ()
80+ session [" samlNameIdNameQualifier" ] = auth .get_nameid_nq ()
81+ session [" samlNameIdSPNameQualifier" ] = auth .get_nameid_spnq ()
82+ session [" samlSessionIndex" ] = auth .get_session_index ()
8483 self_url = OneLogin_Saml2_Utils .get_self_url (req )
85- if ' RelayState' in request .form and self_url != request .form [' RelayState' ]:
84+ if " RelayState" in request .form and self_url != request .form [" RelayState" ]:
8685 # To avoid 'Open Redirect' attacks, before execute the redirection confirm
8786 # the value of the request.form['RelayState'] is a trusted URL.
88- return redirect (auth .redirect_to (request .form [' RelayState' ]))
87+ return redirect (auth .redirect_to (request .form [" RelayState" ]))
8988 elif auth .get_settings ().is_debug_active ():
9089 error_reason = auth .get_last_error_reason ()
91- elif ' sls' in request .args :
90+ elif " sls" in request .args :
9291 request_id = None
93- if ' LogoutRequestID' in session :
94- request_id = session [' LogoutRequestID' ]
92+ if " LogoutRequestID" in session :
93+ request_id = session [" LogoutRequestID" ]
9594 dscb = lambda : session .clear ()
9695 url = auth .process_slo (request_id = request_id , delete_session_cb = dscb )
9796 errors = auth .get_errors ()
@@ -105,37 +104,28 @@ def index():
105104 elif auth .get_settings ().is_debug_active ():
106105 error_reason = auth .get_last_error_reason ()
107106
108- if ' samlUserdata' in session :
107+ if " samlUserdata" in session :
109108 paint_logout = True
110- if len (session [' samlUserdata' ]) > 0 :
111- attributes = session [' samlUserdata' ].items ()
109+ if len (session [" samlUserdata" ]) > 0 :
110+ attributes = session [" samlUserdata" ].items ()
112111
113- return render_template (
114- 'index.html' ,
115- errors = errors ,
116- error_reason = error_reason ,
117- not_auth_warn = not_auth_warn ,
118- success_slo = success_slo ,
119- attributes = attributes ,
120- paint_logout = paint_logout
121- )
112+ return render_template ("index.html" , errors = errors , error_reason = error_reason , not_auth_warn = not_auth_warn , success_slo = success_slo , attributes = attributes , paint_logout = paint_logout )
122113
123114
124- @app .route (' /attrs/' )
115+ @app .route (" /attrs/" )
125116def attrs ():
126117 paint_logout = False
127118 attributes = False
128119
129- if ' samlUserdata' in session :
120+ if " samlUserdata" in session :
130121 paint_logout = True
131- if len (session [' samlUserdata' ]) > 0 :
132- attributes = session [' samlUserdata' ].items ()
122+ if len (session [" samlUserdata" ]) > 0 :
123+ attributes = session [" samlUserdata" ].items ()
133124
134- return render_template ('attrs.html' , paint_logout = paint_logout ,
135- attributes = attributes )
125+ return render_template ("attrs.html" , paint_logout = paint_logout , attributes = attributes )
136126
137127
138- @app .route (' /metadata/' )
128+ @app .route (" /metadata/" )
139129def metadata ():
140130 req = prepare_flask_request (request )
141131 auth = init_saml_auth (req )
@@ -145,11 +135,11 @@ def metadata():
145135
146136 if len (errors ) == 0 :
147137 resp = make_response (metadata , 200 )
148- resp .headers [' Content-Type' ] = ' text/xml'
138+ resp .headers [" Content-Type" ] = " text/xml"
149139 else :
150- resp = make_response (', ' .join (errors ), 500 )
140+ resp = make_response (", " .join (errors ), 500 )
151141 return resp
152142
153143
154144if __name__ == "__main__" :
155- app .run (host = ' 0.0.0.0' , port = 8000 , debug = True )
145+ app .run (host = " 0.0.0.0" , port = 8000 , debug = True )
0 commit comments