server/repository.py
branchstable
changeset 2267 e1d2df3f1091
parent 2245 7463e1a748dd
child 2268 2f336fd5e040
--- a/server/repository.py	Mon Jul 06 09:33:36 2009 +0200
+++ b/server/repository.py	Mon Jul 06 09:34:40 2009 +0200
@@ -392,10 +392,23 @@
         except ZeroDivisionError:
             pass
 
+    def _login_from_email(self, login):
+        session = self.internal_session()
+        try:
+            rset = session.execute('Any L WHERE U login L, U primary_email M, '
+                                   'M address %(login)s', {'login': login})
+            if rset.rowcount == 1:
+                login = rset[0][0]
+        finally:
+            session.close()
+        return login
+
     def authenticate_user(self, session, login, password):
         """validate login / password, raise AuthenticationError on failure
         return associated CWUser instance on success
         """
+        if self.vreg.config['allow-email-login'] and '@' in login:
+            login = self._login_from_email(login)
         for source in self.sources:
             if source.support_entity('CWUser'):
                 try: