- # import persons
- for person_id in site['person_ids']:
- if person_id not in persons_by_id:
- self.logger.warning ("PlImporter: skipping person %s"%person_id)
- continue
- person = persons_by_id[person_id]
- hrn = email_to_hrn(site_hrn, person['email'])
- if len(hrn) > 64:
- hrn = hrn[:64]
-
- previous_record = self.records_by_type_hrn.get( ( 'user', hrn, ) )
- if not previous_record:
- previous_record = self.records_by_type_pointer.get ( ('user', person_id,) )
- # if user's primary key has changed then we need to update the
- # users gid by forcing an update here
- plc_keys = []
- sfa_keys = []
- if previous_record:
- sfa_keys = previous_record.reg_keys
- if person_id in keys_by_person_id:
- plc_keys = keys_by_person_id[person_id]
- update_record = False
- def key_in_list (key,sfa_keys):
- for reg_key in sfa_keys:
- if reg_key.key==key['key']: return True
- return False
- for key in plc_keys:
- if not key_in_list (key,sfa_keys):
- update_record = True
-
- if not previous_record or update_record:
- try:
- pubkey=None
- if 'key_ids' in person and person['key_ids']:
- # randomly pick first key in set
- pubkey = plc_keys[0]
- try:
- pkey = convert_public_key(pubkey['key'])
- except:
- self.logger.warn('PlImporter: unable to convert public key for %s' % hrn)
- pkey = Keypair(create=True)
- else:
- # the user has no keys. Creating a random keypair for the user's gid
- self.logger.warn("PlImporter: person %s does not have a PL public key"%hrn)
- pkey = Keypair(create=True)
- urn = hrn_to_urn(hrn, 'user')
- person_gid = self.auth_hierarchy.create_gid(urn, create_uuid(), pkey)
- if previous_record:
- previous_record.gid=person_gid
- if pubkey: previous_record.reg_keys=[ RegKey (pubkey['key'], pubkey['key_id'])]
- self.logger.info("PlImporter: updated person: %s" % previous_record)
- else:
- new_record = RegUser (hrn=hrn, gid=person_gid,
- pointer=person['person_id'],
- authority=get_authority(hrn),
- email=person['email'])
- if pubkey:
- new_record.reg_keys=[RegKey (pubkey['key'], pubkey['key_id'])]
- else:
- logger.warning("No key found for user %s"%new_record)
- dbsession.add (new_record)
- dbsession.commit()
- self.logger.info("PlImporter: imported person: %s" % new_record)
- except:
- self.logger.log_exc("PlImporter: failed to import person.")
-
- # remove stale records
- system_records = [interface_hrn, root_auth, interface_hrn + '.slicemanager']
- for record in records:
- record_hrn=record.hrn
- if record_hrn in system_records:
- continue