Now adding federated user who doesn't have senslab account directly in SFA db
authorSandrine Avakian <sandrine.avakian@inria.fr>
Thu, 10 Jan 2013 13:52:50 +0000 (14:52 +0100)
committerSandrine Avakian <sandrine.avakian@inria.fr>
Thu, 10 Jan 2013 13:52:50 +0000 (14:52 +0100)
(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
sfa/senslab/slabdriver.py
sfa/senslab/slabslices.py
sfa/util/sfalogging.py

index 55e3c0f..7f9dd89 100644 (file)
@@ -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 = []
index 7cc29bf..bb36c67 100644 (file)
@@ -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
index 5eedc1e..316eed7 100644 (file)
@@ -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)
index 495a274..ac84037 100644 (file)
@@ -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)
 ########################################