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):
 | 
			
		||||
      """Modify the request headers to add the appropriate
 | 
			
		||||
      Authorization header."""
 | 
			
		||||
      req = oauth.Request.from_consumer_and_token(
 | 
			
		||||
          self.consumer, self.token, http_method=method, http_url=uri)
 | 
			
		||||
      req.sign_request(signer, self.consumer, self.token)
 | 
			
		||||
      if headers == None:
 | 
			
		||||
        headers = {}
 | 
			
		||||
      headers.update(req.to_header())
 | 
			
		||||
      if 'user-agent' in headers:
 | 
			
		||||
        headers['user-agent'] = self.user_agent + ' ' + headers['user-agent']
 | 
			
		||||
      else:
 | 
			
		||||
        headers['user-agent'] = self.user_agent
 | 
			
		||||
      return request_orig(uri, method, body, headers,
 | 
			
		||||
                          redirections, connection_type)
 | 
			
		||||
      response_code = 302
 | 
			
		||||
      http.follow_redirects = False
 | 
			
		||||
      while response_code in [301, 302]:
 | 
			
		||||
        req = oauth.Request.from_consumer_and_token(
 | 
			
		||||
            self.consumer, self.token, http_method=method, http_url=uri)
 | 
			
		||||
        req.sign_request(signer, self.consumer, self.token)
 | 
			
		||||
        if headers == None:
 | 
			
		||||
          headers = {}
 | 
			
		||||
        headers.update(req.to_header())
 | 
			
		||||
        if 'user-agent' in headers:
 | 
			
		||||
          headers['user-agent'] = self.user_agent + ' ' + headers['user-agent']
 | 
			
		||||
        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
 | 
			
		||||
    return http
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,11 @@ from google.appengine.ext.webapp import util
 | 
			
		||||
from google.appengine.ext.webapp.util import login_required
 | 
			
		||||
 | 
			
		||||
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):
 | 
			
		||||
@@ -49,29 +53,33 @@ class MainHandler(webapp.RequestHandler):
 | 
			
		||||
  def get(self):
 | 
			
		||||
    user = users.get_current_user()
 | 
			
		||||
    storage = StorageByKeyName(Credentials, user.user_id(), 'credentials')
 | 
			
		||||
    credentials = storage.get()
 | 
			
		||||
    http = httplib2.Http()
 | 
			
		||||
    credentials = storage.get()
 | 
			
		||||
 | 
			
		||||
    if credentials:
 | 
			
		||||
      http = credentials.authorize(http)
 | 
			
		||||
 | 
			
		||||
    service = build("buzz", "v1", http=http)
 | 
			
		||||
 | 
			
		||||
    if credentials:
 | 
			
		||||
      followers = service.people().list(userId='@me', groupId='@followers').execute()
 | 
			
		||||
      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')
 | 
			
		||||
    if not credentials:
 | 
			
		||||
      return begin_oauth_flow(self, user, service)
 | 
			
		||||
 | 
			
		||||
      authorize_url = flow.step1_get_authorize_url(STEP2_URI)
 | 
			
		||||
      memcache.set(user.user_id(), pickle.dumps(flow))
 | 
			
		||||
      self.redirect(authorize_url)
 | 
			
		||||
    followers = service.people().list(userId='@me', groupId='@followers').execute()
 | 
			
		||||
    self.response.out.write('Hello, you have %s followers!' %
 | 
			
		||||
                            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):
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user