server/repository.py
branchstable
changeset 2267 e1d2df3f1091
parent 2245 7463e1a748dd
child 2268 2f336fd5e040
equal deleted inserted replaced
2266:efc6de279644 2267:e1d2df3f1091
   390             self.info('sql cache usage: %s/%s (%s%%)', hits+ misses, nocache,
   390             self.info('sql cache usage: %s/%s (%s%%)', hits+ misses, nocache,
   391                       ((hits + misses) * 100) / (hits + misses + nocache))
   391                       ((hits + misses) * 100) / (hits + misses + nocache))
   392         except ZeroDivisionError:
   392         except ZeroDivisionError:
   393             pass
   393             pass
   394 
   394 
       
   395     def _login_from_email(self, login):
       
   396         session = self.internal_session()
       
   397         try:
       
   398             rset = session.execute('Any L WHERE U login L, U primary_email M, '
       
   399                                    'M address %(login)s', {'login': login})
       
   400             if rset.rowcount == 1:
       
   401                 login = rset[0][0]
       
   402         finally:
       
   403             session.close()
       
   404         return login
       
   405 
   395     def authenticate_user(self, session, login, password):
   406     def authenticate_user(self, session, login, password):
   396         """validate login / password, raise AuthenticationError on failure
   407         """validate login / password, raise AuthenticationError on failure
   397         return associated CWUser instance on success
   408         return associated CWUser instance on success
   398         """
   409         """
       
   410         if self.vreg.config['allow-email-login'] and '@' in login:
       
   411             login = self._login_from_email(login)
   399         for source in self.sources:
   412         for source in self.sources:
   400             if source.support_entity('CWUser'):
   413             if source.support_entity('CWUser'):
   401                 try:
   414                 try:
   402                     eid = source.authenticate(session, login, password)
   415                     eid = source.authenticate(session, login, password)
   403                     break
   416                     break