diff --git a/example/idp2/idp.py b/example/idp2/idp.py index 1db9577..607302f 100755 --- a/example/idp2/idp.py +++ b/example/idp2/idp.py @@ -306,9 +306,10 @@ class SSO(Service): _info = self.unpack_redirect() try: - _info = IDP.ticket[_info["key"]] + _key = _info["key"] + _info = IDP.ticket[_key] self.req_info = _info["req_info"] - del IDP.ticket[_info["key"]] + del IDP.ticket[_key] except KeyError: self.req_info = IDP.parse_authn_request(_info["SAMLRequest"], BINDING_HTTP_REDIRECT) @@ -832,40 +833,27 @@ def application(environ, start_response): except KeyError: user = None + url_patterns = AUTHN_URLS if not user: logger.info("-- No USER --") - for regex, callback in NON_AUTHN_URLS: - match = re.search(regex, path) - if match is not None: - try: - environ['myapp.url_args'] = match.groups()[0] - except IndexError: - environ['myapp.url_args'] = path + # insert NON_AUTHN_URLS first in case there is no user + url_patterns = NON_AUTHN_URLS + url_patterns - logger.debug("Callback: %s" % (callback,)) - if isinstance(callback, tuple): - cls = callback[0](environ, start_response, user) - func = getattr(cls, callback[1]) - return func() - else: - return callback(environ, start_response, user) - for regex, callback in AUTHN_URLS: - match = re.search(regex, path) - if match is not None: - cls = callback[0](environ, start_response, user) - func = getattr(cls, callback[1]) - return func() - else: - for regex, callback in AUTHN_URLS: - match = re.search(regex, path) - if match is not None: - try: - environ['myapp.url_args'] = match.groups()[0] - except IndexError: - environ['myapp.url_args'] = path + for regex, callback in url_patterns: + match = re.search(regex, path) + if match is not None: + try: + environ['myapp.url_args'] = match.groups()[0] + except IndexError: + environ['myapp.url_args'] = path + + logger.debug("Callback: %s" % (callback,)) + if isinstance(callback, tuple): cls = callback[0](environ, start_response, user) func = getattr(cls, callback[1]) return func() + return callback(environ, start_response, user) + return not_found(environ, start_response) # ---------------------------------------------------------------------------- @@ -900,4 +888,4 @@ if __name__ == '__main__': SRV = make_server('', PORT, application) print "IdP listening on port: %s" % PORT - SRV.serve_forever() \ No newline at end of file + SRV.serve_forever()