X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmethods%2Fremove.py;h=89250027778e8d842e418ff8aee6858e8d64224e;hb=1412a985ce2454db4b79127a4d0979f284dc2459;hp=fb8f820dc0cde1517dfdacfa0dc681ef16218c37;hpb=0617bf203bd582103e7f45633cd320b1f80d1fb0;p=sfa.git diff --git a/sfa/methods/remove.py b/sfa/methods/remove.py index fb8f820d..89250027 100644 --- a/sfa/methods/remove.py +++ b/sfa/methods/remove.py @@ -28,27 +28,25 @@ class remove(Method): accepts = [ Parameter(str, "Credential string"), Parameter(str, "Record type"), - Parameter(str, "Human readable name (hrn) of record to be removed"), - Mixed(Parameter(str, "Request hash"), - Parameter(None, "Request hash not specified")) + Parameter(str, "Human readable name of slice to instantiate"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) ] returns = Parameter(int, "1 if successful") - def call(self, cred, type, hrn, request_hash=None, caller_cred=None): + def call(self, cred, type, hrn, origin_hrn=None): + user_cred = Credential(string=cred) - if caller_cred==None: - caller_cred=cred #log the call - self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, Credential(string=caller_cred).get_gid_caller().get_hrn(), hrn, self.name)) - # This cred will be an authority cred, not a user, so we cant use it to - # authenticate the caller's request_hash. Let just get the caller's gid - # from the cred and authenticate using that - client_gid = Credential(string=cred).get_gid_caller() - client_gid_str = client_gid.save_to_string(save_parents=True) - self.api.auth.authenticateGid(client_gid_str, [cred, type, hrn], request_hash) + if not origin_hrn: + origin_hrn = user_cred.get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name)) + + # validate the cred self.api.auth.check(cred, "remove") self.api.auth.verify_object_permission(hrn) + table = GeniTable() filter = {'hrn': hrn} if type not in ['all', '*']: @@ -67,10 +65,8 @@ class remove(Method): if hrn.startswith(self.api.hrn) and type in ['user', 'slice', 'authority']: for registry in registries: if registry not in [self.api.hrn]: - try: - result=registries[registry].remove_peer_object(credential, record) - except: - pass + result=registries[registry].remove_peer_object(credential, record, origin_hrn) + pass if type == "user": persons = self.api.plshell.GetPersons(self.api.plauth, record['pointer']) # only delete this person if he has site ids. if he doesnt, it probably means @@ -91,6 +87,4 @@ class remove(Method): table.remove(record) - # forward the call after replacing the root hrn - return 1