Added some extra functionality.
This commit is contained in:
@@ -67,9 +67,12 @@ def destinations(srvs):
|
|||||||
return [s["location"] for s in srvs]
|
return [s["location"] for s in srvs]
|
||||||
|
|
||||||
|
|
||||||
def attribute_requirement(entity):
|
def attribute_requirement(entity, index=None):
|
||||||
res = {"required": [], "optional": []}
|
res = {"required": [], "optional": []}
|
||||||
for acs in entity["attribute_consuming_service"]:
|
for acs in entity["attribute_consuming_service"]:
|
||||||
|
if index is not None and acs["index"] != index:
|
||||||
|
continue
|
||||||
|
|
||||||
for attr in acs["requested_attribute"]:
|
for attr in acs["requested_attribute"]:
|
||||||
if "is_required" in attr and attr["is_required"] == "true":
|
if "is_required" in attr and attr["is_required"] == "true":
|
||||||
res["required"].append(attr)
|
res["required"].append(attr)
|
||||||
@@ -133,6 +136,9 @@ class MetaData(object):
|
|||||||
def __getitem__(self, item):
|
def __getitem__(self, item):
|
||||||
return self.entity[item]
|
return self.entity[item]
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
self.entity[key] = value
|
||||||
|
|
||||||
def do_entity_descriptor(self, entity_descr):
|
def do_entity_descriptor(self, entity_descr):
|
||||||
if self.check_validity:
|
if self.check_validity:
|
||||||
try:
|
try:
|
||||||
@@ -297,12 +303,14 @@ class MetaData(object):
|
|||||||
|
|
||||||
return self.service(entity_id, typ, service)
|
return self.service(entity_id, typ, service)
|
||||||
|
|
||||||
def attribute_requirement(self, entity_id, index=0):
|
def attribute_requirement(self, entity_id, index=None):
|
||||||
""" Returns what attributes the SP requires and which are optional
|
""" Returns what attributes the SP requires and which are optional
|
||||||
if any such demands are registered in the Metadata.
|
if any such demands are registered in the Metadata.
|
||||||
|
|
||||||
:param entity_id: The entity id of the SP
|
:param entity_id: The entity id of the SP
|
||||||
:param index: which of the attribute consumer services its all about
|
:param index: which of the attribute consumer services its all about
|
||||||
|
if index=None then return all attributes expected by all
|
||||||
|
attribute_consuming_services.
|
||||||
:return: 2-tuple, list of required and list of optional attributes
|
:return: 2-tuple, list of required and list of optional attributes
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -310,7 +318,7 @@ class MetaData(object):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
for sp in self[entity_id]["spsso_descriptor"]:
|
for sp in self[entity_id]["spsso_descriptor"]:
|
||||||
_res = attribute_requirement(sp)
|
_res = attribute_requirement(sp, index)
|
||||||
res["required"].extend(_res["required"])
|
res["required"].extend(_res["required"])
|
||||||
res["optional"].extend(_res["optional"])
|
res["optional"].extend(_res["optional"])
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@@ -513,6 +521,7 @@ class MetaDataMD(MetaData):
|
|||||||
|
|
||||||
class MetadataStore(object):
|
class MetadataStore(object):
|
||||||
def __init__(self, onts, attrc, config, ca_certs=None,
|
def __init__(self, onts, attrc, config, ca_certs=None,
|
||||||
|
check_validity=True,
|
||||||
disable_ssl_certificate_validation=False):
|
disable_ssl_certificate_validation=False):
|
||||||
"""
|
"""
|
||||||
:params onts:
|
:params onts:
|
||||||
@@ -523,11 +532,16 @@ class MetadataStore(object):
|
|||||||
"""
|
"""
|
||||||
self.onts = onts
|
self.onts = onts
|
||||||
self.attrc = attrc
|
self.attrc = attrc
|
||||||
self.http = HTTPBase(verify=disable_ssl_certificate_validation,
|
|
||||||
ca_bundle=ca_certs)
|
if disable_ssl_certificate_validation:
|
||||||
|
self.http = HTTPBase(verify=False, ca_bundle=ca_certs)
|
||||||
|
else:
|
||||||
|
self.http = HTTPBase(verify=True, ca_bundle=ca_certs)
|
||||||
|
|
||||||
self.security = security_context(config)
|
self.security = security_context(config)
|
||||||
self.ii = 0
|
self.ii = 0
|
||||||
self.metadata = {}
|
self.metadata = {}
|
||||||
|
self.check_validity = check_validity
|
||||||
|
|
||||||
def load(self, typ, *args, **kwargs):
|
def load(self, typ, *args, **kwargs):
|
||||||
if typ == "local":
|
if typ == "local":
|
||||||
@@ -539,10 +553,16 @@ class MetadataStore(object):
|
|||||||
_md = MetaData(self.onts, self.attrc, args[0], **kwargs)
|
_md = MetaData(self.onts, self.attrc, args[0], **kwargs)
|
||||||
elif typ == "remote":
|
elif typ == "remote":
|
||||||
key = kwargs["url"]
|
key = kwargs["url"]
|
||||||
|
_args = {}
|
||||||
|
for _key in ["node_name", "check_validity"]:
|
||||||
|
try:
|
||||||
|
_args[_key] = kwargs[_key]
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
_md = MetaDataExtern(self.onts, self.attrc,
|
_md = MetaDataExtern(self.onts, self.attrc,
|
||||||
kwargs["url"], self.security,
|
kwargs["url"], self.security,
|
||||||
kwargs["cert"], self.http,
|
kwargs["cert"], self.http, **_args)
|
||||||
node_name=kwargs.get('node_name'))
|
|
||||||
elif typ == "mdfile":
|
elif typ == "mdfile":
|
||||||
key = args[0]
|
key = args[0]
|
||||||
_md = MetaDataMD(self.onts, self.attrc, args[0])
|
_md = MetaDataMD(self.onts, self.attrc, args[0])
|
||||||
@@ -559,6 +579,8 @@ class MetadataStore(object):
|
|||||||
for key, vals in spec.items():
|
for key, vals in spec.items():
|
||||||
for val in vals:
|
for val in vals:
|
||||||
if isinstance(val, dict):
|
if isinstance(val, dict):
|
||||||
|
if not self.check_validity:
|
||||||
|
val["check_validity"] = False
|
||||||
self.load(key, **val)
|
self.load(key, **val)
|
||||||
else:
|
else:
|
||||||
self.load(key, val)
|
self.load(key, val)
|
||||||
@@ -863,6 +885,10 @@ class MetadataStore(object):
|
|||||||
for _md in self.metadata.values():
|
for _md in self.metadata.values():
|
||||||
for ent_id, ent_desc in _md.items():
|
for ent_id, ent_desc in _md.items():
|
||||||
if descriptor in ent_desc:
|
if descriptor in ent_desc:
|
||||||
|
if ent_id in res:
|
||||||
|
#print "duplicated entity_id: %s" % res
|
||||||
|
pass
|
||||||
|
else:
|
||||||
res.append(ent_id)
|
res.append(ent_id)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user