Skip to content

Commit 1da840e

Browse files
authored
Merge pull request #428 from bogdan-ds/remote_encoding_fix
Using the binary response content of requests to avoid incorrect metadata encoding
2 parents 0d46e44 + 9de2347 commit 1da840e

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

src/saml2/mdstore.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,7 @@ def load(self, *args, **kwargs):
750750
"""
751751
response = self.http.send(self.url)
752752
if response.status_code == 200:
753-
_txt = response.text.encode("utf-8")
753+
_txt = response.content
754754
return self.parse_and_check_signature(_txt)
755755
else:
756756
logger.info("Response status: %s", response.status_code)
@@ -814,7 +814,7 @@ def __getitem__(self, item):
814814
response = requests.get(mdx_url, headers={
815815
'Accept': SAML_METADATA_CONTENT_TYPE})
816816
if response.status_code == 200:
817-
_txt = response.text.encode("utf-8")
817+
_txt = response.content
818818

819819
if self.parse_and_check_signature(_txt):
820820
return self.entity[item]

tests/SWITCHaaiRootCA.crt.pem

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDnzCCAoegAwIBAgINSWITCHaai+Root+CAzANBgkqhkiG9w0BAQUFADBrMQsw
3+
CQYDVQQGEwJDSDFAMD4GA1UEChM3U3dpdGNoIC0gVGVsZWluZm9ybWF0aWtkaWVu
4+
c3RlIGZ1ZXIgTGVocmUgdW5kIEZvcnNjaHVuZzEaMBgGA1UEAxMRU1dJVENIYWFp
5+
IFJvb3QgQ0EwHhcNMDgwNTE1MDYzMDAwWhcNMjgwNTE1MDYyOTU5WjBrMQswCQYD
6+
VQQGEwJDSDFAMD4GA1UEChM3U3dpdGNoIC0gVGVsZWluZm9ybWF0aWtkaWVuc3Rl
7+
IGZ1ZXIgTGVocmUgdW5kIEZvcnNjaHVuZzEaMBgGA1UEAxMRU1dJVENIYWFpIFJv
8+
b3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUSWbn/rhWew/s
9+
LJRyciyRKDGyFXSgiDO/EohYuZLw6EAKLLlhZorNtEHQbbn0Oo13S33MclHMvGWT
10+
KJM0u1hG+6gLy78EPmJbqAE1Uv23wVEH4SX0VJfl3JVqIebiAH/CjuLubgMUspDI
11+
jOdQHNLS7pthTbm7Tgh7zMsiLPyMTZJep5CGbqv8NoK6bMaF0Z+Bt7e1JRlhHFCV
12+
iJJaR/+hfpzLsJ8NWVivvrpRGaGJ1XR+9FGsTkjNdMCirNJJZ6XvUOe5w7pHSd9M
13+
cppFP0eyLs02AMzMXI4iz6PK/w3EdzXGXpK+gSgvLxWYct4xHpv1e2NXhNgdJOSN
14+
9ra/wJLVAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
15+
MB0GA1UdDgQWBBTpmuIGWOsP14EDXVyXubG1k307hDANBgkqhkiG9w0BAQUFAAOC
16+
AQEAMV/eIW6pFB+mbk7rD7hUPTWDRaoca3kHqmFGFnHfuY8+c0/Mqjh8Y/jyX1yb
17+
f58crTSWrbyGbUZ3oxDGQ34tuZSkmeR32NqryiX3sP5qlNSozVguQKt8o4vhS1Qe
18+
WPsXALs3em2pdKuIGSOpbuDnopPcmU2g5Zi2R5P7qpKDKAKtNUEwV+LW7GBMEksO
19+
Nj7BFXk4AFBFBijaYJGgHmoKSImVgeNIvsV+BSv5HJ4q6vcxfnwuvvGHM0AGphYO
20+
6f5qtHMUgvAblI8M/2QsBgethaGrirtKJ3aCRLdaR2R1QfaGRpck/Ron5/MpMxiJ
21+
wLT8YlW/zjx2yNABhPSAjfzeMw==
22+
-----END CERTIFICATE-----

tests/test_30_mdstore.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
from future.backports.urllib.parse import quote_plus
88

99
from saml2.config import Config
10-
from saml2.mdstore import MetadataStore
10+
from saml2.mdstore import MetadataStore, MetaDataExtern
1111
from saml2.mdstore import MetaDataMDX
1212
from saml2.mdstore import SAML_METADATA_CONTENT_TYPE
1313
from saml2.mdstore import destinations
1414
from saml2.mdstore import name
1515
from saml2 import sigver
16+
from saml2.httpbase import HTTPBase
1617
from saml2 import BINDING_SOAP
1718
from saml2 import BINDING_HTTP_REDIRECT
1819
from saml2 import BINDING_HTTP_POST
@@ -385,6 +386,14 @@ def test_load_local():
385386
assert cfg
386387

387388

389+
def test_load_remote_encoding():
390+
crypto = sigver._get_xmlsec_cryptobackend()
391+
sc = sigver.SecurityContext(crypto, key_type="", cert_type="")
392+
httpc = HTTPBase()
393+
mds = MetaDataExtern(ATTRCONV, 'http://metadata.aai.switch.ch/metadata.aaitest.xml', sc, full_path('SWITCHaaiRootCA.crt.pem'), httpc)
394+
mds.load()
395+
396+
388397
def test_load_string():
389398
sec_config.xmlsec_binary = sigver.get_xmlsec_binary(["/opt/local/bin"])
390399
mds = MetadataStore(ATTRCONV, sec_config,

0 commit comments

Comments
 (0)