Fix bug 7. Also, clean up the app engine template to make the happy path happier.
diff --git a/apiclient/oauth.py b/apiclient/oauth.py
index 7351b36..fe78e61 100644
--- a/apiclient/oauth.py
+++ b/apiclient/oauth.py
@@ -124,18 +124,25 @@
                     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
diff --git a/samples/new_project_template/main.py b/samples/new_project_template/main.py
index 026400e..8241908 100755
--- a/samples/new_project_template/main.py
+++ b/samples/new_project_template/main.py
@@ -36,7 +36,11 @@
 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 @@
   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):