Exemple #1
0
	def access_token_for_id(cls, id, callback):
		"""Returns the access token for an id, acquiring a new one if necessary."""
		token = Cache.get(cls.auth_cache_key_template % id)
		if token:
			return IOLoop.instance().add_callback(lambda: callback(token))

		# If we don't have an access token cached, see if we have a refresh token
		token = TokenIdMapping.lookup_refresh_token(id)
		if token:
			post_body = urllib.urlencode({
				'client_id': Config.get('oauth', 'client-id'),
				'client_secret': Config.get('oauth', 'client-secret'),
				'refresh_token': token,
				'grant_type': 'refresh_token',
			})
			http_client = AsyncHTTPClient()
			return http_client.fetch(
				'https://accounts.google.com/o/oauth2/token',
				lambda response: cls.on_refresh_complete(response, id, callback),
				method='POST',
				body=post_body,
				request_timeout=20.0,
				connect_timeout=15.0,
			)
		else:
			logging.error("Unable to update access token for %s, no refresh token stored.", id)
			return IOLoop.instance().add_callback(lambda: callback(None))
Exemple #2
0
	def get(self):
		gplus_id = self.get_cookie('gplus_id')
		if gplus_id:

			# If we lost rights, but someone still has the cookie, get rid of it.
			if not TokenIdMapping.lookup_refresh_token(gplus_id):
				return self.redirect('/clear')

			self.render('authed_main.html',
				gplus_id=gplus_id,
				feed_url="http://%s/atom/%s" % (self.request.host, gplus_id),
			)
		else:
			self.render('main.html')