X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmanagers%2Fregistry_manager_pl.py;h=6052eee35f07e3b4a3ce8dbd7f0d283d1f254618;hb=75fbf719866a77fe75398968dc3f1f1730b97f8e;hp=4c54e5f109e7c011a626e6f9ba13d6e10e67815c;hpb=7c982c37858ad4500fc4c1b71896e2f6efe4a065;p=sfa.git diff --git a/sfa/managers/registry_manager_pl.py b/sfa/managers/registry_manager_pl.py index 4c54e5f1..6052eee3 100644 --- a/sfa/managers/registry_manager_pl.py +++ b/sfa/managers/registry_manager_pl.py @@ -1,21 +1,28 @@ import types import time + +from sfa.util.faults import * from sfa.util.prefixTree import prefixTree from sfa.util.record import SfaRecord from sfa.util.table import SfaTable from sfa.util.record import SfaRecord from sfa.trust.gid import GID -from sfa.util.namespace import * -from sfa.trust.credential import * -from sfa.trust.certificate import * -from sfa.util.faults import * +from sfa.util.xrn import Xrn, get_leaf, get_authority, hrn_to_urn, urn_to_hrn +from sfa.util.plxrn import hrn_to_pl_login_base +from sfa.trust.credential import Credential +from sfa.trust.certificate import Certificate, Keypair from sfa.trust.gid import create_uuid +from sfa.util.version import version_core -def get_version(api): - version = {} - version['geni_api'] = 1 - version['sfa'] = 1 - return version +# The GENI GetVersion call +def GetVersion(api): + peers =dict ([ (peername,v._ServerProxy__host) for (peername,v) in api.registries.iteritems() + if peername != api.hrn]) + xrn=Xrn(api.hrn) + return version_core({'interface':'registry', + 'hrn':xrn.get_hrn(), + 'urn':xrn.get_urn(), + 'peers':peers}) def get_credential(api, xrn, type, is_self=False): # convert xrn to hrn @@ -77,20 +84,16 @@ def get_credential(api, xrn, type, is_self=False): return new_cred.save_to_string(save_parents=True) -# The GENI GetVersion call -def GetVersion(): - version = {} - version['geni_api'] = 1 - return version - def resolve(api, xrns, type=None, full=True): - # load all know registry names into a prefix tree and attempt to find + # load all known registry names into a prefix tree and attempt to find # the longest matching prefix if not isinstance(xrns, types.ListType): + if not type: + type = Xrn(xrns).get_type() xrns = [xrns] hrns = [urn_to_hrn(xrn)[0] for xrn in xrns] - # create a dict whre key is an registry hrn and its value is a + # create a dict where key is a registry hrn and its value is a # hrns at that registry (determined by the known prefix tree). xrn_dict = {} registries = api.registries @@ -157,10 +160,10 @@ def list(api, xrn, origin_hrn=None): records = [] if registry_hrn != api.hrn: credential = api.getCredential() - record_list = registries[registry_hrn].list(credential, xrn, origin_hrn) + record_list = registries[registry_hrn].List(xrn, credential) records = [SfaRecord(dict=record).as_dict() for record in record_list] - # if we still havnt found the record yet, try the local registry + # if we still have not found the record yet, try the local registry if not records: if not api.auth.hierarchy.auth_exists(hrn): raise MissingAuthority(hrn) @@ -171,6 +174,18 @@ def list(api, xrn, origin_hrn=None): return records +def create_gid(api, xrn, cert): + # get the authority + authority = Xrn(xrn=xrn).get_authority_hrn() + auth_info = api.auth.get_auth_info(authority) + if not cert: + pkey = Keypair(create=True) + else: + certificate = Certificate(string=cert) + pkey = certificate.get_pubkey() + gid = api.auth.hierarchy.create_gid(xrn, create_uuid(), pkey) + return gid.save_to_string(save_parents=True) + def register(api, record): hrn, type = record['hrn'], record['type'] @@ -189,7 +204,6 @@ def register(api, record): record['authority'] = get_authority(record['hrn']) type = record['type'] hrn = record['hrn'] - api.auth.verify_object_permission(hrn) auth_info = api.auth.get_auth_info(record['authority']) pub_key = None # make sure record has a gid @@ -285,7 +299,6 @@ def update(api, record_dict): type = new_record['type'] hrn = new_record['hrn'] urn = hrn_to_urn(hrn,type) - api.auth.verify_object_permission(hrn) table = SfaTable() # make sure the record exists records = table.findObjects({'type': type, 'hrn': hrn}) @@ -366,20 +379,18 @@ def update(api, record_dict): return 1 -def remove(api, xrn, type, origin_hrn=None): - # convert xrn to hrn - if type: - hrn = urn_to_hrn(xrn)[0] - else: - hrn, type = urn_to_hrn(xrn) +# expecting an Xrn instance +def remove(api, xrn, origin_hrn=None): table = SfaTable() - filter = {'hrn': hrn} + filter = {'hrn': xrn.get_hrn()} + hrn=xrn.get_hrn() + type=xrn.get_type() if type and type not in ['all', '*']: filter['type'] = type + records = table.find(filter) - if not records: - raise RecordNotFound(hrn) + if not records: raise RecordNotFound(hrn) record = records[0] type = record['type']