All tests now pass in 2.7 and 3.4 .
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
language: python
|
||||
|
||||
env:
|
||||
- TOX_ENV=py27
|
||||
- TOX_ENV=py34
|
||||
|
||||
services:
|
||||
- mongodb
|
||||
|
||||
|
6
setup.py
6
setup.py
@@ -45,12 +45,6 @@ tests_require = [
|
||||
#'pytest-coverage',
|
||||
]
|
||||
|
||||
|
||||
# only for Python 2.6
|
||||
if sys.version_info < (2, 7):
|
||||
install_requires.append('argparse')
|
||||
install_requires.append('importlib')
|
||||
|
||||
setup(
|
||||
name='pysaml2',
|
||||
version='3.0.0',
|
||||
|
@@ -480,10 +480,10 @@ class AttributeConverter(object):
|
||||
"""
|
||||
attributes = []
|
||||
for key, value in attrvals.items():
|
||||
key = key.lower()
|
||||
lkey = key.lower()
|
||||
try:
|
||||
attributes.append(factory(saml.Attribute,
|
||||
name=self._to[key],
|
||||
name=self._to[lkey],
|
||||
name_format=self.name_format,
|
||||
friendly_name=key,
|
||||
attribute_value=do_ava(value)))
|
||||
|
@@ -399,7 +399,7 @@ class Config(object):
|
||||
disable_validation = False
|
||||
|
||||
mds = MetadataStore(
|
||||
ONTS.values(), acs, self, ca_certs,
|
||||
list(ONTS.values()), acs, self, ca_certs,
|
||||
disable_ssl_certificate_validation=disable_validation)
|
||||
|
||||
mds.imp(metadata_conf)
|
||||
|
@@ -199,7 +199,7 @@ class HTTPBase(object):
|
||||
name=std_attr["name"])
|
||||
except ValueError:
|
||||
pass
|
||||
elif morsel["expires"] < utc_now():
|
||||
elif morsel["expires"] and morsel["expires"] < utc_now():
|
||||
try:
|
||||
self.cookiejar.clear(domain=std_attr["domain"],
|
||||
path=std_attr["path"],
|
||||
|
@@ -80,7 +80,7 @@ class TestAC():
|
||||
assert a1.friendly_name == "givenName"
|
||||
assert a1.name == 'urn:mace:dir:attribute-def:givenName'
|
||||
assert a1.name_format == BASIC_NF
|
||||
elif a0.friendly_name == 'givenname':
|
||||
elif a0.friendly_name == 'givenName':
|
||||
assert a0.name == 'urn:mace:dir:attribute-def:givenName'
|
||||
assert a0.name_format == BASIC_NF
|
||||
assert a1.friendly_name == "sn"
|
||||
@@ -103,13 +103,14 @@ class TestAC():
|
||||
assert a1.friendly_name == "givenName"
|
||||
assert a1.name == 'urn:oid:2.5.4.42'
|
||||
assert a1.name_format == URI_NF
|
||||
elif a0.friendly_name == 'givenname':
|
||||
elif a0.friendly_name == 'givenName':
|
||||
assert a0.name == 'urn:oid:2.5.4.42'
|
||||
assert a0.name_format == URI_NF
|
||||
assert a1.friendly_name == "surname"
|
||||
assert a1.name == 'urn:oid:2.5.4.4'
|
||||
assert a1.name_format == URI_NF
|
||||
else:
|
||||
print(a0.friendly_name)
|
||||
assert False
|
||||
|
||||
def test_to_local_name(self):
|
||||
@@ -227,5 +228,5 @@ def test_schac():
|
||||
if __name__ == "__main__":
|
||||
t = TestAC()
|
||||
t.setup_class()
|
||||
t.test_to_local_name_from_basic()
|
||||
t.test_to_attrstat_1()
|
||||
#test_schac()
|
||||
|
@@ -35,7 +35,8 @@ __author__ = 'rolandh'
|
||||
|
||||
MDS = MetadataStore(ONTS.values(), ATTRCONV, sec_config,
|
||||
disable_ssl_certificate_validation=True)
|
||||
MDS.imp([{"class": "saml2.mdstore.MetaDataMD", "metadata": [(full_path("swamid.md"), )]}])
|
||||
MDS.imp([{"class": "saml2.mdstore.MetaDataMD",
|
||||
"metadata": [(full_path("swamid.md"),)]}])
|
||||
|
||||
|
||||
def _eq(l1, l2):
|
||||
@@ -46,7 +47,7 @@ def test_filter_ava():
|
||||
policy = Policy({
|
||||
"default": {
|
||||
"lifetime": {"minutes": 15},
|
||||
#"attribute_restrictions": None # means all I have
|
||||
# "attribute_restrictions": None # means all I have
|
||||
"entity_categories": ["swamid"]
|
||||
}
|
||||
})
|
||||
@@ -64,7 +65,7 @@ def test_filter_ava2():
|
||||
policy = Policy({
|
||||
"default": {
|
||||
"lifetime": {"minutes": 15},
|
||||
#"attribute_restrictions": None # means all I have
|
||||
# "attribute_restrictions": None # means all I have
|
||||
"entity_categories": ["refeds", "edugain"]
|
||||
}
|
||||
})
|
||||
@@ -84,14 +85,15 @@ def test_filter_ava3():
|
||||
policy = Policy({
|
||||
"default": {
|
||||
"lifetime": {"minutes": 15},
|
||||
#"attribute_restrictions": None # means all I have
|
||||
# "attribute_restrictions": None # means all I have
|
||||
"entity_categories": ["swamid"]
|
||||
}
|
||||
})
|
||||
|
||||
mds = MetadataStore(ONTS.values(), ATTRCONV, sec_config,
|
||||
mds = MetadataStore(list(ONTS.values()), ATTRCONV, sec_config,
|
||||
disable_ssl_certificate_validation=True)
|
||||
mds.imp([{"class": "saml2.mdstore.MetaDataFile", "metadata": [(full_path("entity_cat_sfs_hei.xml"), )]}])
|
||||
mds.imp([{"class": "saml2.mdstore.MetaDataFile",
|
||||
"metadata": [(full_path("entity_cat_sfs_hei.xml"),)]}])
|
||||
|
||||
ava = {"givenName": ["Derek"], "sn": ["Jeter"],
|
||||
"mail": ["derek@nyy.mlb.com"], "c": ["USA"],
|
||||
@@ -107,14 +109,15 @@ def test_filter_ava4():
|
||||
policy = Policy({
|
||||
"default": {
|
||||
"lifetime": {"minutes": 15},
|
||||
#"attribute_restrictions": None # means all I have
|
||||
# "attribute_restrictions": None # means all I have
|
||||
"entity_categories": ["swamid"]
|
||||
}
|
||||
})
|
||||
|
||||
mds = MetadataStore(ONTS.values(), ATTRCONV, sec_config,
|
||||
mds = MetadataStore(list(ONTS.values()), ATTRCONV, sec_config,
|
||||
disable_ssl_certificate_validation=True)
|
||||
mds.imp([{"class": "saml2.mdstore.MetaDataFile", "metadata": [(full_path("entity_cat_re_nren.xml"), )]}])
|
||||
mds.imp([{"class": "saml2.mdstore.MetaDataFile",
|
||||
"metadata": [(full_path("entity_cat_re_nren.xml"),)]}])
|
||||
|
||||
ava = {"givenName": ["Derek"], "sn": ["Jeter"],
|
||||
"mail": ["derek@nyy.mlb.com"], "c": ["USA"],
|
||||
@@ -123,22 +126,24 @@ def test_filter_ava4():
|
||||
|
||||
ava = policy.filter(ava, "urn:mace:example.com:saml:roland:sp", mds)
|
||||
|
||||
assert _eq(list(ava.keys()), ['eduPersonTargetedID', "givenName", "c", "mail",
|
||||
"sn"])
|
||||
assert _eq(list(ava.keys()),
|
||||
['eduPersonTargetedID', "givenName", "c", "mail",
|
||||
"sn"])
|
||||
|
||||
|
||||
def test_filter_ava5():
|
||||
policy = Policy({
|
||||
"default": {
|
||||
"lifetime": {"minutes": 15},
|
||||
#"attribute_restrictions": None # means all I have
|
||||
# "attribute_restrictions": None # means all I have
|
||||
"entity_categories": ["swamid"]
|
||||
}
|
||||
})
|
||||
|
||||
mds = MetadataStore(ONTS.values(), ATTRCONV, sec_config,
|
||||
mds = MetadataStore(list(ONTS.values()), ATTRCONV, sec_config,
|
||||
disable_ssl_certificate_validation=True)
|
||||
mds.imp([{"class": "saml2.mdstore.MetaDataFile", "metadata": [(full_path("entity_cat_re.xml"), )]}])
|
||||
mds.imp([{"class": "saml2.mdstore.MetaDataFile",
|
||||
"metadata": [(full_path("entity_cat_re.xml"),)]}])
|
||||
|
||||
ava = {"givenName": ["Derek"], "sn": ["Jeter"],
|
||||
"mail": ["derek@nyy.mlb.com"], "c": ["USA"],
|
||||
@@ -162,7 +167,9 @@ def test_idp_policy_filter():
|
||||
idp.metadata)
|
||||
|
||||
print(ava)
|
||||
assert list(ava.keys()) == ["eduPersonTargetedID"] # because no entity category
|
||||
assert list(ava.keys()) == [
|
||||
"eduPersonTargetedID"] # because no entity category
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_idp_policy_filter()
|
||||
test_filter_ava3()
|
||||
|
@@ -107,7 +107,8 @@ class TestServer1():
|
||||
ava = ava = get_ava(assertion[0])
|
||||
|
||||
assert ava ==\
|
||||
{'mail': ['derek@nyy.mlb.com'], 'givenname': ['Derek'], 'surname': ['Jeter'], 'title': ['The man']}
|
||||
{'mail': ['derek@nyy.mlb.com'], 'givenName': ['Derek'],
|
||||
'surName': ['Jeter'], 'title': ['The man']}
|
||||
|
||||
|
||||
def verify_encrypted_assertion(self, assertion, decr_text):
|
||||
@@ -295,7 +296,6 @@ class TestServer1():
|
||||
assert resp.status
|
||||
assert resp.status.status_code.value == samlp.STATUS_SUCCESS
|
||||
assert resp.assertion
|
||||
assert resp.assertion
|
||||
assertion = resp.assertion
|
||||
print(assertion)
|
||||
assert assertion.authn_statement
|
||||
@@ -307,7 +307,7 @@ class TestServer1():
|
||||
# Pick out one attribute
|
||||
attr = None
|
||||
for attr in attribute_statement[0].attribute:
|
||||
if attr.friendly_name == "givenname":
|
||||
if attr.friendly_name == "givenName":
|
||||
break
|
||||
assert len(attr.attribute_value) == 1
|
||||
assert attr.name == "urn:oid:2.5.4.42"
|
||||
@@ -546,22 +546,21 @@ class TestServer1():
|
||||
|
||||
sresponse = response_from_string(signed_resp)
|
||||
|
||||
valid = self.server.sec.verify_signature(signed_resp,
|
||||
self.server.config.cert_file,
|
||||
node_name='urn:oasis:names:tc:SAML:2.0:protocol:Response',
|
||||
node_id=sresponse.id,
|
||||
id_attr="")
|
||||
assert valid
|
||||
|
||||
valid = self.server.sec.verify_signature(signed_resp,
|
||||
self.server.config.cert_file,
|
||||
node_name='urn:oasis:names:tc:SAML:2.0:assertion:Assertion',
|
||||
node_id=sresponse.assertion[0].id,
|
||||
id_attr="")
|
||||
valid = self.server.sec.verify_signature(
|
||||
signed_resp, self.server.config.cert_file,
|
||||
node_name='urn:oasis:names:tc:SAML:2.0:protocol:Response',
|
||||
node_id=sresponse.id, id_attr="")
|
||||
|
||||
assert valid
|
||||
|
||||
_, key_file = make_temp(str(cert_key_str).encode('ascii'), decode=False)
|
||||
valid = self.server.sec.verify_signature(
|
||||
signed_resp, self.server.config.cert_file,
|
||||
node_name='urn:oasis:names:tc:SAML:2.0:assertion:Assertion',
|
||||
node_id=sresponse.assertion[0].id, id_attr="")
|
||||
|
||||
assert valid
|
||||
|
||||
_, key_file = make_temp(cert_key_str, decode=False)
|
||||
|
||||
decr_text = self.server.sec.decrypt(signed_resp, key_file)
|
||||
|
||||
@@ -569,8 +568,9 @@ class TestServer1():
|
||||
|
||||
assert resp.assertion[0].advice.encrypted_assertion[0].extension_elements
|
||||
|
||||
assertion = extension_elements_to_elements(resp.assertion[0].advice.encrypted_assertion[0].extension_elements,
|
||||
[saml, samlp])
|
||||
assertion = extension_elements_to_elements(
|
||||
resp.assertion[0].advice.encrypted_assertion[0].extension_elements,
|
||||
[saml, samlp])
|
||||
|
||||
self.verify_assertion(assertion)
|
||||
|
||||
@@ -653,7 +653,7 @@ class TestServer1():
|
||||
id_attr="")
|
||||
assert valid
|
||||
|
||||
_, key_file = make_temp(str(cert_key_str).encode('ascii'), decode=False)
|
||||
_, key_file = make_temp(cert_key_str, decode=False)
|
||||
|
||||
decr_text = self.server.sec.decrypt(signed_resp, key_file)
|
||||
|
||||
@@ -1266,4 +1266,4 @@ class TestServerLogout():
|
||||
if __name__ == "__main__":
|
||||
ts = TestServer1()
|
||||
ts.setup_class()
|
||||
ts.test_encrypted_signed_response_4()
|
||||
ts.test_encrypted_signed_response_1()
|
||||
|
@@ -69,4 +69,4 @@ def test_construct_deconstruct_response():
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_construct_deconstruct_request()
|
||||
test_verify()
|
||||
|
Reference in New Issue
Block a user