From ba7ee0557966e168e8f3a737f52a613b05ad4635 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Sun, 16 Oct 2011 22:13:22 -0400 Subject: [PATCH] added get_server --- sfa/plc/api.py | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/sfa/plc/api.py b/sfa/plc/api.py index 8de67d67..9891410a 100644 --- a/sfa/plc/api.py +++ b/sfa/plc/api.py @@ -107,6 +107,7 @@ class SfaAPI(BaseAPI): self.hrn = self.config.SFA_INTERFACE_HRN self.time_format = "%Y-%m-%d %H:%M:%S" + def getPLCShell(self): self.plauth = {'Username': self.config.SFA_PLC_USER, 'AuthMethod': 'password', @@ -127,6 +128,26 @@ class SfaAPI(BaseAPI): shell = xmlrpclib.Server(url, verbose = 0, allow_none = True) return shell + def get_server(self, interface, cred, timeout=30): + """ + Returns a connection to the specified interface. Use the specified + credential to determine the caller and look for the caller's key/cert + in the registry hierarchy cache. + """ + from sfa.trust.hierarchy import Hierarchy + if not isinstance(cred, Credential): + cred_obj = Credential(string=cred) + else: + cred_obj = cred + caller_gid = cred_obj.get_gid_caller() + hierarchy = Hierarchy() + auth_info = hierarchy.get_auth_info(caller_gid.get_hrn()) + key_file = auth_info.get_privkey_filename() + cert_file = auth_info.get_gid_filename() + server = interface.get_server(key_file, cert_file, timeout) + return server + + def getCredential(self): """ Return a valid credential for this interface. @@ -160,7 +181,7 @@ class SfaAPI(BaseAPI): """ if creds and not isinstance(creds, list): creds = [creds] - delegated_creds = filter_creds_by_caller(creds,self.hrn) + delegated_creds = filter_creds_by_caller(creds, [self.hrn, self.hrn + '.slicemanager']) if not delegated_creds: return None return delegated_creds[0] @@ -170,8 +191,8 @@ class SfaAPI(BaseAPI): Get our credential from a remote registry """ from sfa.server.registry import Registries - registries = Registries(self) - registry = registries[self.hrn] + registries = Registries() + registry = registries.get_server(self.hrn, self.key_file, self.cert_file) cert_string=self.cert.save_to_string(save_parents=True) # get self credential self_cred = registry.GetSelfCredential(cert_string, self.hrn, 'authority') @@ -226,6 +247,8 @@ class SfaAPI(BaseAPI): except IOError: self.credential = self.getCredentialFromRegistry() + + ## # Convert SFA fields to PLC fields for use when registering up updating # registry record in the PLC database @@ -505,7 +528,8 @@ class SfaAPI(BaseAPI): elif (type.startswith("authority")): record['url'] = None if record['hrn'] in self.aggregates: - record['url'] = self.aggregates[record['hrn']].url + + record['url'] = self.aggregates[record['hrn']].get_url() if record['pointer'] != -1: record['PI'] = [] -- 2.47.0