21 |
21 |
|
22 |
22 |
from django.utils.six.moves.urllib import parse as urllib
|
23 |
23 |
|
24 |
|
from quixote import get_publisher, get_response, get_session, redirect, get_session_manager
|
|
24 |
from quixote import get_publisher, get_response, get_session, redirect, get_session_manager, get_request
|
25 |
25 |
from quixote.directory import Directory
|
26 |
26 |
from quixote.html import htmltext, TemplateIO
|
27 |
27 |
from quixote.util import StaticDirectory
|
... | ... | |
343 |
343 |
except errors.TraversalError:
|
344 |
344 |
pass
|
345 |
345 |
|
346 |
|
return root.RootDirectory()._q_traverse(path)
|
|
346 |
output = root.RootDirectory()._q_traverse(path)
|
|
347 |
return self.automatic_sso(output)
|
|
348 |
|
|
349 |
def automatic_sso(self, output):
|
|
350 |
request = get_request()
|
|
351 |
response = get_response()
|
|
352 |
|
|
353 |
OPENED_SESSION_COOKIE = get_publisher().get_site_option('idp_session_cookie_name')
|
|
354 |
PASSIVE_TRIED_COOKIE = 'PASSIVE_TRIED_COOKIE'
|
|
355 |
if OPENED_SESSION_COOKIE not in request.cookies and PASSIVE_TRIED_COOKIE in request.cookies:
|
|
356 |
response.expire_cookie(PASSIVE_TRIED_COOKIE)
|
|
357 |
return output
|
|
358 |
elif OPENED_SESSION_COOKIE in request.cookies and PASSIVE_TRIED_COOKIE not in request.cookies:
|
|
359 |
ident_methods = get_cfg('identification', {}).get('methods', [])
|
|
360 |
idps = get_cfg('idp', {})
|
|
361 |
if request.user:
|
|
362 |
return output
|
|
363 |
if len(idps) != 1:
|
|
364 |
return output
|
|
365 |
if ident_methods and 'idp' not in ident_methods:
|
|
366 |
return output
|
|
367 |
response.set_cookie(PASSIVE_TRIED_COOKIE, '1')
|
|
368 |
url = request.get_url()
|
|
369 |
query = request.get_query()
|
|
370 |
if query:
|
|
371 |
url += '?' + query
|
|
372 |
return root.tryauth(url)
|
|
373 |
else:
|
|
374 |
return output
|
347 |
375 |
|
348 |
376 |
def _q_lookup(self, component):
|
349 |
377 |
# is this a category ?
|
350 |
|
-
|