def updateCredentials(self, request, creds, temp=False):
     if ISimpleCredentials.providedBy(creds):
         global cache
         cache.defaultcreds = (creds, temp)
Example #2
0
    def authenticateCredentials(self, credentials):
        # simple login
        if ISimpleCredentials.providedBy(credentials):
            if credentials.principalinfo is not None and \
                    IPrincipalInfo.providedBy(credentials.principalinfo) and \
                    credentials.principalinfo.internalId in self:
                return credentials.principalinfo

            if not credentials.login:
                return None

            id = self.__id_by_login.get(credentials.login)
            if id is None:
                id = self.__id_by_login.get(credentials.login.lower())

            if id is None:
                return None
            internal = self[id]
            password = getattr(
                internal, 'password', getattr(internal, '_password', ''))
            ptool = getUtility(IPasswordTool)
            if not ptool.checkPassword(password, credentials.password):
                return None

            pinfo = PrincipalInfo(self.prefix + id, internal)
            credentials.principalinfo = pinfo

            return pinfo

        # openid login
        if IOpenIdCredentials.providedBy(credentials):
            if credentials.failed:
                return None

            if credentials.principalInfo is not None \
                    and credentials.principalInfo.internalId in self:
                return credentials.principalInfo

            request = credentials.request
            consumer = Consumer(ISession(request)[SESSION_KEY], self.store)

            returnto = credentials.parameters.get(
                'openid.return_to', getReturnToURL(request))

            response = consumer.complete(
                credentials.parameters, returnto.split('?')[0])

            if isinstance(response, SuccessResponse):
                identifier = normalizeIdentifier(response.identity_url)
                principalId = self.getPrincipalByOpenIdIdentifier(identifier)

                if principalId is None:
                    # Principal does not exist
                    data = ISession(request)[SESSION_KEY]
                    data['reqregister'] = True
                    data['identifier'] = identifier
                    credentials.failed = True
                    return None

                principalInfo = self.principalInfo(self.prefix + principalId)
                credentials.principalInfo = principalInfo
                return principalInfo

            else:
                raise PrincipalInitializationFailed(response.message)