- def _get_gid(self, hrn=None, type=None):
- """
- git_gid helper. Retrive the gid from the registry and save it to file.
- """
-
- if not hrn:
- hrn = self.user
-
- gidfile = os.path.join(self.options.sfi_dir, hrn + ".gid")
- gid = self.get_cached_gid(gidfile)
- if not gid:
- user_cred = self.get_user_cred()
- print>>sys.stderr, " \r\n \t SFI.PY _get_gid "
- records = self.registry.Resolve(hrn, user_cred.save_to_string(save_parents=True))
- if not records:
- raise RecordNotFound(args[0])
- record = records[0]
- if type:
- record=None
- for rec in records:
- if type == rec['type']:
- record = rec
- if not record:
- raise RecordNotFound(args[0])
-
- gid = GID(string=record['gid'])
- self.logger.info("Writing gid to %s"%gidfile)
- gid.save_to_file(filename=gidfile)
- return gid
-
-
- def get_cached_credential(self, file):
- """
- Return a cached credential only if it hasn't expired.
- """
- if (os.path.isfile(file)):
- credential = Credential(filename=file)
- # make sure it isnt expired
- if not credential.get_expiration or \
- datetime.datetime.today() < credential.get_expiration():
- return credential
- return None
-
- def get_user_cred(self):
- file = os.path.join(self.options.sfi_dir, self.user.replace(self.authority + '.', '') + ".cred")
- return self.get_cred(file, 'user', self.user)
-
- def get_auth_cred(self):
- if not self.authority:
- self.logger.critical("no authority specified. Use -a or set SF_AUTH")
- sys.exit(-1)
- file = os.path.join(self.options.sfi_dir, self.authority + ".cred")
- return self.get_cred(file, 'authority', self.authority)
-
- def get_slice_cred(self, name):
- file = os.path.join(self.options.sfi_dir, "slice_" + get_leaf(name) + ".cred")
- return self.get_cred(file, 'slice', name)
-
- def get_cred(self, file, type, hrn):
- # attempt to load a cached credential
- cred = self.get_cached_credential(file)
- if not cred:
- if type in ['user']:
- cert_string = self.cert.save_to_string(save_parents=True)
- user_name = self.user.replace(self.authority + ".", '')
- if user_name.count(".") > 0:
- user_name = user_name.replace(".", '_')
- self.user = self.authority + "." + user_name
- cred_str = self.registry.GetSelfCredential(cert_string, hrn, "user")
- else:
- # bootstrap slice credential from user credential
- user_cred = self.get_user_cred().save_to_string(save_parents=True)
- cred_str = self.registry.GetCredential(user_cred, hrn, type)
-
- if not cred_str:
- self.logger.critical("Failed to get %s credential" % type)
- sys.exit(-1)
-
- cred = Credential(string=cred_str)
- cred.save_to_file(file, save_parents=True)
- self.logger.info("Writing %s credential to %s" %(type, file))
-
- return cred
-
-