From 2fd443b3702d69ab16aef51f96d9675223e3d1d9 Mon Sep 17 00:00:00 2001 From: Sandrine Avakian Date: Thu, 10 Jan 2013 14:52:50 +0100 Subject: [PATCH] Now adding federated user who doesn't have senslab account directly in SFA db (on top of creating an account for him). Prevents duplicates created upon importing the user from LDAP to SFA (same email). --- sfa/senslab/LDAPapi.py | 58 +++++++++++++++++++-------------------- sfa/senslab/slabdriver.py | 20 ++++++++++++-- sfa/senslab/slabslices.py | 14 ++++++---- sfa/util/sfalogging.py | 3 ++ 4 files changed, 59 insertions(+), 36 deletions(-) diff --git a/sfa/senslab/LDAPapi.py b/sfa/senslab/LDAPapi.py index 55e3c0f5..7f9dd896 100644 --- a/sfa/senslab/LDAPapi.py +++ b/sfa/senslab/LDAPapi.py @@ -649,44 +649,44 @@ class LDAPapi : if ldapentry['mail'][0] == "unknown": tmpemail = None - #except IndexError: - #logger.error("LDAP ldapFindHRn : no entry for record %s found"\ - #%(record)) - #return None - - try: + parent_hrn = None + peer_authority = None + if 'hrn' in record: hrn = record['hrn'] parent_hrn = get_authority(hrn) - peer_authority = None if parent_hrn != self.authname: peer_authority = parent_hrn - #In case the user was not imported from Senslab LDAP #but from another federated site, has an account in #senslab but currently using his hrn from federated site - #then the login is different from the one found in its hrn + #then the login is different from the one found in its hrn if tmpname != hrn.split('.')[1]: hrn = None - results = { - 'type': 'user', - 'pkey': ldapentry['sshPublicKey'][0], - #'uid': ldapentry[1]['uid'][0], - 'uid': tmpname , - 'email':tmpemail, - #'email': ldapentry[1]['mail'][0], - 'first_name': ldapentry['givenName'][0], - 'last_name': ldapentry['sn'][0], - #'phone': 'none', - 'serial': 'none', - 'authority': parent_hrn, - 'peer_authority': peer_authority, - 'pointer' : -1, - 'hrn': hrn, - } - except KeyError,error: - logger.log_exc("LDAPapi \t LdaFindUser KEyError %s" \ - %error ) - return + else: + hrn = None + + + + results = { + 'type': 'user', + 'pkey': ldapentry['sshPublicKey'][0], + #'uid': ldapentry[1]['uid'][0], + 'uid': tmpname , + 'email':tmpemail, + #'email': ldapentry[1]['mail'][0], + 'first_name': ldapentry['givenName'][0], + 'last_name': ldapentry['sn'][0], + #'phone': 'none', + 'serial': 'none', + 'authority': parent_hrn, + 'peer_authority': peer_authority, + 'pointer' : -1, + 'hrn': hrn, + } + #except KeyError,error: + #logger.log_exc("LDAPapi \t LdaFindUser KEyError %s" \ + #%error ) + #return else: #Asked for all users in ldap results = [] diff --git a/sfa/senslab/slabdriver.py b/sfa/senslab/slabdriver.py index 7cc29bf4..bb36c67d 100644 --- a/sfa/senslab/slabdriver.py +++ b/sfa/senslab/slabdriver.py @@ -5,7 +5,6 @@ from datetime import datetime from sfa.util.faults import SliverDoesNotExist, UnknownSfaType from sfa.util.sfalogging import logger - from sfa.storage.alchemy import dbsession from sfa.storage.model import RegRecord, RegUser, RegSlice from sqlalchemy.orm import joinedload @@ -57,7 +56,7 @@ class SlabDriver(Driver): self.oar = OARrestapi() self.ldap = LDAPapi() self.time_format = "%Y-%m-%d %H:%M:%S" - self.db = SlabDB(config, debug = True) + self.db = SlabDB(config, debug = False) self.cache = None @@ -1773,6 +1772,22 @@ class SlabDriver(Driver): logger.warning("SLABDRIVER DeleteSlice %s "%(slice_record)) return + def __add_person_to_db(self, user_dict): + hrn = Xrn(user_dict['urn']).get_hrn() + check_if_exists = dbsession.query(RegUser).filter_by(email = user_dict['email']).first() + #user doesn't exists + if not check_if_exists: + logger.debug("__add_person_to_db \t Adding %s \r\n \r\n \ + _________________________________________________________________________\ + " %(hrn)) + user_record = RegUser(hrn = hrn, pointer= '-1', authority=get_authority(hrn), \ + email= user_dict['email'], gid = None) + user_record.reg_keys = [RegKey(user_dict['pkey'])] + user_record.just_created() + dbsession.add (user_record) + dbsession.commit() + return + #TODO AddPerson 04/07/2012 SA #def AddPerson(self, auth, person_fields=None): def AddPerson(self, record):#TODO fixing 28/08//2012 SA @@ -1786,6 +1801,7 @@ class SlabDriver(Driver): """ ret = self.ldap.LdapAddUser(record) logger.debug("SLABDRIVER AddPerson return code %s \r\n "%(ret)) + self.__add_person_to_db(record) return ret['uid'] #TODO AddPersonToSite 04/07/2012 SA diff --git a/sfa/senslab/slabslices.py b/sfa/senslab/slabslices.py index 5eedc1e6..316eed7e 100644 --- a/sfa/senslab/slabslices.py +++ b/sfa/senslab/slabslices.py @@ -542,7 +542,8 @@ class SlabSlices: for added_user_email in added_user_emails: #hrn, type = urn_to_hrn(added_user['urn']) - + added_user = users_dict[added_user_email] + logger.debug(" SLABSLICE \r\n \r\n \t THE SECOND verify_person added_user %s" %(added_user)) person = {} person['peer_person_id'] = None k_list = ['first_name','last_name','person_id'] @@ -554,14 +555,17 @@ class SlabSlices: person['mail'] = added_user['email'] person['email'] = added_user['email'] person['key_ids'] = added_user.get('key_ids', []) - + person['urn'] = added_user['urn'] + #person['person_id'] = self.driver.AddPerson(person) person['uid'] = self.driver.AddPerson(person) + + logger.debug(" SLABSLICE \r\n \r\n \t THE SECOND verify_person ppeersonne %s" %(person)) #Update slice_Record with the id now known to LDAP slice_record['login'] = person['uid'] - slice_record['reg_researchers'] = [self.driver.root_auth + '.' + person['uid']] - slice_record['reg-researchers'] = slice_record['reg_researchers'] - logger.debug(" SLABSLICE \r\n \r\n \t THE SECONDverify_person slice_record['record_id_user'] %s" %(slice_record)) + #slice_record['reg_researchers'] = [self.driver.root_auth + '.' + person['uid']] + #slice_record['reg-researchers'] = slice_record['reg_researchers'] + #if peer: #person['peer_person_id'] = added_user['person_id'] added_persons.append(person) diff --git a/sfa/util/sfalogging.py b/sfa/util/sfalogging.py index 495a2747..ac84037d 100644 --- a/sfa/util/sfalogging.py +++ b/sfa/util/sfalogging.py @@ -144,6 +144,9 @@ debug_logger = _SfaLogger(loggername='debug', level=logging.DEBUG) warn_logger = _SfaLogger(loggername='warning', level=logging.WARNING) error_logger = _SfaLogger(loggername='error', level=logging.ERROR) critical_logger = _SfaLogger(loggername='critical', level=logging.CRITICAL) + +#sql_logger = _SfaLogger(loggername = 'sqlalchemy.engine', level=logging.DEBUG) + logger = info_logger sfi_logger = _SfaLogger(logfile=os.path.expanduser("~/.sfi/")+'sfi.log',loggername='sfilog', level=logging.DEBUG) ######################################## -- 2.47.0