Fix bug 7. Also, clean up the app engine template to make the happy path happier.
This commit is contained in:
@@ -124,18 +124,25 @@ class OAuthCredentials(Credentials):
|
|||||||
connection_type=None):
|
connection_type=None):
|
||||||
"""Modify the request headers to add the appropriate
|
"""Modify the request headers to add the appropriate
|
||||||
Authorization header."""
|
Authorization header."""
|
||||||
req = oauth.Request.from_consumer_and_token(
|
response_code = 302
|
||||||
self.consumer, self.token, http_method=method, http_url=uri)
|
http.follow_redirects = False
|
||||||
req.sign_request(signer, self.consumer, self.token)
|
while response_code in [301, 302]:
|
||||||
if headers == None:
|
req = oauth.Request.from_consumer_and_token(
|
||||||
headers = {}
|
self.consumer, self.token, http_method=method, http_url=uri)
|
||||||
headers.update(req.to_header())
|
req.sign_request(signer, self.consumer, self.token)
|
||||||
if 'user-agent' in headers:
|
if headers == None:
|
||||||
headers['user-agent'] = self.user_agent + ' ' + headers['user-agent']
|
headers = {}
|
||||||
else:
|
headers.update(req.to_header())
|
||||||
headers['user-agent'] = self.user_agent
|
if 'user-agent' in headers:
|
||||||
return request_orig(uri, method, body, headers,
|
headers['user-agent'] = self.user_agent + ' ' + headers['user-agent']
|
||||||
redirections, connection_type)
|
else:
|
||||||
|
headers['user-agent'] = self.user_agent
|
||||||
|
resp, content = request_orig(uri, method, body, headers,
|
||||||
|
redirections, connection_type)
|
||||||
|
response_code = resp.status
|
||||||
|
if response_code in [301, 302]:
|
||||||
|
uri = resp['location']
|
||||||
|
return resp, content
|
||||||
|
|
||||||
http.request = new_request
|
http.request = new_request
|
||||||
return http
|
return http
|
||||||
|
|||||||
@@ -36,7 +36,11 @@ from google.appengine.ext.webapp import util
|
|||||||
from google.appengine.ext.webapp.util import login_required
|
from google.appengine.ext.webapp.util import login_required
|
||||||
|
|
||||||
APP_ID = os.environ['APPLICATION_ID']
|
APP_ID = os.environ['APPLICATION_ID']
|
||||||
STEP2_URI = 'http://%s.appspot.com/auth_return' % APP_ID
|
|
||||||
|
if 'Development' in os.environ['SERVER_SOFTWARE']:
|
||||||
|
STEP2_URI = 'http://localhost:8080/auth_return'
|
||||||
|
else:
|
||||||
|
STEP2_URI = 'http://%s.appspot.com/auth_return' % APP_ID
|
||||||
|
|
||||||
|
|
||||||
class Credentials(db.Model):
|
class Credentials(db.Model):
|
||||||
@@ -49,29 +53,33 @@ class MainHandler(webapp.RequestHandler):
|
|||||||
def get(self):
|
def get(self):
|
||||||
user = users.get_current_user()
|
user = users.get_current_user()
|
||||||
storage = StorageByKeyName(Credentials, user.user_id(), 'credentials')
|
storage = StorageByKeyName(Credentials, user.user_id(), 'credentials')
|
||||||
credentials = storage.get()
|
|
||||||
http = httplib2.Http()
|
http = httplib2.Http()
|
||||||
|
credentials = storage.get()
|
||||||
|
|
||||||
if credentials:
|
if credentials:
|
||||||
http = credentials.authorize(http)
|
http = credentials.authorize(http)
|
||||||
|
|
||||||
service = build("buzz", "v1", http=http)
|
service = build("buzz", "v1", http=http)
|
||||||
|
|
||||||
if credentials:
|
if not credentials:
|
||||||
followers = service.people().list(userId='@me', groupId='@followers').execute()
|
return begin_oauth_flow(self, user, service)
|
||||||
self.response.out.write('Hello, you have %s followers!' %
|
|
||||||
followers['totalResults'])
|
|
||||||
else:
|
|
||||||
flow = FlowThreeLegged(service.auth_discovery(),
|
|
||||||
consumer_key='anonymous',
|
|
||||||
consumer_secret='anonymous',
|
|
||||||
user_agent='%s/1.0' % APP_ID,
|
|
||||||
domain='anonymous',
|
|
||||||
scope='https://www.googleapis.com/auth/buzz',
|
|
||||||
xoauth_displayname='App Name')
|
|
||||||
|
|
||||||
authorize_url = flow.step1_get_authorize_url(STEP2_URI)
|
followers = service.people().list(userId='@me', groupId='@followers').execute()
|
||||||
memcache.set(user.user_id(), pickle.dumps(flow))
|
self.response.out.write('Hello, you have %s followers!' %
|
||||||
self.redirect(authorize_url)
|
followers['totalResults'])
|
||||||
|
|
||||||
|
def begin_oauth_flow(request_handler, user, service):
|
||||||
|
flow = FlowThreeLegged(service.auth_discovery(),
|
||||||
|
consumer_key='anonymous',
|
||||||
|
consumer_secret='anonymous',
|
||||||
|
user_agent='%s/1.0' % APP_ID,
|
||||||
|
domain='anonymous',
|
||||||
|
scope='https://www.googleapis.com/auth/buzz',
|
||||||
|
xoauth_displayname='App Name')
|
||||||
|
|
||||||
|
authorize_url = flow.step1_get_authorize_url(STEP2_URI)
|
||||||
|
memcache.set(user.user_id(), pickle.dumps(flow))
|
||||||
|
request_handler.redirect(authorize_url)
|
||||||
|
|
||||||
class OAuthHandler(webapp.RequestHandler):
|
class OAuthHandler(webapp.RequestHandler):
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user