server/sources/ldapuser.py
branchstable
changeset 5153 3684ccae5cdc
parent 5138 18388a897d2a
child 5174 78438ad513ca
child 5326 0d9054eb3bd1
equal deleted inserted replaced
5150:7a9e71ee5671 5153:3684ccae5cdc
   198         try:
   198         try:
   199             ldap_emailattr = self.user_rev_attrs['email']
   199             ldap_emailattr = self.user_rev_attrs['email']
   200         except KeyError:
   200         except KeyError:
   201             return # no email in ldap, we're done
   201             return # no email in ldap, we're done
   202         session = self.repo.internal_session()
   202         session = self.repo.internal_session()
       
   203         execute = session.execute
   203         try:
   204         try:
   204             cursor = session.system_sql("SELECT eid, extid FROM entities WHERE "
   205             cursor = session.system_sql("SELECT eid, extid FROM entities WHERE "
   205                                         "source='%s'" % self.uri)
   206                                         "source='%s'" % self.uri)
   206             for eid, b64extid in cursor.fetchall():
   207             for eid, b64extid in cursor.fetchall():
   207                 extid = b64decode(b64extid)
   208                 extid = b64decode(b64extid)
   208                 # if no result found, _search automatically delete entity information
   209                 # if no result found, _search automatically delete entity information
   209                 res = self._search(session, extid, BASE)
   210                 res = self._search(session, extid, BASE)
   210                 if res:
   211                 if res:
   211                     ldapemailaddr = res[0].get(ldap_emailattr)
   212                     ldapemailaddr = res[0].get(ldap_emailattr)
   212                     if ldapemailaddr:
   213                     if ldapemailaddr:
   213                         rset = session.execute('EmailAddress A WHERE '
   214                         rset = execute('Any X,A WHERE '
   214                                                'U use_email X, U eid %(u)s',
   215                                        'X address A, U use_email X, U eid %(u)s',
   215                                                {'u': eid})
   216                                        {'u': eid})
   216                         ldapemailaddr = unicode(ldapemailaddr)
   217                         ldapemailaddr = unicode(ldapemailaddr)
   217                         for emailaddr, in rset:
   218                         for emaileid, emailaddr, in rset:
   218                             if emailaddr == ldapemailaddr:
   219                             if emailaddr == ldapemailaddr:
   219                                 break
   220                                 break
   220                         else:
   221                         else:
   221                             self.info('updating email address of user %s to %s',
   222                             self.info('updating email address of user %s to %s',
   222                                       extid, ldapemailaddr)
   223                                       extid, ldapemailaddr)
   223                             if rset:
   224                             emailrset = execute('EmailAddress A WHERE A address %(addr)s',
   224                                 session.execute('SET X address %(addr)s WHERE '
   225                                                 {'addr': ldapemailaddr})
   225                                                 'U primary_email X, U eid %(u)s',
   226                             if emailrset:
   226                                                 {'addr': ldapemailaddr, 'u': eid})
   227                                 execute('SET U use_email X WHERE '
       
   228                                         'X eid %(x)s, U eid %(u)s',
       
   229                                         {'x': emailrset[0][0], 'u': eid})
       
   230                             elif rset:
       
   231                                 if not execute('SET X address %(addr)s WHERE '
       
   232                                                'U primary_email X, U eid %(u)s',
       
   233                                                {'addr': ldapemailaddr, 'u': eid}, 'u'):
       
   234                                     execute('SET X address %(addr)s WHERE '
       
   235                                             'X eid %(x)s',
       
   236                                             {'addr': ldapemailaddr, 'x': rset[0][0]}, 'x')
   227                             else:
   237                             else:
   228                                 # no email found, create it
   238                                 # no email found, create it
   229                                 _insert_email(session, ldapemailaddr, eid)
   239                                 _insert_email(session, ldapemailaddr, eid)
   230         finally:
   240         finally:
   231             session.commit()
   241             session.commit()