Skip to content

Commit 357d073

Browse files
author
Roland Hedberg
committed
Merge pull request #211 from HaToHo/master
Updated wsgi sp to follow pefim
2 parents 81e50ff + 00a3a04 commit 357d073

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

example/sp-wsgi/sp.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
import logging
33
import re
44
import argparse
5+
from saml2.extension.pefim import SPCertEnc
56
import service_conf
67

78
from Cookie import SimpleCookie
89
from urlparse import parse_qs
910
import sys
1011

11-
from saml2 import BINDING_HTTP_REDIRECT
12+
from saml2 import BINDING_HTTP_REDIRECT, element_to_extension_element
1213
from saml2 import BINDING_SOAP
1314
from saml2 import time_util
1415
from saml2 import ecp
@@ -33,6 +34,8 @@
3334
from saml2.s_utils import sid
3435
from saml2.s_utils import rndstr
3536
#from srtest import exception_trace
37+
from saml2.md import Extensions
38+
import xmldsig as ds
3639

3740
logger = logging.getLogger("")
3841
hdlr = logging.FileHandler('spx.log')
@@ -152,6 +155,7 @@ def __init__(self):
152155
self.uid2user = {}
153156
self.cookie_name = "spauthn"
154157
self.outstanding_queries = {}
158+
self.outstanding_certs = {}
155159
self.relay_state = {}
156160
self.user = {}
157161
self.result = {}
@@ -348,7 +352,7 @@ def do(self, response, binding, relay_state="", mtype="response"):
348352

349353
try:
350354
self.response = self.sp.parse_authn_request_response(
351-
response, binding, self.outstanding_queries)
355+
response, binding, self.outstanding_queries, self.cache.outstanding_certs)
352356
except UnknownPrincipal, excp:
353357
logger.error("UnknownPrincipal: %s" % (excp,))
354358
resp = ServiceError("UnknownPrincipal: %s" % (excp,))
@@ -551,13 +555,31 @@ def redirect_to_auth(self, _cli, entity_id, came_from):
551555
"assertion_consumer_service"]
552556
# just pick one
553557
endp, return_binding = acs[0]
558+
559+
extensions = None
560+
cert = None
561+
if _cli.config.generate_cert_func is not None:
562+
cert_str, req_key_str = _cli.config.generate_cert_func()
563+
cert = {
564+
"cert": cert_str,
565+
"key": req_key_str
566+
}
567+
spcertenc = SPCertEnc(x509_data=ds.X509Data(
568+
x509_certificate=ds.X509Certificate(text=cert_str)))
569+
extensions = Extensions(extension_elements=[
570+
element_to_extension_element(spcertenc)])
571+
554572
req_id, req = _cli.create_authn_request(destination,
555-
binding=return_binding)
573+
binding=return_binding, extensions=extensions)
556574
_rstate = rndstr()
557575
self.cache.relay_state[_rstate] = came_from
558576
ht_args = _cli.apply_binding(_binding, "%s" % req, destination,
559577
relay_state=_rstate)
560578
_sid = req_id
579+
580+
if cert is not None:
581+
self.cache.outstanding_certs[_sid] = cert
582+
561583
except Exception, exc:
562584
logger.exception(exc)
563585
resp = ServiceError(

0 commit comments

Comments
 (0)