def get(self): session = get_current_session() if session.is_active(): logger.info("Found a session") session.terminate() # the request_token from twitter request_token = self.request.get("oauth_token") request_token = urlunquote(request_token) # the OAuth verifier from twitter oauth_verifier = self.request.get("oauth_verifier") oauth_verifier = urlunquote(oauth_verifier) ss = SecretSquirrel() client = twitterauth.OAuthClient(ss.conKey, ss.conSec, ss.cbURL) auth_secret = memcache.get(client._get_memcache_auth_key(request_token)) if not auth_secret: result = twitterauth.AuthToken.gql(""" WHERE token = :1 LIMIT 1 """, request_token).get() if not result: logger.error("The auth token %s was not found in our db" % request_token) raise Exception, "Could not find Auth Token in database suck to be you" else: auth_secret = result.secret # now go back to twitter and exchange the request_token and oauth_verifier for an access_token and a token_secret response = client.make_request(client.access_url, token=request_token, secret=auth_secret, additional_params={"oauth_verifier": oauth_verifier}) result = client._extract_credentials(response) # Try to collect some information about this user from the service. user_info = client._lookup_user_info(result["token"], result["secret"]) if not user_info: return self.response.out.write("failed to get user_info") user_info.update(result) session = get_current_session() session['username'] = user_info['username'] username = user_info['username'] hacker = Hacker.gql(""" WHERE username = :1 LIMIT 1 """, username).get() if not hacker: logger.info("Making new hacker") hacker = Hacker() hacker.name = user_info["name"] hacker.token = user_info["token"] hacker.picture = user_info["picture"] hacker.secret = user_info["secret"] hacker.username = user_info["username"] hacker.points = 0 hacker.pool = 100 hacker.internets = 0 hacker.easterEggs = 0 hacker.hacks = 0 hacker.put() else: logger.info("Found me a hacker") #return self.response.out.write(user_info) return self.redirect("/")