Merge pull request #428 from bogdan-ds/remote_encoding_fix

Using the binary response content of requests to avoid incorrect metadata encoding
This commit is contained in:
Ioannis Kakavas
2017-07-18 10:21:23 +03:00
committed by GitHub
3 changed files with 34 additions and 3 deletions

View File

@@ -750,7 +750,7 @@ class MetaDataExtern(InMemoryMetaData):
""" """
response = self.http.send(self.url) response = self.http.send(self.url)
if response.status_code == 200: if response.status_code == 200:
_txt = response.text.encode("utf-8") _txt = response.content
return self.parse_and_check_signature(_txt) return self.parse_and_check_signature(_txt)
else: else:
logger.info("Response status: %s", response.status_code) logger.info("Response status: %s", response.status_code)
@@ -814,7 +814,7 @@ class MetaDataMDX(InMemoryMetaData):
response = requests.get(mdx_url, headers={ response = requests.get(mdx_url, headers={
'Accept': SAML_METADATA_CONTENT_TYPE}) 'Accept': SAML_METADATA_CONTENT_TYPE})
if response.status_code == 200: if response.status_code == 200:
_txt = response.text.encode("utf-8") _txt = response.content
if self.parse_and_check_signature(_txt): if self.parse_and_check_signature(_txt):
return self.entity[item] return self.entity[item]

View File

@@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDnzCCAoegAwIBAgINSWITCHaai+Root+CAzANBgkqhkiG9w0BAQUFADBrMQsw
CQYDVQQGEwJDSDFAMD4GA1UEChM3U3dpdGNoIC0gVGVsZWluZm9ybWF0aWtkaWVu
c3RlIGZ1ZXIgTGVocmUgdW5kIEZvcnNjaHVuZzEaMBgGA1UEAxMRU1dJVENIYWFp
IFJvb3QgQ0EwHhcNMDgwNTE1MDYzMDAwWhcNMjgwNTE1MDYyOTU5WjBrMQswCQYD
VQQGEwJDSDFAMD4GA1UEChM3U3dpdGNoIC0gVGVsZWluZm9ybWF0aWtkaWVuc3Rl
IGZ1ZXIgTGVocmUgdW5kIEZvcnNjaHVuZzEaMBgGA1UEAxMRU1dJVENIYWFpIFJv
b3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUSWbn/rhWew/s
LJRyciyRKDGyFXSgiDO/EohYuZLw6EAKLLlhZorNtEHQbbn0Oo13S33MclHMvGWT
KJM0u1hG+6gLy78EPmJbqAE1Uv23wVEH4SX0VJfl3JVqIebiAH/CjuLubgMUspDI
jOdQHNLS7pthTbm7Tgh7zMsiLPyMTZJep5CGbqv8NoK6bMaF0Z+Bt7e1JRlhHFCV
iJJaR/+hfpzLsJ8NWVivvrpRGaGJ1XR+9FGsTkjNdMCirNJJZ6XvUOe5w7pHSd9M
cppFP0eyLs02AMzMXI4iz6PK/w3EdzXGXpK+gSgvLxWYct4xHpv1e2NXhNgdJOSN
9ra/wJLVAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
MB0GA1UdDgQWBBTpmuIGWOsP14EDXVyXubG1k307hDANBgkqhkiG9w0BAQUFAAOC
AQEAMV/eIW6pFB+mbk7rD7hUPTWDRaoca3kHqmFGFnHfuY8+c0/Mqjh8Y/jyX1yb
f58crTSWrbyGbUZ3oxDGQ34tuZSkmeR32NqryiX3sP5qlNSozVguQKt8o4vhS1Qe
WPsXALs3em2pdKuIGSOpbuDnopPcmU2g5Zi2R5P7qpKDKAKtNUEwV+LW7GBMEksO
Nj7BFXk4AFBFBijaYJGgHmoKSImVgeNIvsV+BSv5HJ4q6vcxfnwuvvGHM0AGphYO
6f5qtHMUgvAblI8M/2QsBgethaGrirtKJ3aCRLdaR2R1QfaGRpck/Ron5/MpMxiJ
wLT8YlW/zjx2yNABhPSAjfzeMw==
-----END CERTIFICATE-----

View File

@@ -7,12 +7,13 @@ from collections import OrderedDict
from future.backports.urllib.parse import quote_plus from future.backports.urllib.parse import quote_plus
from saml2.config import Config from saml2.config import Config
from saml2.mdstore import MetadataStore from saml2.mdstore import MetadataStore, MetaDataExtern
from saml2.mdstore import MetaDataMDX from saml2.mdstore import MetaDataMDX
from saml2.mdstore import SAML_METADATA_CONTENT_TYPE from saml2.mdstore import SAML_METADATA_CONTENT_TYPE
from saml2.mdstore import destinations from saml2.mdstore import destinations
from saml2.mdstore import name from saml2.mdstore import name
from saml2 import sigver from saml2 import sigver
from saml2.httpbase import HTTPBase
from saml2 import BINDING_SOAP from saml2 import BINDING_SOAP
from saml2 import BINDING_HTTP_REDIRECT from saml2 import BINDING_HTTP_REDIRECT
from saml2 import BINDING_HTTP_POST from saml2 import BINDING_HTTP_POST
@@ -385,6 +386,14 @@ def test_load_local():
assert cfg assert cfg
def test_load_remote_encoding():
crypto = sigver._get_xmlsec_cryptobackend()
sc = sigver.SecurityContext(crypto, key_type="", cert_type="")
httpc = HTTPBase()
mds = MetaDataExtern(ATTRCONV, 'http://metadata.aai.switch.ch/metadata.aaitest.xml', sc, full_path('SWITCHaaiRootCA.crt.pem'), httpc)
mds.load()
def test_load_string(): def test_load_string():
sec_config.xmlsec_binary = sigver.get_xmlsec_binary(["/opt/local/bin"]) sec_config.xmlsec_binary = sigver.get_xmlsec_binary(["/opt/local/bin"])
mds = MetadataStore(ATTRCONV, sec_config, mds = MetadataStore(ATTRCONV, sec_config,