summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kanakarakis <ivan.kanak@gmail.com>2019-10-08 18:57:45 +0300
committerIvan Kanakarakis <ivan.kanak@gmail.com>2019-10-08 23:22:45 +0300
commite44967957408de2aae96aec8e73fd556b9e2536a (patch)
tree4e1337eb27d8b8ff66e2f72e7642219c9eb8205a
parentb1986e2d056a435db9b59a208d36803102571b0d (diff)
downloadpysaml2-e44967957408de2aae96aec8e73fd556b9e2536a.tar.gz
Add mdstore method to extract mdui uiinfo elements
Signed-off-by: Ivan Kanakarakis <ivan.kanak@gmail.com>
-rw-r--r--src/saml2/mdstore.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/saml2/mdstore.py b/src/saml2/mdstore.py
index 021c4a9e..83a89581 100644
--- a/src/saml2/mdstore.py
+++ b/src/saml2/mdstore.py
@@ -37,6 +37,13 @@ from saml2.validate import NotValid
from saml2.sigver import security_context
from saml2.extension.mdattr import NAMESPACE as NS_MDATTR
from saml2.extension.mdattr import EntityAttributes
+from saml2.extension.mdui import NAMESPACE as NS_MDUI
+from saml2.extension.mdui import UIInfo
+from saml2.extension.mdui import DisplayName
+from saml2.extension.mdui import Description
+from saml2.extension.mdui import InformationURL
+from saml2.extension.mdui import PrivacyStatementURL
+from saml2.extension.mdui import Logo
logger = logging.getLogger(__name__)
@@ -45,6 +52,7 @@ classnames = {
"mdattr_entityattributes": "{ns}&{tag}".format(
ns=NS_MDATTR, tag=EntityAttributes.c_tag
),
+ "mdui_uiinfo": "{ns}&{tag}".format(ns=NS_MDUI, tag=UIInfo.c_tag),
}
ENTITY_CATEGORY = "http://macedir.org/entity-category"
@@ -1255,6 +1263,33 @@ class MetadataStore(MetaData):
"attribute_value"]]
return res
+ def _mdui_uiinfo(self, entity_id):
+ descriptor_names = (
+ item
+ for item in self[entity_id].keys()
+ if item.endswith("_descriptor")
+ )
+ descriptors = (
+ descriptor
+ for descriptor_name in descriptor_names
+ for descriptor in self[entity_id].get(descriptor_name, [])
+ )
+ extensions = (
+ extension
+ for descriptor in descriptors
+ for extension in descriptor.get("extensions", {}).get("extension_elements", [])
+ )
+ uiinfos = (
+ extension
+ for extension in extensions
+ if extension.get("__class__") == classnames["mdui_uiinfo"]
+ )
+ return uiinfos
+
+ def mdui_uiinfo(self, entity_id):
+ uiinfos = list(self._mdui_uiinfo(entity_id))
+ return uiinfos
+
def bindings(self, entity_id, typ, service):
for _md in self.metadata.values():
if entity_id in _md.items():