| #!/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 os |
| |
| 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, |
| ) |