diff options
author | Nikos Sklikas <nsklikas@admin.grnet.gr> | 2020-05-05 14:12:02 +0300 |
---|---|---|
committer | Nikos Sklikas <nsklikas@admin.grnet.gr> | 2020-05-28 13:00:06 +0300 |
commit | 531f6bd1eac3488987be0e153d847ff59f5bbfbf (patch) | |
tree | 0e5f6fc6248d07efbf13aaccb0a0c998693c40a8 /src/saml2/config.py | |
parent | 32ab8e68b48cb0f32b7299a1c72a36f25af3cc17 (diff) | |
download | pysaml2-531f6bd1eac3488987be0e153d847ff59f5bbfbf.tar.gz |
Add requested_attributes param
Add requested_attributes param to create_authn_request
Diffstat (limited to 'src/saml2/config.py')
-rw-r--r-- | src/saml2/config.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/saml2/config.py b/src/saml2/config.py index 147d1bdf..011ab43d 100644 --- a/src/saml2/config.py +++ b/src/saml2/config.py @@ -509,6 +509,50 @@ class SPConfig(Config): return None + def load(self, cnf, metadata_construction=False): + super().load(cnf, metadata_construction=False) + self.fix_requested_attributes() + return self + + def fix_requested_attributes(self): + """Add friendly_name or name if missing to the requested attributes""" + requested_attrs = self.getattr('requested_attributes', 'sp') + + if not requested_attrs: + return + + for attr in requested_attrs: + friendly_name = attr.get('friendly_name') + name = attr.get('name') + name_format = attr.get('name_format') + + if not name and not friendly_name: + raise ValueError( + "Missing required attribute: '{}' or '{}'".format( + 'name', 'friendly_name')) + + if not name: + for converter in self.attribute_converters: + try: + attr['name'] = converter._to[friendly_name.lower()] + except KeyError: + continue + else: + if not name_format: + attr['name_format'] = converter.name_format + break + + if not friendly_name: + for converter in self.attribute_converters: + try: + attr['friendly_name'] = converter._fro[name.lower()] + except KeyError: + continue + else: + if not name_format: + attr['name_format'] = converter.name_format + break + class IdPConfig(Config): def_context = "idp" |