Moved OAuth 2.0 samples up to the top level.
diff --git a/samples/appengine/main.py b/samples/appengine/main.py
index 89805aa..087a136 100755
--- a/samples/appengine/main.py
+++ b/samples/appengine/main.py
@@ -21,11 +21,13 @@
import httplib2
import logging
import os
+import pickle
from apiclient.discovery import build
-from apiclient.ext.appengine import FlowThreeLeggedProperty
-from apiclient.ext.appengine import OAuthCredentialsProperty
-from apiclient.oauth import FlowThreeLegged
+from oauth2client.appengine import CredentialsProperty
+from oauth2client.appengine import StorageByKeyName
+from oauth2client.client import OAuth2WebServerFlow
+from google.appengine.api import memcache
from google.appengine.api import users
from google.appengine.ext import db
from google.appengine.ext import webapp
@@ -34,13 +36,8 @@
from google.appengine.ext.webapp.util import login_required
-class Flow(db.Model):
- # FlowThreeLegged could also be stored in memcache.
- flow = FlowThreeLeggedProperty()
-
-
class Credentials(db.Model):
- credentials = OAuthCredentialsProperty()
+ credentials = CredentialsProperty()
class MainHandler(webapp.RequestHandler):
@@ -48,16 +45,32 @@
@login_required
def get(self):
user = users.get_current_user()
- c = Credentials.get_by_key_name(user.user_id())
+ credentials = StorageByKeyName(
+ Credentials, user.user_id(), 'credentials').get()
- if c:
+ if credentials is None or credentials.invalid == True:
+ flow = OAuth2WebServerFlow(
+ # Visit https://code.google.com/apis/console to
+ # generate your client_id, client_secret and to
+ # register your redirect_uri.
+ client_id='<YOUR CLIENT ID HERE>',
+ client_secret='<YOUR CLIENT SECRET HERE>',
+ scope='https://www.googleapis.com/auth/buzz',
+ user_agent='buzz-cmdline-sample/1.0',
+ domain='anonymous',
+ xoauth_displayname='Google App Engine Example App')
+
+ callback = self.request.relative_url('/auth_return')
+ authorize_url = flow.step1_get_authorize_url(callback)
+ memcache.set(user.user_id(), pickle.dumps(flow))
+ self.redirect(authorize_url)
+ else:
http = httplib2.Http()
- http = c.credentials.authorize(http)
+ http = credentials.authorize(http)
service = build("buzz", "v1", http=http)
activities = service.activities()
activitylist = activities.list(scope='@consumption',
userId='@me').execute()
- logging.info(activitylist)
path = os.path.join(os.path.dirname(__file__), 'welcome.html')
logout = users.create_logout_url('/')
self.response.out.write(
@@ -65,21 +78,6 @@
path, {'activitylist': activitylist,
'logout': logout
}))
- else:
- p = build("buzz", "v1")
- flow = FlowThreeLegged(p.auth_discovery(),
- consumer_key='anonymous',
- consumer_secret='anonymous',
- user_agent='google-api-client-python-buzz-webapp/1.0',
- domain='anonymous',
- scope='https://www.googleapis.com/auth/buzz',
- xoauth_displayname='Example Web App')
-
- callback = self.request.relative_url('/auth_return')
- authorize_url = flow.step1_get_authorize_url(callback)
- f = Flow(key_name=user.user_id(), flow=flow)
- f.put()
- self.redirect(authorize_url)
class OAuthHandler(webapp.RequestHandler):
@@ -87,12 +85,11 @@
@login_required
def get(self):
user = users.get_current_user()
- f = Flow.get_by_key_name(user.user_id())
- if f:
- credentials = f.flow.step2_exchange(self.request.params)
- c = Credentials(key_name=user.user_id(), credentials=credentials)
- c.put()
- f.delete()
+ flow = pickle.loads(memcache.get(user.user_id()))
+ if flow:
+ credentials = flow.step2_exchange(self.request.params)
+ StorageByKeyName(
+ Credentials, user.user_id(), 'credentials').put(credentials)
self.redirect("/")
else:
pass