Cleaned up

This commit is contained in:
Roland Hedberg
2011-04-07 09:40:12 +02:00
parent d687bc4989
commit 6ee34a94f5

View File

@@ -17,8 +17,7 @@ def _expiration(timeout, format=None):
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
def dict_to_table(ava, lev=0, width=1): def dict_to_table(ava, lev=0, width=1):
txt = [] txt = ['<table border=%s bordercolor="black">\n' % width]
txt.append('<table border=%s bordercolor="black">\n' % width)
for prop, valarr in ava.items(): for prop, valarr in ava.items():
txt.append("<tr>\n") txt.append("<tr>\n")
if isinstance(valarr, basestring): if isinstance(valarr, basestring):
@@ -66,14 +65,20 @@ FORM_SPEC = """<form name="myform" method="post" action="%s">
def sso(environ, start_response, user, logger): def sso(environ, start_response, user, logger):
""" Supposted to return a POST """ """ Supposted to return a POST """
#edict = dict_to_table(environ) #edict = dict_to_table(environ)
#logger and logger.info("Environ keys: %s" % environ.keys()) #if logger: logger.info("Environ keys: %s" % environ.keys())
logger.info("--- In SSO ---") logger.info("--- In SSO ---")
query = None
if "QUERY_STRING" in environ: if "QUERY_STRING" in environ:
logger and logger.info("Query string: %s" % environ["QUERY_STRING"]) if logger:
logger.info("Query string: %s" % environ["QUERY_STRING"])
query = parse_qs(environ["QUERY_STRING"]) query = parse_qs(environ["QUERY_STRING"])
elif "s2repoze.qinfo" in environ: elif "s2repoze.qinfo" in environ:
query = environ["s2repoze.qinfo"] query = environ["s2repoze.qinfo"]
if not query:
start_response('401 Unauthorized', [('Content-Type', 'text/plain')])
return ['Unknown user']
# base 64 encoded request # base 64 encoded request
req_info = IDP.parse_authn_request(query["SAMLRequest"][0]) req_info = IDP.parse_authn_request(query["SAMLRequest"][0])
logger.info("parsed OK") logger.info("parsed OK")
@@ -92,21 +97,20 @@ def sso(environ, start_response, user, logger):
req_info["request"].name_id_policy, req_info["request"].name_id_policy,
userid) userid)
except Exception, excp: except Exception, excp:
logger and logger.error("Exception: %s" % (excp,)) if logger: logger.error("Exception: %s" % (excp,))
raise raise
logger and logger.info("AuthNResponse: %s" % authn_resp) if logger: logger.info("AuthNResponse: %s" % authn_resp)
response = [] response = ["<head>",
response.append("<head>") "<title>SAML 2.0 POST</title>",
response.append("<title>SAML 2.0 POST</title>") "</head><body>",
response.append("</head><body>") FORM_SPEC % (req_info["consumer_url"],
response.append(FORM_SPEC % (req_info["consumer_url"], base64.b64encode("".join(authn_resp)), "/"),
base64.b64encode("".join(authn_resp)),"/")) """<script type="text/javascript" language="JavaScript">""",
response.append("""<script type="text/javascript" language="JavaScript">""") " document.myform.submit();",
response.append(" document.myform.submit();") """</script>""",
response.append("""</script>""") "</body>"]
response.append("</body>")
start_response('200 OK', [('Content-Type', 'text/html')]) start_response('200 OK', [('Content-Type', 'text/html')])
return response return response
@@ -130,24 +134,29 @@ def not_found(environ, start_response, logger):
def not_authn(environ, start_response, logger): def not_authn(environ, start_response, logger):
if "QUERY_STRING" in environ: if "QUERY_STRING" in environ:
query = parse_qs(environ["QUERY_STRING"]) query = parse_qs(environ["QUERY_STRING"])
logger and logger.info("query: %s" % query) if logger: logger.info("query: %s" % query)
start_response('401 Unauthorized', [('Content-Type', 'text/plain')]) start_response('401 Unauthorized', [('Content-Type', 'text/plain')])
return ['Unknown user'] return ['Unknown user']
def slo(environ, start_response, user, logger): def slo(environ, start_response, user, logger):
""" Expects a HTTP-redirect logout request """ """ Expects a HTTP-redirect logout request """
query = None
if "QUERY_STRING" in environ: if "QUERY_STRING" in environ:
logger and logger.info("Query string: %s" % environ["QUERY_STRING"]) if logger: logger.info("Query string: %s" % environ["QUERY_STRING"])
query = parse_qs(environ["QUERY_STRING"]) query = parse_qs(environ["QUERY_STRING"])
if not query:
start_response('401 Unauthorized', [('Content-Type', 'text/plain')])
return ['Unknown user']
try: try:
req_info = IDP.parse_logout_request(query["SAMLRequest"][0], req_info = IDP.parse_logout_request(query["SAMLRequest"][0],
BINDING_HTTP_REDIRECT) BINDING_HTTP_REDIRECT)
logger.info("LOGOUT request parsed OK") logger.info("LOGOUT request parsed OK")
logger.info("REQ_INFO: %s" % req_info.message) logger.info("REQ_INFO: %s" % req_info.message)
except KeyError, exc: except KeyError, exc:
logger and logger.info("logout request error: %s" % (exc,)) if logger: logger.info("logout request error: %s" % (exc,))
# return error reply # return error reply
# look for the subject # look for the subject
@@ -220,8 +229,8 @@ def application(environ, start_response):
path = environ.get('PATH_INFO', '').lstrip('/') path = environ.get('PATH_INFO', '').lstrip('/')
logger = environ.get('repoze.who.logger') logger = environ.get('repoze.who.logger')
logger and logger.info("<application> PATH: %s" % path) if logger: logger.info("<application> PATH: %s" % path)
logger and logger.info("Cookie: %s" % (kaka,)) if logger: logger.info("Cookie: %s" % (kaka,))
for regex, callback in URLS: for regex, callback in URLS:
if user: if user:
match = re.search(regex, path) match = re.search(regex, path)
@@ -230,10 +239,10 @@ def application(environ, start_response):
environ['myapp.url_args'] = match.groups()[0] environ['myapp.url_args'] = match.groups()[0]
except IndexError: except IndexError:
environ['myapp.url_args'] = path environ['myapp.url_args'] = path
logger and logger.info("callback: %s" % (callback,)) if logger: logger.info("callback: %s" % (callback,))
return callback(environ, start_response, user, logger) return callback(environ, start_response, user, logger)
else: else:
logger and logger.info("-- No USER --") if logger: logger.info("-- No USER --")
return not_authn(environ, start_response, logger) return not_authn(environ, start_response, logger)
return not_found(environ, start_response, logger) return not_found(environ, start_response, logger)