blob: 89805aa3fa0ca19523843cb0313bf6155f6b159f [file] [log] [blame]
Joe Gregorio845a5452010-09-08 13:50:34 -04001#!/usr/bin/env python
2#
3# Copyright 2007 Google Inc.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17
18__author__ = 'jcgregorio@google.com (Joe Gregorio)'
19
20
21import httplib2
Joe Gregoriob8262fc2010-09-09 11:31:30 -040022import logging
Joe Gregorio845a5452010-09-08 13:50:34 -040023import os
24
25from apiclient.discovery import build
26from apiclient.ext.appengine import FlowThreeLeggedProperty
27from apiclient.ext.appengine import OAuthCredentialsProperty
28from apiclient.oauth import FlowThreeLegged
Joe Gregorio845a5452010-09-08 13:50:34 -040029from google.appengine.api import users
30from google.appengine.ext import db
31from google.appengine.ext import webapp
32from google.appengine.ext.webapp import template
33from google.appengine.ext.webapp import util
34from google.appengine.ext.webapp.util import login_required
35
Joe Gregorio845a5452010-09-08 13:50:34 -040036
37class Flow(db.Model):
38 # FlowThreeLegged could also be stored in memcache.
39 flow = FlowThreeLeggedProperty()
40
41
42class Credentials(db.Model):
43 credentials = OAuthCredentialsProperty()
44
45
46class MainHandler(webapp.RequestHandler):
47
48 @login_required
49 def get(self):
50 user = users.get_current_user()
51 c = Credentials.get_by_key_name(user.user_id())
52
53 if c:
54 http = httplib2.Http()
55 http = c.credentials.authorize(http)
Joe Gregorio1ae3e742011-02-25 15:17:14 -050056 service = build("buzz", "v1", http=http)
57 activities = service.activities()
Joe Gregorio5f087cf2010-09-20 16:08:07 -040058 activitylist = activities.list(scope='@consumption',
59 userId='@me').execute()
Joe Gregoriob8262fc2010-09-09 11:31:30 -040060 logging.info(activitylist)
Joe Gregorio845a5452010-09-08 13:50:34 -040061 path = os.path.join(os.path.dirname(__file__), 'welcome.html')
Joe Gregoriob8262fc2010-09-09 11:31:30 -040062 logout = users.create_logout_url('/')
63 self.response.out.write(
64 template.render(
65 path, {'activitylist': activitylist,
66 'logout': logout
67 }))
Joe Gregorio845a5452010-09-08 13:50:34 -040068 else:
Joe Gregoriof6a598b2010-09-22 15:01:38 -040069 p = build("buzz", "v1")
70 flow = FlowThreeLegged(p.auth_discovery(),
Joe Gregorio845a5452010-09-08 13:50:34 -040071 consumer_key='anonymous',
72 consumer_secret='anonymous',
73 user_agent='google-api-client-python-buzz-webapp/1.0',
74 domain='anonymous',
75 scope='https://www.googleapis.com/auth/buzz',
76 xoauth_displayname='Example Web App')
77
ade@google.com39e2a4e2011-01-10 00:33:07 +000078 callback = self.request.relative_url('/auth_return')
79 authorize_url = flow.step1_get_authorize_url(callback)
Joe Gregorio845a5452010-09-08 13:50:34 -040080 f = Flow(key_name=user.user_id(), flow=flow)
81 f.put()
82 self.redirect(authorize_url)
83
84
85class OAuthHandler(webapp.RequestHandler):
86
87 @login_required
88 def get(self):
89 user = users.get_current_user()
90 f = Flow.get_by_key_name(user.user_id())
91 if f:
92 credentials = f.flow.step2_exchange(self.request.params)
93 c = Credentials(key_name=user.user_id(), credentials=credentials)
94 c.put()
95 f.delete()
96 self.redirect("/")
97 else:
98 pass
99
100
101def main():
102 application = webapp.WSGIApplication(
103 [
104 ('/', MainHandler),
105 ('/auth_return', OAuthHandler)
106 ],
107 debug=True)
108 util.run_wsgi_app(application)
109
110
111if __name__ == '__main__':
112 main()