from sfa.util.faults import *
from sfa.util.method import Method
from sfa.util.parameter import Parameter, Mixed
-from sfa.util.auth import Auth
+from sfa.trust.auth import Auth
from sfa.util.record import GeniRecord
+from sfa.trust.certificate import Keypair, convert_public_key
+from sfa.trust.gid import *
from sfa.util.debug import log
class update(Method):
elif type == "slice":
hrn=record.get_name()
pl_record=self.api.geni_fields_to_pl_fields(type, hrn, record)
+ if 'name' in pl_reocrd:
+ pl_record.pop('name')
self.api.plshell.UpdateSlice(self.api.plauth, pointer, pl_record)
elif type == "user":
update_fields[key] = all_fields[key]
self.api.plshell.UpdatePerson(self.api.plauth, pointer, update_fields)
+ if 'key' in record and record['key']:
+ # must check this key against the previous one if it exists
+ persons = self.api.plshell.GetPersons(self.api.plauth, [pointer], ['key_ids'])
+ person = persons[0]
+ keys = person['key_ids']
+ keys = self.api.plshell.GetKeys(self.api.plauth, person['key_ids'])
+ key_exists = False
+ if isinstance(record['key'], list):
+ new_key = record['key'][0]
+ else:
+ new_key = record['key']
+
+ # Delete all stale keys
+ for key in keys:
+ if record['key'] != key['key']:
+ self.api.plshell.DeleteKey(self.api.plauth, key['key_id'])
+ else:
+ key_exists = True
+ if not key_exists:
+ self.api.plshell.AddPersonKey(self.api.plauth, pointer, {'key_type': 'ssh', 'key': new_key})
+
+ # find the existing geni record
+ hrn = record['hrn']
+ auth_name = self.api.auth.get_authority(hrn)
+ auth_info = self.api.auth.get_auth_info(auth_name)
+ table = self.api.auth.get_auth_table(auth_name)
+ person_records = table.resolve('user', hrn)
+ person_record = person_records[0]
+
+ # update the openssl key and gid
+ pkey = convert_public_key(new_key)
+ uuid = create_uuid()
+ gid_object = self.api.auth.hierarchy.create_gid(hrn, uuid, pkey)
+ gid = gid_object.save_to_string(save_parents=True)
+ record['gid'] = gid
+ record.set_gid(gid)
+ table.update(record)
+
elif type == "node":
self.api.plshell.UpdateNode(self.api.plauth, pointer, record)