From 7fb0fb6aac550dab44cae76b2e20bfdb3c64adcc Mon Sep 17 00:00:00 2001
From: Tony Mack <tmack@cs.princeton.edu>
Date: Sun, 22 Aug 2010 16:45:35 +0000
Subject: [PATCH] look for a delegate cred from user before using server's cred

---
 sfa/managers/slice_manager_pl.py | 64 +++++++++++++++++---------------
 1 file changed, 34 insertions(+), 30 deletions(-)

diff --git a/sfa/managers/slice_manager_pl.py b/sfa/managers/slice_manager_pl.py
index 527814ea..38ae0d60 100644
--- a/sfa/managers/slice_manager_pl.py
+++ b/sfa/managers/slice_manager_pl.py
@@ -60,10 +60,10 @@ def create_slice(api, xrn, creds, rspec, users):
             message = "%s (line %s)" % (error.message, error.line)
             raise InvalidRSpec(message)
 
-    # XX
-    # XX TODO: Should try to use delegated credential first
-    # XX
-    cred = api.getCredential()
+    # attempt to use delegated credential first
+    credential = api.getDelegatedCredential(creds)
+    if not credential:     
+        credential = api.getCredential()
     threads = ThreadManager()
     for aggregate in api.aggregates:
         # Just send entire RSpec to each aggregate
@@ -75,10 +75,10 @@ def create_slice(api, xrn, creds, rspec, users):
     return merged_rspec
 
 def renew_slice(api, xrn, creds, expiration_time):
-    # XX
-    # XX TODO: Should try to use delegated credential first
-    # XX
-    credential = api.getCredential()
+    # attempt to use delegated credential first
+    credential = api.getDelegatedCredential(creds)
+    if not credential:
+        credential = api.getCredential()
     threads = ThreadManager()
     for aggregate in api.aggregates:
         server = api.aggregates[aggregate]
@@ -96,8 +96,10 @@ def get_ticket(api, xrn, creds, rspec, users):
         aggregate_hrn = element.values()[0]
         aggregate_rspecs[aggregate_hrn] = rspec 
 
-    # get a ticket from each aggregate 
-    credential = api.getCredential()
+    # attempt to use delegated credential first
+    credential = api.getDelegatedCredential(creds)
+    if not credential:
+        credential = api.getCredential() 
     threads = ThreadManager()
     for aggregate, aggregate_rspec in aggregate_rspecs.items():
         server = None
@@ -155,10 +157,10 @@ def get_ticket(api, xrn, creds, rspec, users):
 
 
 def delete_slice(api, xrn, origin_hrn=None):
-    # XX
-    # XX TODO: Should try to use delegated credential first
-    # XX
-    credential = api.getCredential()
+    # attempt to use delegated credential first
+    credential = api.getDelegatedCredential(creds)
+    if not credential:
+        credential = api.getCredential()
     threads = ThreadManager()
     for aggregate in api.aggregates:
         server = api.aggregates[aggregate]
@@ -167,10 +169,10 @@ def delete_slice(api, xrn, origin_hrn=None):
     return 1
 
 def start_slice(api, xrn, creds):
-    # XX
-    # XX TODO: Should try to use delegated credential first
-    # XX
-    credential = api.getCredential()
+    # attempt to use delegated credential first
+    credential = api.getDelegatedCredential(creds)
+    if not credential:
+        credential = api.getCredential()
     threads = ThreadManager()
     for aggregate in api.aggregates:
         server = api.aggregates[aggregate]
@@ -179,10 +181,10 @@ def start_slice(api, xrn, creds):
     return 1
  
 def stop_slice(api, xrn, creds):
-    # XX
-    # XX TODO: Should try to use delegated credential first
-    # XX
-    credential = api.getCredential()
+    # attempt to use delegated credential first
+    credential = api.getDelegatedCredential(creds)
+    if not credential:
+        credential = api.getCredential()
     threads = ThreadManager()
     for aggregate in api.aggregates:
         server = api.aggregates[aggregate]
@@ -215,10 +217,12 @@ def get_slices(api, creds):
         if slices:
             return slices    
 
-    # fetch from aggregates
-    slices = []
-    credential = api.getCredential()
+    # attempt to use delegated credential first
+    credential = api.getDelegatedCredential(creds)
+    if not credential:
+        credential = api.getCredential()
     threads = ThreadManager()
+    # fetch from aggregates
     for aggregate in api.aggregates:
         server = api.aggregates[aggregate]
         threads.run(server.ListSlices, credential)
@@ -253,12 +257,12 @@ def get_rspec(api, creds, options):
 
     hrn, type = urn_to_hrn(xrn)
     rspec = None
-    # XX
-    # XX TODO: Should try to use delegated credential first 
-    # XX
-    cred = api.getCredential()
-    threads = ThreadManager()
     
+    # attempt to use delegated credential first
+    credential = api.getDelegatedCredential(creds)
+    if not credential:
+        credential = api.getCredential()
+    threads = ThreadManager()
     for aggregate in api.aggregates:
         # get the rspec from the aggregate
         server = api.aggregates[aggregate]
-- 
2.47.0