69 lines
2.7 KiB
Python
69 lines
2.7 KiB
Python
__author__ = 'rolandh'
|
|
|
|
from saml2 import soap
|
|
from saml2 import samlp
|
|
from saml2 import config
|
|
from saml2 import ecp
|
|
|
|
from saml2.profile import ecp as ecp_prof
|
|
from saml2.profile import paos
|
|
from saml2.client import Saml2Client
|
|
|
|
def _eq(l1, l2):
|
|
if len(l1) == len(l2):
|
|
return set(l1) == set(l2)
|
|
else:
|
|
return len(l1) == len(l2)
|
|
|
|
def test_multiple_soap_headers():
|
|
xml_str = open("ecp_soap.xml").read()
|
|
res = soap.class_instances_from_soap_enveloped_saml_thingies(xml_str,
|
|
[ecp_prof,
|
|
paos,
|
|
samlp])
|
|
|
|
assert res["body"].c_tag == "AuthnRequest"
|
|
|
|
assert len(res["header"]) == 3
|
|
headers = ["{%s}%s" % (i.c_namespace, i.c_tag) for i in res["header"]]
|
|
print headers
|
|
assert _eq(headers,['{urn:liberty:paos:2003-08}Request',
|
|
'{urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp}Request',
|
|
'{urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp}RelayState'])
|
|
|
|
_relay_state = None
|
|
|
|
for item in res["header"]:
|
|
if item.c_tag == "RelayState" and item.c_namespace == ecp_prof.NAMESPACE:
|
|
_relay_state = item
|
|
|
|
assert _relay_state
|
|
assert _relay_state.actor == "http://schemas.xmlsoap.org/soap/actor/next"
|
|
|
|
class TestECPClient(object):
|
|
def setup_class(self):
|
|
conf = config.SPConfig()
|
|
conf.load_file("server_conf")
|
|
self.client = Saml2Client(conf)
|
|
|
|
def test_ecp_authn(self):
|
|
ssid, soap_req = ecp.ecp_auth_request(self.client,
|
|
"urn:mace:example.com:saml:roland:idp",
|
|
"id1")
|
|
print soap_req
|
|
response = soap.class_instances_from_soap_enveloped_saml_thingies(
|
|
soap_req,
|
|
[paos,
|
|
ecp_prof,
|
|
samlp])
|
|
print response
|
|
assert len(response["header"]) == 2
|
|
assert response["body"].c_tag == "AuthnRequest"
|
|
assert response["body"].c_namespace == samlp.NAMESPACE
|
|
headers = ["{%s}%s" % (i.c_namespace,
|
|
i.c_tag) for i in response["header"]]
|
|
print headers
|
|
assert _eq(headers,['{urn:liberty:paos:2003-08}Request',
|
|
#'{urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp}Request',
|
|
'{urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp}RelayState'])
|