summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kanakarakis <ivan.kanak@gmail.com>2020-07-07 12:46:49 +0300
committerGitHub <noreply@github.com>2020-07-07 12:46:49 +0300
commitca27b128e135cdde90117f9c418673079c1fdea5 (patch)
treeccac39cf8a1e9039f6c2d09f1a6b4c2f0a394013
parent8e0582ad87307f59370028ca93a4aa6f1bdc10a4 (diff)
parent4a568c964b5dc59f3620249ead45b5c75225346f (diff)
downloadpysaml2-ca27b128e135cdde90117f9c418673079c1fdea5.tar.gz
Merge pull request #697 from ottonomy/bugfix/693-py3-make_metadata-accept-str
Allow generation of signed metadata in python3
-rw-r--r--src/saml2/metadata.py4
-rw-r--r--tests/test_39_metadata.py19
2 files changed, 19 insertions, 4 deletions
diff --git a/src/saml2/metadata.py b/src/saml2/metadata.py
index 5c465032..b2317131 100644
--- a/src/saml2/metadata.py
+++ b/src/saml2/metadata.py
@@ -66,10 +66,10 @@ def metadata_tostring_fix(desc, nspair, xmlstring=""):
if not xmlstring:
xmlstring = desc.to_string(nspair)
- if six.PY2:
+ try:
if "\"xs:string\"" in xmlstring and XMLNSXS not in xmlstring:
xmlstring = xmlstring.replace(MDNS, MDNS + XMLNSXS)
- else:
+ except TypeError:
if b"\"xs:string\"" in xmlstring and bXMLNSXS not in xmlstring:
xmlstring = xmlstring.replace(bMDNS, bMDNS + bXMLNSXS)
diff --git a/tests/test_39_metadata.py b/tests/test_39_metadata.py
index a3796083..8ab6dfa5 100644
--- a/tests/test_39_metadata.py
+++ b/tests/test_39_metadata.py
@@ -1,7 +1,10 @@
import copy
from saml2.config import SPConfig
-from saml2.metadata import entity_descriptor
+from saml2.metadata import create_metadata_string, entity_descriptor
from saml2.saml import NAME_FORMAT_URI, NAME_FORMAT_BASIC
+from saml2 import sigver
+
+from pathutils import full_path
__author__ = 'roland'
@@ -47,5 +50,17 @@ def test_requested_attribute_name_format():
assert req_attr.name_format == NAME_FORMAT_BASIC
+def test_signed_metadata_proper_str_bytes_handling():
+ sp_conf_2 = sp_conf.copy()
+ sp_conf_2['key_file'] = full_path("test.key")
+ sp_conf_2['cert_file'] = full_path("inc-md-cert.pem")
+ # requires xmlsec binaries per https://pysaml2.readthedocs.io/en/latest/examples/sp.html
+ sp_conf_2['xmlsec_binary'] = sigver.get_xmlsec_binary(["/opt/local/bin"])
+ cnf = SPConfig().load(sp_conf_2, metadata_construction=True)
+
+ # This will raise TypeError if string/bytes handling is not correct
+ sp_metadata = create_metadata_string('', config=cnf, sign=True)
+
+
if __name__ == '__main__':
- test_requested_attribute_name_format() \ No newline at end of file
+ test_requested_attribute_name_format()