Modified LdapAPI.py and client_helper to match the master one.
authorSandrine Avakian <sandrine.avakian@inria.fr>
Tue, 15 May 2012 09:43:38 +0000 (11:43 +0200)
committerSandrine Avakian <sandrine.avakian@inria.fr>
Tue, 15 May 2012 09:43:38 +0000 (11:43 +0200)
sfa/client/client_helper.py
sfa/senslab/LDAPapi.py
sfa/senslab/slabdriver.py
sfa/senslab/slabslices.py

index 549b067..e1edfb8 100644 (file)
@@ -15,8 +15,8 @@ def sfa_users_arg(records, slice_record):
     for record in records:
         if record['type'] != 'user': 
             continue
-        user = {#'urn': record['geni_urn'], 
-                #'keys': record['keys'],
+        user = {'urn': record['geni_urn'], 
+                'keys': record['keys'],
                 'email': record['email'], # needed for MyPLC
                 'person_id': record['record_id'], 
                 'hrn': record['hrn'],
@@ -26,7 +26,7 @@ def sfa_users_arg(records, slice_record):
                 'first_name': record['first_name'], # needed for MyPLC
                 'last_name': record['last_name'], # needed for MyPLC
                 'slice_record': slice_record, # needed for legacy refresh peer
-                #'key_ids': record['key_ids'] # needed for legacy refresh peer
+                'key_ids': record['key_ids'] # needed for legacy refresh peer
                 }         
         users.append(user)   
         print>>sys.stderr, " \r\n \r\n \t CLIENT_HELPER.PY sfa_users_arg user %s",user
index caad804..430d6b9 100644 (file)
@@ -1,6 +1,6 @@
 
 
-from sfa.util.xrn import Xrn,get_authority, 
+from sfa.util.xrn import Xrn,get_authority 
 import ldap
 from sfa.util.config import *
 from sfa.trust.gid import *
@@ -10,7 +10,6 @@ from sfa.trust.certificate import *
 
 class LDAPapi :
        def __init__(self, record_filter = None):
-               self.ldapserv=ldap.open("192.168.0.251")
                self.senslabauth=Hierarchy()
                config=Config()
                self.authname=config.SFA_REGISTRY_ROOT_AUTH
@@ -29,61 +28,90 @@ class LDAPapi :
                                'hrn']
                 self.baseDN = "ou=people,dc=senslab,dc=info"
                                 
-       def ldapSearch (self, record ):
+        def connect (self):
+           self.ldapserv=ldap.open("192.168.0.251")
+           
+        def authenticate(self):
+            self.l = ldap.initialize("ldaps://192.168.0.251:636/")
+               
+            # Bind/authenticate with a user with apropriate rights to add objects
+            self.l = simple_bind_s(" ","")
+                              
+        def ldapAdd(self, record) :
+            self.authenticate()
             
+            return   
+                               
+        def parse_record(self, record):
             req_ldapdict = {}
-
             if 'first_name' in record  and 'last_name' in record:
                 req_ldapdict['cn'] = str(record['first_name'])+" "+str(record['last_name'])
             if 'email' in record :
                 req_ldapdict['mail'] = record['email']
-
+                
+            req_ldap=''
+            print >>sys.stderr, "\r\n \r\n \t LDAP.PY \t\t   parse_record record %s req_ldapdict %s" %(record,req_ldapdict)
             for k in req_ldapdict:
-                req_ldap += '('+str(k)+'='+str(req_ldapdict['k'])+')'
+                req_ldap += '('+str(k)+'='+str(req_ldapdict[k])+')'
             if  len(req_ldapdict.keys()) >1 :
                 req_ldap = req_ldap[:0]+"(&"+req_ldap[0:]
                 size = len(req_ldap)
                 req_ldap= req_ldap[:(size-1)] +')'+ req_ldap[(size-1):]
+            
+            return req_ldap
+            
+        def parse_ldapresults(self, ldapentry):
+            return
+            
+            
+                                       
+       def ldapSearch (self, record ):
+            
+            
+            self.connect()
+            req_ldap = self.parse_record(record)
             print >>sys.stderr, "\r\n \r\n \t LDAP.PY \t\t ldapSearch  req_ldap %s" %(req_ldap)
             try:
                 msg_id=self.ldapserv.search(self.baseDN,ldap.SCOPE_SUBTREE,req_ldap, ['mail','givenName', 'sn', 'uid','sshPublicKey'])     
                 #Get all the results matching the search from ldap in one shot (1 value)
                 result_type, result_data=self.ldapserv.result(msg_id,1)
                 results = []
-                for ldapentry in result_data[1]:
-                        #print>>sys.stderr, " \r\n \t LDAP : ! mail ldapentry[1]['mail'][0] %s " %(ldapentry[1]['mail'][0])
-                         
-                        tmpname = ldapentry[1]['uid'][0]
-                        
-                        if ldapentry[1]['uid'][0] == "savakian":
-                            tmpname = 'avakian'
+                print >>sys.stderr, "\r\n \r\n \t LDAP.PY \t\t ldapSearch  result_data %s" %(result_data) 
+                #Dafuq is this result_data shit ??
+                ldapentry = result_data[0][1]
+                #print>>sys.stderr, " \r\n \t LDAP : ! mail ldapentry[1]['mail'][0] %s " %(ldapentry[1]['mail'][0])
+                print >>sys.stderr, "\r\n \r\n \t LDAP.PY \t\t ldapSearch  ldapentry %s" %(ldapentry) 
+                tmpname = ldapentry['uid'][0]
+                
+                if ldapentry['uid'][0] == "savakian":
+                    tmpname = 'avakian'
 
-                        tmpemail = ldapentry[1]['mail'][0]
-                        if ldapentry[1]['mail'][0] == "unknown":
-                            tmpemail = None
-                            
-                        hrn = record['hrn']
-                        parent_hrn = get_authority(hrn)
-                        peer_authority = None
-                        if parent_hrn is not self.authname:
-                            peer_authority = parent_hrn
+                tmpemail = ldapentry['mail'][0]
+                if ldapentry['mail'][0] == "unknown":
+                    tmpemail = None
+                    
+                hrn = record['hrn']
+                parent_hrn = get_authority(hrn)
+                peer_authority = None
+                if parent_hrn is not self.authname:
+                    peer_authority = parent_hrn
                         
-                       results.append(  {      
-                               'type': 'user',
-                                'pkey': ldapentry[1]['sshPublicKey'][0],
+                results.append(  {     
+                                'type': 'user',
+                                'pkey': ldapentry['sshPublicKey'][0],
                                 #'uid': ldapentry[1]['uid'][0],
                                 'uid': tmpname ,
                                 'email':tmpemail,
-                               #'email': ldapentry[1]['mail'][0],
-                               'first_name': ldapentry[1]['givenName'][0],
-                               'last_name': ldapentry[1]['sn'][0],
+                                #'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,
-                               } )
+                                'serial': 'none',
+                                'authority': parent_hrn,
+                                'peer_authority': peer_authority,
+                                'pointer' : -1,
+                                'hrn': hrn,
+                                } )
                return results
 
             
@@ -91,12 +119,13 @@ class LDAPapi :
                 print >>sys.stderr, "ERROR LDAP %s" %(e)
                
         
-            
+
+        
        def ldapFindHrn(self, record_filter = None):        
        #def ldapFindHrn(self, record_filter = None, columns=None):
 
                results = []
-       
+               self.connect()
                if 'authority' in record_filter:
                # ask for authority
                        if record_filter['authority']==self.authname:
@@ -133,6 +162,7 @@ class LDAPapi :
        
                rindex=self.ldapserv.search(self.baseDN,ldap.SCOPE_SUBTREE,ldapfilter, ['mail','givenName', 'sn', 'uid','sshPublicKey'])
                ldapresponse=self.ldapserv.result(rindex,1)
+                #print>>sys.stderr, " \r\n \t LDAP : ldapresponse %s " %(ldapresponse)
                for ldapentry in ldapresponse[1]:
                         #print>>sys.stderr, " \r\n \t LDAP : ! mail ldapentry[1]['mail'][0] %s " %(ldapentry[1]['mail'][0])
                          
index 643134d..a909f7f 100644 (file)
@@ -999,46 +999,54 @@ class SlabDriver(Driver):
                     #print >>sys.stderr, "\r\n \t\t  SLABDRIVER.PY fill_record_info \t\t HOY HOY reclise %s" %(recslice)
                     #if isinstance(recslice,list) and len(recslice) == 1:
                         #recslice = recslice[0]
-                   
+                    
                     recuser = dbsession.query(RegRecord).filter_by(record_id = recslice['record_id_user']).first()
                     #existing_records_by_id[recslice['record_id_user']]
                     #print >>sys.stderr, "\r\n \t\t  SLABDRIVER.PY fill_record_info \t\t recuser %s" %(recuser)
                     
-          
+            
                     record.update({'PI':[recuser.hrn],
                     'researcher': [recuser.hrn],
                     'name':record['hrn'], 
                     'oar_job_id':recslice['oar_job_id'],
                     'node_ids': [],
-                    'person_ids':[recslice['record_id_user']]})
+                    'person_ids':[recslice['record_id_user']],
+                    'geni_urn':'',  #For client_helper.py compatibility
+                    'keys':'',  #For client_helper.py compatibility
+                    'key_ids':''})  #For client_helper.py compatibility
                     
                 elif str(record['type']) == 'user':
                     #Add the data about slice
                     rec = self.GetSlices(slice_filter = record['record_id'], filter_type = 'record_id_user')
-                   print >>sys.stderr, "\r\n \t\t  SLABDRIVER.PY fill_record_info USEEEEEEEEEERDESU!  rec %s" %(rec
+                    print >>sys.stderr, "\r\n \t\t  SLABDRIVER.PY fill_record_info USEEEEEEEEEERDESU!  rec %s \r\n \t rec['record_id_user'] %s " %(rec,rec['record_id_user']
                     #Append record in records list, therfore fetches user and slice info again(one more loop)
                     #Will update PIs and researcher for the slice
-                   recuser = dbsession.query(RegRecord).filter_by(record_id = rec['record_id_user']).first()
-                   rec.update({'PI':[recuser.hrn],
+                    recuser = dbsession.query(RegRecord).filter_by(record_id = rec['record_id_user']).first()
+                    rec.update({'PI':[recuser.hrn],
                     'researcher': [recuser.hrn],
                     'name':record['hrn'], 
                     'oar_job_id':rec['oar_job_id'],
                     'node_ids': [],
                     'person_ids':[rec['record_id_user']]})
-                   #retourne une liste 100512
+                    #retourne une liste 100512
+                    
                     user_slab = self.GetPersons({'hrn':recuser.hrn})
-                   
-                    print >>sys.stderr, "\r\n \t\t  SLABDRIVER.PY fill_record_info user_slab %s !  r ecuser %s " %(user_slab, recuser.hrn)
+                    
+
                     rec.update({'type':'slice','hrn':rec['slice_hrn']})
-                   record.update(user_slab[0])
+                    record.update(user_slab[0])
+                    #For client_helper.py compatibility
+                    record.update( { 'geni_urn':'',
+                    'keys':'',
+                    'key_ids':'' })                
                     records.append(rec)
-                   
+                    
                     print >>sys.stderr, "\r\n \t\t  SLABDRIVER.PY fill_record_info ADDING SLICEINFO TO USER records %s" %(records) 
                     
             print >>sys.stderr, "\r\n \t\t  SLABDRIVER.PY fill_record_info OKrecords %s" %(records) 
         except TypeError:
             print >>sys.stderr, "\r\n \t\t SLABDRIVER fill_record_info  EXCEPTION RECORDS : %s" %(records)     
-            return
+        return
         
         #self.fill_record_slab_info(records)
        ##print >>sys.stderr, "\r\n \t\t after fill_record_slab_info %s" %(records)     
index 85a5234..7ec7ba4 100644 (file)
@@ -464,9 +464,20 @@ class SlabSlices:
             #Check before adding  them to LDAP
             
             else: 
-                ldap_reslt = self.driver.ldap.ldapSearch(users)
-                print>>sys.stderr, " \r\n \r\n \t slabslices.py verify_person users HUMHUMHUMHUM ... %s \r\n \t ldap_reslt %s "  %(users, ldap_reslt)
-                pass
+               
+                if isinstance(users,list):
+                   ldap_reslt = self.driver.ldap.ldapSearch(users[0])
+                else:
+                    ldap_reslt = self.driver.ldap.ldapSearch(users)
+                if ldap_result:
+                    existing_users = ldap_reslt[0]
+                    existing_user_hrns.append (users_dict[user['hrn']]['hrn'])
+                    existing_user_ids.append (users_dict[user['hrn']]['person_id'])
+                else:
+                    #User not existing in LDAP
+            
+                    print>>sys.stderr, " \r\n \r\n \t slabslices.py verify_person users HUMHUMHUMHUM ... %s \r\n \t ldap_reslt %s "  %(users, ldap_reslt)
+
                 
         # requested slice users        
         requested_user_ids = users_by_id.keys()