X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmethods%2Fremove_peer_object.py;h=32b756ac6ea700122e5c8abc3151f9532c5f3c43;hb=3d7237fa0b5f2b4a60cb97c7fb3b6aecfd94558a;hp=67fa56af24390649a1d4fc6981ea691868e39a1f;hpb=4a1b3a77d29e9fd47c0a1b5330d91935f150a5f0;p=sfa.git diff --git a/sfa/methods/remove_peer_object.py b/sfa/methods/remove_peer_object.py index 67fa56af..32b756ac 100644 --- a/sfa/methods/remove_peer_object.py +++ b/sfa/methods/remove_peer_object.py @@ -2,11 +2,10 @@ from sfa.util.faults import * from sfa.util.method import Method from sfa.util.parameter import Parameter, Mixed from sfa.trust.auth import Auth -from sfa.util.record import GeniRecord -from sfa.util.genitable import GeniTable +from sfa.util.record import SfaRecord +from sfa.util.table import SfaTable from sfa.util.debug import log from sfa.trust.credential import Credential -from sfa.util.misc import * from types import StringTypes class remove_peer_object(Method): @@ -26,27 +25,32 @@ class remove_peer_object(Method): accepts = [ Parameter(str, "Credential string"), - Parameter(dict, "Record dictionary") + Parameter(dict, "Record dictionary"), + 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, record, caller_cred=None): - if caller_cred==None: - caller_cred=cred + def call(self, cred, record, origin_hrn=None): + user_cred = Credential(string=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)) - + 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)) + self.api.auth.check(cred, "remove") # Only allow the local interface or record owner to delete peer_records try: self.api.auth.verify_object_permission(record['hrn']) except: self.api.auth.verify_cred_is_me(cred) - table = GeniTable() - hrn, type, peer_auth = record['hrn'], record['type'] + table = SfaTable() + hrn, type = record['hrn'], record['type'] records = table.find({'hrn': hrn, 'type': type }) for record in records: + if record['peer_authority']: self.remove_plc_record(record) table.remove(record) @@ -66,12 +70,12 @@ class remove_peer_object(Method): elif type == "slice": slices=self.api.plshell.GetSlices(self.api.plauth, {'slice_id' : record['pointer']}) - if not slices: + if not slices: return 1 - slice=slices[0] + slice=slices[0] if slice['peer_id']: peer = self.get_peer_name(slice['peer_id']) - self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'slice', slice['slice_id'], peer) + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'slice', slice['slice_id'], peer) self.api.plshell.DeleteSlice(self.api.plauth, slice['slice_id']) elif type == "authority": sites=self.api.plshell.GetSites(self.api.plauth, {'site_id' : record['pointer']}) @@ -84,16 +88,16 @@ class remove_peer_object(Method): self.api.plshell.DeleteSite(self.api.plauth, site['site_id']) else: - raise UnknownGeniType(type) + raise UnknownSfaType(type) return 1 def get_peer_name(self, peer_id): peers = self.api.plshell.GetPeers(self.api.plauth, [peer_id], ['peername', 'shortname', 'hrn_root']) if not peers: - raise GeniInvalidArgument, "No such peer" + raise SfaInvalidArgument, "No such peer" peer = peers[0] - return peer['peername'] + return peer['shortname']