diff -r f87cd875c6db -r 5a0c2cfc19bf server/repository.py --- a/server/repository.py Wed Jan 19 12:47:06 2011 +0100 +++ b/server/repository.py Wed Jan 19 12:47:08 2011 +0100 @@ -430,33 +430,24 @@ 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}, - build_descr=False) - if rset.rowcount == 1: - login = rset[0][0] - finally: - session.close() - return login - - def authenticate_user(self, session, login, **kwargs): - """validate login / password, raise AuthenticationError on failure - return associated CWUser instance on success + def check_auth_info(self, session, login, authinfo): + """validate authentication, raise AuthenticationError on failure, return + associated CWUser's eid 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: - eid = source.authenticate(session, login, **kwargs) - break + return source.authenticate(session, login, **authinfo) except AuthenticationError: continue else: raise AuthenticationError('authentication failed with all sources') + + def authenticate_user(self, session, login, **authinfo): + """validate login / password, raise AuthenticationError on failure + return associated CWUser instance on success + """ + eid = self.check_auth_info(session, login, authinfo) cwuser = self._build_user(session, eid) if self.config.consider_user_state and \ not cwuser.cw_adapt_to('IWorkflowable').state in cwuser.AUTHENTICABLE_STATES: