| #!/usr/bin/env python |
| # |
| # Copyright 2014 Google Inc. All Rights Reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| """Starting template for Google App Engine applications. |
| |
| Use this project as a starting point if you are just beginning to build a Google |
| App Engine project. Remember to download the OAuth 2.0 client secrets which can |
| be obtained from the Developer Console <https://code.google.com/apis/console/> |
| and save them as 'client_secrets.json' in the project directory. |
| """ |
| |
| __author__ = '[email protected] (Joe Gregorio)' |
| |
| |
| import httplib2 |
| import logging |
| import os |
| import pickle |
| |
| from googleapiclient import discovery |
| from oauth2client import client |
| from oauth2client.contrib import appengine |
| from google.appengine.api import memcache |
| |
| import webapp2 |
| import jinja2 |
| |
| |
| JINJA_ENVIRONMENT = jinja2.Environment( |
| loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), |
| autoescape=True, |
| extensions=['jinja2.ext.autoescape']) |
| |
| # CLIENT_SECRETS, name of a file containing the OAuth 2.0 information for this |
| # application, including client_id and client_secret, which are found |
| # on the API Access tab on the Google APIs |
| # Console <http://code.google.com/apis/console> |
| CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), 'client_secrets.json') |
| |
| # Helpful message to display in the browser if the CLIENT_SECRETS file |
| # is missing. |
| MISSING_CLIENT_SECRETS_MESSAGE = """ |
| <h1>Warning: Please configure OAuth 2.0</h1> |
| <p> |
| To make this sample run you will need to populate the client_secrets.json file |
| found at: |
| </p> |
| <p> |
| <code>%s</code>. |
| </p> |
| <p>with information found on the <a |
| href="https://code.google.com/apis/console">APIs Console</a>. |
| </p> |
| """ % CLIENT_SECRETS |
| |
| |
| http = httplib2.Http(memcache) |
| service = discovery.build("plus", "v1", http=http) |
| decorator = appengine.oauth2decorator_from_clientsecrets( |
| CLIENT_SECRETS, |
| scope='https://www.googleapis.com/auth/plus.me', |
| message=MISSING_CLIENT_SECRETS_MESSAGE) |
| |
| class MainHandler(webapp2.RequestHandler): |
| |
| @decorator.oauth_aware |
| def get(self): |
| variables = { |
| 'url': decorator.authorize_url(), |
| 'has_credentials': decorator.has_credentials() |
| } |
| template = JINJA_ENVIRONMENT.get_template('grant.html') |
| self.response.write(template.render(variables)) |
| |
| |
| class AboutHandler(webapp2.RequestHandler): |
| |
| @decorator.oauth_required |
| def get(self): |
| try: |
| http = decorator.http() |
| user = service.people().get(userId='me').execute(http=http) |
| text = 'Hello, %s!' % user['displayName'] |
| |
| template = JINJA_ENVIRONMENT.get_template('welcome.html') |
| self.response.write(template.render({'text': text })) |
| except client.AccessTokenRefreshError: |
| self.redirect('/') |
| |
| |
| app = webapp2.WSGIApplication( |
| [ |
| ('/', MainHandler), |
| ('/about', AboutHandler), |
| (decorator.callback_path, decorator.callback_handler()), |
| ], |
| debug=True) |