Exemplo n.º 1
0
	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("/")