summaryrefslogtreecommitdiff
path: root/src/saml2/soap.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/saml2/soap.py')
-rw-r--r--src/saml2/soap.py74
1 files changed, 32 insertions, 42 deletions
diff --git a/src/saml2/soap.py b/src/saml2/soap.py
index 94af4f1f..dc2e75e5 100644
--- a/src/saml2/soap.py
+++ b/src/saml2/soap.py
@@ -12,14 +12,16 @@ from saml2 import create_class_from_element_tree
from saml2.samlp import NAMESPACE as SAMLP_NAMESPACE
from saml2.schema import soapenv
+
try:
from xml.etree import cElementTree as ElementTree
except ImportError:
try:
import cElementTree as ElementTree
except ImportError:
- #noinspection PyUnresolvedReferences
+ # noinspection PyUnresolvedReferences
from elementtree import ElementTree
+
import defusedxml.ElementTree
@@ -35,98 +37,95 @@ class WrongMessageType(Exception):
def parse_soap_enveloped_saml_response(text):
- tags = ['{%s}Response' % SAMLP_NAMESPACE,
- '{%s}LogoutResponse' % SAMLP_NAMESPACE]
+ tags = ["{%s}Response" % SAMLP_NAMESPACE, "{%s}LogoutResponse" % SAMLP_NAMESPACE]
return parse_soap_enveloped_saml_thingy(text, tags)
def parse_soap_enveloped_saml_logout_response(text):
- tags = ['{%s}Response' % SAMLP_NAMESPACE,
- '{%s}LogoutResponse' % SAMLP_NAMESPACE]
+ tags = ["{%s}Response" % SAMLP_NAMESPACE, "{%s}LogoutResponse" % SAMLP_NAMESPACE]
return parse_soap_enveloped_saml_thingy(text, tags)
def parse_soap_enveloped_saml_attribute_query(text):
- expected_tag = '{%s}AttributeQuery' % SAMLP_NAMESPACE
+ expected_tag = "{%s}AttributeQuery" % SAMLP_NAMESPACE
return parse_soap_enveloped_saml_thingy(text, [expected_tag])
def parse_soap_enveloped_saml_attribute_response(text):
- tags = ['{%s}Response' % SAMLP_NAMESPACE,
- '{%s}AttributeResponse' % SAMLP_NAMESPACE]
+ tags = ["{%s}Response" % SAMLP_NAMESPACE, "{%s}AttributeResponse" % SAMLP_NAMESPACE]
return parse_soap_enveloped_saml_thingy(text, tags)
def parse_soap_enveloped_saml_logout_request(text):
- expected_tag = '{%s}LogoutRequest' % SAMLP_NAMESPACE
+ expected_tag = "{%s}LogoutRequest" % SAMLP_NAMESPACE
return parse_soap_enveloped_saml_thingy(text, [expected_tag])
def parse_soap_enveloped_saml_authn_request(text):
- expected_tag = '{%s}AuthnRequest' % SAMLP_NAMESPACE
+ expected_tag = "{%s}AuthnRequest" % SAMLP_NAMESPACE
return parse_soap_enveloped_saml_thingy(text, [expected_tag])
def parse_soap_enveloped_saml_artifact_resolve(text):
- expected_tag = '{%s}ArtifactResolve' % SAMLP_NAMESPACE
+ expected_tag = "{%s}ArtifactResolve" % SAMLP_NAMESPACE
return parse_soap_enveloped_saml_thingy(text, [expected_tag])
def parse_soap_enveloped_saml_artifact_response(text):
- expected_tag = '{%s}ArtifactResponse' % SAMLP_NAMESPACE
+ expected_tag = "{%s}ArtifactResponse" % SAMLP_NAMESPACE
return parse_soap_enveloped_saml_thingy(text, [expected_tag])
def parse_soap_enveloped_saml_name_id_mapping_request(text):
- expected_tag = '{%s}NameIDMappingRequest' % SAMLP_NAMESPACE
+ expected_tag = "{%s}NameIDMappingRequest" % SAMLP_NAMESPACE
return parse_soap_enveloped_saml_thingy(text, [expected_tag])
def parse_soap_enveloped_saml_name_id_mapping_response(text):
- expected_tag = '{%s}NameIDMappingResponse' % SAMLP_NAMESPACE
+ expected_tag = "{%s}NameIDMappingResponse" % SAMLP_NAMESPACE
return parse_soap_enveloped_saml_thingy(text, [expected_tag])
def parse_soap_enveloped_saml_manage_name_id_request(text):
- expected_tag = '{%s}ManageNameIDRequest' % SAMLP_NAMESPACE
+ expected_tag = "{%s}ManageNameIDRequest" % SAMLP_NAMESPACE
return parse_soap_enveloped_saml_thingy(text, [expected_tag])
def parse_soap_enveloped_saml_manage_name_id_response(text):
- expected_tag = '{%s}ManageNameIDResponse' % SAMLP_NAMESPACE
+ expected_tag = "{%s}ManageNameIDResponse" % SAMLP_NAMESPACE
return parse_soap_enveloped_saml_thingy(text, [expected_tag])
def parse_soap_enveloped_saml_assertion_id_request(text):
- expected_tag = '{%s}AssertionIDRequest' % SAMLP_NAMESPACE
+ expected_tag = "{%s}AssertionIDRequest" % SAMLP_NAMESPACE
return parse_soap_enveloped_saml_thingy(text, [expected_tag])
def parse_soap_enveloped_saml_assertion_id_response(text):
- tags = ['{%s}Response' % SAMLP_NAMESPACE,
- '{%s}AssertionIDResponse' % SAMLP_NAMESPACE]
+ tags = ["{%s}Response" % SAMLP_NAMESPACE, "{%s}AssertionIDResponse" % SAMLP_NAMESPACE]
return parse_soap_enveloped_saml_thingy(text, tags)
def parse_soap_enveloped_saml_authn_query(text):
- expected_tag = '{%s}AuthnQuery' % SAMLP_NAMESPACE
+ expected_tag = "{%s}AuthnQuery" % SAMLP_NAMESPACE
return parse_soap_enveloped_saml_thingy(text, [expected_tag])
def parse_soap_enveloped_saml_authn_query_response(text):
- tags = ['{%s}Response' % SAMLP_NAMESPACE]
+ tags = ["{%s}Response" % SAMLP_NAMESPACE]
return parse_soap_enveloped_saml_thingy(text, tags)
def parse_soap_enveloped_saml_authn_response(text):
- tags = ['{%s}Response' % SAMLP_NAMESPACE]
+ tags = ["{%s}Response" % SAMLP_NAMESPACE]
return parse_soap_enveloped_saml_thingy(text, tags)
-#def parse_soap_enveloped_saml_logout_response(text):
+# def parse_soap_enveloped_saml_logout_response(text):
# expected_tag = '{%s}LogoutResponse' % SAMLP_NAMESPACE
# return parse_soap_enveloped_saml_thingy(text, [expected_tag])
+
def parse_soap_enveloped_saml_thingy(text, expected_tags):
"""Parses a SOAP enveloped SAML thing and returns the thing as
a string.
@@ -140,9 +139,7 @@ def parse_soap_enveloped_saml_thingy(text, expected_tags):
envelope_tag = "{%s}Envelope" % soapenv.NAMESPACE
if envelope.tag != envelope_tag:
raise ValueError(
- "Invalid envelope tag '{invalid}' should be '{valid}'".format(
- invalid=envelope.tag, valid=envelope_tag
- )
+ "Invalid envelope tag '{invalid}' should be '{valid}'".format(invalid=envelope.tag, valid=envelope_tag)
)
if len(envelope) < 1:
@@ -150,12 +147,10 @@ def parse_soap_enveloped_saml_thingy(text, expected_tags):
body = None
for part in envelope:
- if part.tag == '{%s}Body' % soapenv.NAMESPACE:
+ if part.tag == "{%s}Body" % soapenv.NAMESPACE:
n_children = len(part)
if n_children != 1:
- raise Exception(
- "Expected a single child element, found {n}".format(n=n_children)
- )
+ raise Exception("Expected a single child element, found {n}".format(n=n_children))
body = part
break
@@ -166,8 +161,7 @@ def parse_soap_enveloped_saml_thingy(text, expected_tags):
if saml_part.tag in expected_tags:
return ElementTree.tostring(saml_part, encoding="UTF-8")
else:
- raise WrongMessageType("Was '%s' expected one of %s" % (saml_part.tag,
- expected_tags))
+ raise WrongMessageType("Was '%s' expected one of %s" % (saml_part.tag, expected_tags))
NS_AND_TAG = re.compile(r"\{([^}]+)\}(.*)")
@@ -202,9 +196,7 @@ def class_instances_from_soap_enveloped_saml_thingies(text, modules):
envelope_tag = "{%s}Envelope" % soapenv.NAMESPACE
if envelope.tag != envelope_tag:
raise ValueError(
- "Invalid envelope tag '{invalid}' should be '{valid}'".format(
- invalid=envelope.tag, valid=envelope_tag
- )
+ "Invalid envelope tag '{invalid}' should be '{valid}'".format(invalid=envelope.tag, valid=envelope_tag)
)
if len(envelope) < 1:
@@ -213,7 +205,7 @@ def class_instances_from_soap_enveloped_saml_thingies(text, modules):
env = {"header": [], "body": None}
for part in envelope:
- if part.tag == '{%s}Body' % soapenv.NAMESPACE:
+ if part.tag == "{%s}Body" % soapenv.NAMESPACE:
if len(envelope) < 1:
raise Exception("No items in envelope part.")
env["body"] = instanciate_class(part[0], modules)
@@ -238,9 +230,7 @@ def open_soap_envelope(text):
envelope_tag = "{%s}Envelope" % soapenv.NAMESPACE
if envelope.tag != envelope_tag:
raise ValueError(
- "Invalid envelope tag '{invalid}' should be '{valid}'".format(
- invalid=envelope.tag, valid=envelope_tag
- )
+ "Invalid envelope tag '{invalid}' should be '{valid}'".format(invalid=envelope.tag, valid=envelope_tag)
)
if len(envelope) < 1:
@@ -249,7 +239,7 @@ def open_soap_envelope(text):
content = {"header": [], "body": None}
for part in envelope:
- if part.tag == '{%s}Body' % soapenv.NAMESPACE:
+ if part.tag == "{%s}Body" % soapenv.NAMESPACE:
if len(envelope) < 1:
raise Exception("No items in envelope part.")
content["body"] = ElementTree.tostring(part[0], encoding="UTF-8")
@@ -262,7 +252,7 @@ def open_soap_envelope(text):
def make_soap_enveloped_saml_thingy(thingy, headers=None):
- """ Returns a soap envelope containing a SAML request
+ """Returns a soap envelope containing a SAML request
as a text string.
:param thingy: The SAML thingy
@@ -282,7 +272,7 @@ def make_soap_enveloped_saml_thingy(thingy, headers=None):
def soap_fault(message=None, actor=None, code=None, detail=None):
- """ Create a SOAP Fault message
+ """Create a SOAP Fault message
:param message: Human readable error message
:param actor: Who discovered the error