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}
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()