Example #1
0
        def run(userData):
            """
            Handle user data sent by the L{ServiceProvider} when credentials
            are successfully verified.
            """
            uid = userData['id']
            user = TwitterUserAPI().get(uid)
            if user is None:
                newUser = True
                username = userData['screen_name'].lower()
                fullname = userData['name']
                UserAPI().create([(username, None, fullname, None)])
                TwitterUserAPI().create(username, uid)
                user = TwitterUserAPI().get(uid)
            else:
                newUser = False

            # FIXME The calls to encrypt the tokens below aren't tested very
            # well.
            consumer = getUser(consumerUsername)
            accessToken = OAuthConsumerAPI().getAccessToken(consumer, user)
            renewalToken = OAuthConsumerAPI().getRenewalToken(consumer, user)
            return {'username': user.username,
                    'new-user': newUser,
                    'missing-password': (user.passwordHash == '!'),
                    'access-token': accessToken.encrypt(),
                    'renewal-token': renewalToken.encrypt(),
                    'uid': uid,
                    'data': userData}
Example #2
0
    def renewToken(self, consumerUsername, encryptedToken):
        """Use an L{OAuthRenewalToken} to generate a new L{OAuthAccessToken}.

        @param encryptedToken: The encrypted L{OAuthRenewalToken} to use to
            generate a new L{OAuthAccessToken}.
        @raise InvalidOAuthTokenError: Raised if the encrypted
            L{OAuthRenewalToken} can't be decrypted.
        @raise UnknownConsumerError: Raised if C{consumerUser} doesn't have a
            matching L{OAuthConsumer} in the system.
        @raise UnknownUserError: Raised if the L{User} the token provides
            access on behalf of doesn't exist.
        @return: A C{(OAuthRenewalToken, OAuthAccessToken)} 2-tuple.
        """
        consumer = cachingGetUser(consumerUsername)
        if consumer is None:
            raise UnknownConsumerError('Unknown consumer: %s' %
                                       consumerUsername)
        try:
            token = OAuthRenewalToken.decrypt(consumer, encryptedToken)
        except ValueError:
            raise InvalidOAuthTokenError("Couldn't decrypt renewal token.")
        renewalToken, accessToken = OAuthConsumerAPI().renewToken(token)
        return renewalToken.encrypt(), accessToken.encrypt()