summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland Hedberg <roland.hedberg@adm.umu.se>2014-03-28 09:39:36 +0100
committerFredrik Thulin <fredrik@thulin.net>2014-04-15 09:36:16 +0200
commit8614509ebb02dab6b31f2563f8ff0a79144dcc4e (patch)
tree4eda2f00ac3fe14087b6c66d7d5a29919cd1b8a7
parenta2cddd82dde2e7fddf1ff859e29903ab20c3e27b (diff)
downloadpysaml2-8614509ebb02dab6b31f2563f8ff0a79144dcc4e.tar.gz
More user friendly error message.
-rw-r--r--src/saml2/assertion.py47
1 files changed, 24 insertions, 23 deletions
diff --git a/src/saml2/assertion.py b/src/saml2/assertion.py
index f1dd790c..eba2ea84 100644
--- a/src/saml2/assertion.py
+++ b/src/saml2/assertion.py
@@ -93,32 +93,33 @@ def filter_on_attributes(ava, required=None, optional=None, acs=None):
if required is None:
required = []
+ nform = "friendly_name"
for attr in required:
- found = False
- nform = ""
- for nform in ["friendly_name", "name"]:
- try:
- _name = attr[nform]
- except KeyError:
- if nform == "friendly_name":
- _name = get_local_name(acs, attr["name"],
- attr["name_format"])
- else:
- continue
+ try:
+ _name = attr[nform]
+ except KeyError:
+ if nform == "friendly_name":
+ _name = get_local_name(acs, attr["name"],
+ attr["name_format"])
+ else:
+ continue
- _fn = _match(_name, ava)
- if _fn:
- try:
- values = [av["text"] for av in attr["attribute_value"]]
- except KeyError:
- values = []
- res[_fn] = _filter_values(ava[_fn], values, True)
- found = True
- break
+ _fn = _match(_name, ava)
+ if not _fn: # In the unlikely case that someone has provided us
+ # with URIs as attribute names
+ _fn = _match(attr["name"], ava)
- if not found:
- raise MissingValue("Required attribute missing: '%s'" % (
- attr[nform],))
+ if _fn:
+ try:
+ values = [av["text"] for av in attr["attribute_value"]]
+ except KeyError:
+ values = []
+ res[_fn] = _filter_values(ava[_fn], values, True)
+ continue
+ else:
+ desc = "Required attribute missing: '%s' (%s)" % (attr["name"],
+ _name)
+ raise MissingValue(desc)
if optional is None:
optional = []