again getting away with caller_cred and passing just the hrn of the initial caller
[sfa.git] / sfa / methods / remove_peer_object.py
index 67fa56a..81a9e53 100644 (file)
@@ -26,17 +26,19 @@ class remove_peer_object(Method):
     
     accepts = [
         Parameter(str, "Credential string"),
-        Parameter(dict, "Record dictionary")
+        Parameter(dict, "Record dictionary"),
+        Mixed(Parameter(str, "Request hash"),
+              Parameter(None, "Request hash 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, request_hash=None, origin_hrn=None):
+        if origin_hrn==None:
+            origin_hrn=Credential(string=cred).get_gid_caller().get_hrn()
         #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))
-        
+        self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, record['hrn'], self.name))
+        self.api.auth.authenticateCred(cred, [cred], request_hash) 
         self.api.auth.check(cred, "remove")
 
         # Only allow the local interface or record owner to delete peer_records 
@@ -44,9 +46,10 @@ class remove_peer_object(Method):
         except: self.api.auth.verify_cred_is_me(cred)
         
         table = GeniTable()
-        hrn, type, peer_auth = record['hrn'], record['type']
+        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 +69,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']})
@@ -93,7 +96,7 @@ class remove_peer_object(Method):
         if not peers:
             raise GeniInvalidArgument, "No such peer"
         peer = peers[0]
-        return peer['peername'] 
+        return peer['shortname']