5
5
from six .moves .urllib .parse import quote_plus
6
6
from saml2 .config import Config
7
7
from saml2 .httpbase import HTTPBase
8
-
9
8
from saml2 .mdstore import MetadataStore , MetaDataMDX
10
9
from saml2 .mdstore import destinations
11
10
from saml2 .mdstore import name
12
-
13
11
from saml2 import md
14
12
from saml2 import sigver
15
13
from saml2 import BINDING_SOAP
20
18
from saml2 import config
21
19
from saml2 .attribute_converter import ac_factory
22
20
from saml2 .attribute_converter import d_to_local_name
23
-
24
21
from saml2 .extension import mdui
25
22
from saml2 .extension import idpdisc
26
23
from saml2 .extension import dri
29
26
from saml2 .s_utils import UnknownPrincipal
30
27
from saml2 import xmldsig
31
28
from saml2 import xmlenc
32
-
33
29
from pathutils import full_path
34
30
35
31
sec_config = config .Config ()
36
32
# sec_config.xmlsec_binary = sigver.get_xmlsec_binary(["/opt/local/bin"])
37
33
34
+ TEST_CERT = """MIICsDCCAhmgAwIBAgIJAJrzqSSwmDY9MA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
35
+ BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
36
+ aWRnaXRzIFB0eSBMdGQwHhcNMDkxMDA2MTk0OTQxWhcNMDkxMTA1MTk0OTQxWjBF
37
+ MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50
38
+ ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
39
+ gQDJg2cms7MqjniT8Fi/XkNHZNPbNVQyMUMXE9tXOdqwYCA1cc8vQdzkihscQMXy
40
+ 3iPw2cMggBu6gjMTOSOxECkuvX5ZCclKr8pXAJM5cY6gVOaVO2PdTZcvDBKGbiaN
41
+ efiEw5hnoZomqZGp8wHNLAUkwtH9vjqqvxyS/vclc6k2ewIDAQABo4GnMIGkMB0G
42
+ A1UdDgQWBBRePsKHKYJsiojE78ZWXccK9K4aJTB1BgNVHSMEbjBsgBRePsKHKYJs
43
+ iojE78ZWXccK9K4aJaFJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUt
44
+ U3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAJrzqSSw
45
+ mDY9MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAJSrKOEzHO7TL5cy6
46
+ h3qh+3+JAk8HbGBW+cbX6KBCAw/mzU8flK25vnWwXS3dv2FF3Aod0/S7AWNfKib5
47
+ U/SA9nJaz/mWeF9S0farz9AQFc8/NSzAzaVq7YbM4F6f6N2FRl7GikdXRCed45j6
48
+ mrPzGzk3ECbupFnqyREH3+ZPSdk="""
49
+
38
50
TEST_METADATA_STRING = """
39
51
<EntitiesDescriptor
40
52
xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
51
63
<ds:KeyInfo>
52
64
<ds:X509Data>
53
65
<ds:X509Certificate>
54
- MIICsDCCAhmgAwIBAgIJAJrzqSSwmDY9MA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
55
- BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
56
- aWRnaXRzIFB0eSBMdGQwHhcNMDkxMDA2MTk0OTQxWhcNMDkxMTA1MTk0OTQxWjBF
57
- MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50
58
- ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
59
- gQDJg2cms7MqjniT8Fi/XkNHZNPbNVQyMUMXE9tXOdqwYCA1cc8vQdzkihscQMXy
60
- 3iPw2cMggBu6gjMTOSOxECkuvX5ZCclKr8pXAJM5cY6gVOaVO2PdTZcvDBKGbiaN
61
- efiEw5hnoZomqZGp8wHNLAUkwtH9vjqqvxyS/vclc6k2ewIDAQABo4GnMIGkMB0G
62
- A1UdDgQWBBRePsKHKYJsiojE78ZWXccK9K4aJTB1BgNVHSMEbjBsgBRePsKHKYJs
63
- iojE78ZWXccK9K4aJaFJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUt
64
- U3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAJrzqSSw
65
- mDY9MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAJSrKOEzHO7TL5cy6
66
- h3qh+3+JAk8HbGBW+cbX6KBCAw/mzU8flK25vnWwXS3dv2FF3Aod0/S7AWNfKib5
67
- U/SA9nJaz/mWeF9S0farz9AQFc8/NSzAzaVq7YbM4F6f6N2FRl7GikdXRCed45j6
68
- mrPzGzk3ECbupFnqyREH3+ZPSdk=</ds:X509Certificate>
66
+ {cert_data}
67
+ </ds:X509Certificate>
69
68
</ds:X509Data>
70
69
</ds:KeyInfo>
71
70
</KeyDescriptor>
85
84
</ContactPerson>
86
85
</EntityDescriptor>
87
86
</EntitiesDescriptor>
88
- """
87
+ """ . format ( cert_data = TEST_CERT )
89
88
90
89
ONTS = {
91
90
saml .NAMESPACE : saml ,
149
148
}],
150
149
"11" : [{
151
150
"class" : "saml2.mdstore.InMemoryMetaData" ,
152
- "metadata" : [(TEST_METADATA_STRING , )]
151
+ "metadata" : [(TEST_METADATA_STRING ,)]
153
152
}],
154
153
}
155
154
@@ -372,7 +371,7 @@ def test_load_string():
372
371
disable_ssl_certificate_validation = True )
373
372
374
373
mds .imp (METADATACONF ["11" ])
375
- #print(mds)
374
+ # print(mds)
376
375
assert len (mds .keys ()) == 1
377
376
idps = mds .with_descriptor ("idpsso" )
378
377
@@ -384,5 +383,52 @@ def test_load_string():
384
383
assert len (certs ) == 1
385
384
386
385
386
+ def test_get_certs_from_metadata ():
387
+ mds = MetadataStore (ONTS .values (), ATTRCONV , None )
388
+ mds .imp (METADATACONF ["11" ])
389
+ certs1 = mds .certs ("http://xenosmilus.umdc.umu.se/simplesaml/saml2/idp/metadata.php" , "any" )
390
+ certs2 = mds .certs ("http://xenosmilus.umdc.umu.se/simplesaml/saml2/idp/metadata.php" , "idpsso" )
391
+
392
+ assert certs1 [0 ] == certs2 [0 ] == TEST_CERT
393
+
394
+
395
+ def test_get_certs_from_metadata_without_keydescriptor ():
396
+ mds = MetadataStore (ONTS .values (), ATTRCONV , None )
397
+ mds .imp ([{
398
+ "class" : "saml2.mdstore.InMemoryMetaData" ,
399
+ "metadata" : [("""
400
+ <EntitiesDescriptor
401
+ xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
402
+ xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
403
+ xmlns:shibmeta="urn:mace:shibboleth:metadata:1.0"
404
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
405
+ xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
406
+ Name="urn:mace:example.com:test-1.0">
407
+ <EntityDescriptor
408
+ entityID="http://xenosmilus.umdc.umu.se/simplesaml/saml2/idp/metadata.php"
409
+ xml:base="swamid-1.0/idp.umu.se-saml2.xml">
410
+ <IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
411
+ <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>
412
+ <SingleSignOnService
413
+ Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
414
+ Location="http://xenosmilus.umdc.umu.se/simplesaml/saml2/idp/metadata.php"/>
415
+ </IDPSSODescriptor>
416
+ <Organization>
417
+ <OrganizationName xml:lang="en">Catalogix</OrganizationName>
418
+ <OrganizationDisplayName xml:lang="en">Catalogix</OrganizationDisplayName>
419
+ <OrganizationURL xml:lang="en">http://www.catalogix.se</OrganizationURL>
420
+ </Organization>
421
+ <ContactPerson contactType="technical">
422
+ <SurName>Hedberg</SurName>
423
+ <EmailAddress>[email protected] </EmailAddress>
424
+ </ContactPerson>
425
+ </EntityDescriptor>
426
+ </EntitiesDescriptor>""" ,)]
427
+ }])
428
+ certs = mds .certs ("http://xenosmilus.umdc.umu.se/simplesaml/saml2/idp/metadata.php" , "idpsso" )
429
+
430
+ assert len (certs ) == 0
431
+
432
+
387
433
if __name__ == "__main__" :
388
- test_load_local ()
434
+ test_get_certs_from_metadata ()
0 commit comments