+### $Id$
+### $URL$
+
+from geni.trust.certificate import Keypair, convert_public_key
+from geni.trust.gid import *
from geni.util.faults import *
-from geni.util.excep import *
+from geni.util.misc import *
from geni.util.method import Method
from geni.util.parameter import Parameter, Mixed
from geni.util.auth import Auth
from geni.util.record import GeniRecord
from geni.util.debug import log
-from geni.util.misc import *
class register(Method):
"""
record = GeniRecord(dict = record_dict)
type = record.get_type()
name = record.get_name()
+ self.api.auth.verify_object_permission(name)
auth_name = self.api.auth.get_authority(name)
- self.api.auth.verify_object_permission(auth_name)
auth_info = self.api.auth.get_auth_info(auth_name)
table = self.api.auth.get_auth_table(auth_name)
- pkey = None
+
+ # make sure record has a gid
+ if 'gid' not in record:
+ uuid = create_uuid()
+ pkey = Keypair(create=True)
+ if 'keys' in record and record['keys']:
+ pkey = convert_public_key(record['keys'][0])
+
+ gid_object = self.api.auth.hierarchy.create_gid(name, uuid, pkey)
+ gid = gid_object.save_to_string(save_parents=True)
+ record['gid'] = gid
+ record.set_gid(gid)
# check if record already exists
existing_records = table.resolve(type, name)
if existing_records:
raise ExistingRecord(name)
-
- geni_fields = record.get_geni_info()
- pl_fields = record.get_pl_info()
if (type == "sa") or (type=="ma"):
# update the tree
print >> log, "linking ma and sa to the same plc site"
pointer = other_rec[0].get_pointer()
else:
- self.api.geni_fields_to_pl_fields(type, name, geni_fields, pl_fields)
- print >> log, "adding site with fields", pl_fields
- pointer = self.api.plshell.AddSite(self.api.plauth, pl_fields)
+ pl_record = self.api.geni_fields_to_pl_fields(type, name, record)
+ print >> log, "adding site with fields", pl_record
+ pointer = self.api.plshell.AddSite(self.api.plauth, pl_record)
record.set_pointer(pointer)
elif (type == "slice"):
- self.api.geni_fields_to_pl_fields(type, name, geni_fields, pl_fields)
- pointer = self.api.plshell.AddSlice(self.api.plauth, pl_fields)
+ pl_record = self.api.geni_fields_to_pl_fields(type, name, record)
+ pointer = self.api.plshell.AddSlice(self.api.plauth, pl_record)
record.set_pointer(pointer)
elif (type == "user"):
- self.api.geni_fields_to_pl_fields(type, name, geni_fields, pl_fields)
- pointer = self.api.plshell.AddPerson(self.api.plauth, pl_fields)
+ pointer = self.api.plshell.AddPerson(self.api.plauth, dict(record))
+ if 'enabled' in record and record['enabled']:
+ self.api.plshell.UpdatePerson(self.api.plauth, pointer, {'enabled': record['enabled']})
+ login_base = get_leaf(auth_info.hrn)
+ self.api.plshell.AddPersonToSite(self.api.plauth, pointer, login_base)
+ # What roles should this user have?
+ self.api.plshell.AddRoleToPerson(self.api.plauth, 'user', pointer)
record.set_pointer(pointer)
+
+ # Add the user's key
+ if record['keys']:
+ self.api.plshell.AddPersonKey(self.api.plauth, pointer, {'key_type' : 'ssh', 'key' : record['keys'][0]})
elif (type == "node"):
- self.api.geni_fields_to_pl_fields(type, name, geni_fields, pl_fields)
- #login_base = self.api.hrn_to_pl_login_base(auth_name)
- login_base = hrn_to_pl_login_base(auth_name)
- pointer = self.api.plshell.AddNode(self.api.plauth, login_base, pl_fields)
+ pl_record = self.api.geni_fields_to_pl_fields(type, name, record)
+ login_base = hrn_to_pl_login_base(auth_name)
+ pointer = self.api.plshell.AddNode(self.api.plauth, login_base, pl_record)
record.set_pointer(pointer)
else: