summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland Hedberg <roland.hedberg@adm.umu.se>2015-09-08 07:34:45 +0200
committerRoland Hedberg <roland.hedberg@adm.umu.se>2015-09-08 07:34:45 +0200
commit3ddbb1a128373aa83283506c691f7d1929b6f0ac (patch)
treea808134d126d6adc5298e02a9bf6561321590491
parent2be0571a5f9ee13f5c8eaa92c789e9e4764caf7a (diff)
downloadpysaml2-3ddbb1a128373aa83283506c691f7d1929b6f0ac.tar.gz
Allow name_format for requested attributes to be set in the configuration.
-rw-r--r--src/saml2/config.py3
-rw-r--r--src/saml2/metadata.py27
2 files changed, 22 insertions, 8 deletions
diff --git a/src/saml2/config.py b/src/saml2/config.py
index 479c1adb..f0baa1ff 100644
--- a/src/saml2/config.py
+++ b/src/saml2/config.py
@@ -1,4 +1,5 @@
#!/usr/bin/env python
+from saml2.saml import NAME_FORMAT_URI
__author__ = 'rolandh'
@@ -93,6 +94,7 @@ SP_ARGS = [
"ecp",
"name_id_format",
"logout_requests_signed",
+ "requested_attribute_name_format"
]
AA_IDP_ARGS = [
@@ -236,6 +238,7 @@ class Config(object):
self.extensions = {}
self.attribute = []
self.attribute_profile = []
+ self.requested_attribute_name_format = NAME_FORMAT_URI
def setattr(self, context, attr, val):
if context == "":
diff --git a/src/saml2/metadata.py b/src/saml2/metadata.py
index 170f59d3..9eaf5d6b 100644
--- a/src/saml2/metadata.py
+++ b/src/saml2/metadata.py
@@ -239,15 +239,19 @@ def do_key_descriptor(cert=None, enc_cert=None, use="both"):
return kd_list
-def do_requested_attribute(attributes, acs, is_required="false"):
+def do_requested_attribute(attributes, acs, is_required="false",
+ name_format=NAME_FORMAT_URI):
lista = []
for attr in attributes:
- attr = from_local_name(acs, attr, NAME_FORMAT_URI)
+ attr = from_local_name(acs, attr, name_format)
args = {}
- for key in attr.keyswv():
- args[key] = getattr(attr, key)
+ if isinstance(attr, six.string_types):
+ args["name"] = attr
+ else:
+ for key in attr.keyswv():
+ args[key] = getattr(attr, key)
args["is_required"] = is_required
- args["name_format"] = NAME_FORMAT_URI
+ args["name_format"] = name_format
lista.append(md.RequestedAttribute(**args))
return lista
@@ -465,14 +469,21 @@ def do_attribute_consuming_service(conf, spsso):
requested_attributes = []
acs = conf.attribute_converters
req = conf.getattr("required_attributes", "sp")
+
+ req_attr_name_format = conf.getattr("requested_attribute_name_format", "sp")
+ if req_attr_name_format is None:
+ req_attr_name_format = conf.requested_attribute_name_format
+
if req:
- requested_attributes.extend(do_requested_attribute(req, acs,
- is_required="true"))
+ requested_attributes.extend(
+ do_requested_attribute(req, acs, is_required="true",
+ name_format=req_attr_name_format))
opt = conf.getattr("optional_attributes", "sp")
if opt:
- requested_attributes.extend(do_requested_attribute(opt, acs))
+ requested_attributes.extend(
+ do_requested_attribute(opt, acs, name_format=req_attr_name_format))
try:
if conf.description: