diff --git a/samples/oauth2/dailymotion/apiclient b/samples/oauth2/dailymotion/apiclient new file mode 120000 index 0000000..f53af07 --- /dev/null +++ b/samples/oauth2/dailymotion/apiclient @@ -0,0 +1 @@ +../../../apiclient/ \ No newline at end of file diff --git a/samples/oauth2/dailymotion/app.yaml b/samples/oauth2/dailymotion/app.yaml new file mode 100644 index 0000000..a712bd2 --- /dev/null +++ b/samples/oauth2/dailymotion/app.yaml @@ -0,0 +1,9 @@ +application: dailymotoauth2test +version: 1 +runtime: python +api_version: 1 + +handlers: +- url: .* + script: main.py + diff --git a/samples/oauth2/dailymotion/gflags.py b/samples/oauth2/dailymotion/gflags.py new file mode 120000 index 0000000..157177e --- /dev/null +++ b/samples/oauth2/dailymotion/gflags.py @@ -0,0 +1 @@ +../../../gflags.py \ No newline at end of file diff --git a/samples/oauth2/dailymotion/gflags_validators.py b/samples/oauth2/dailymotion/gflags_validators.py new file mode 120000 index 0000000..9d359e0 --- /dev/null +++ b/samples/oauth2/dailymotion/gflags_validators.py @@ -0,0 +1 @@ +../../../gflags_validators.py \ No newline at end of file diff --git a/samples/oauth2/dailymotion/httplib2 b/samples/oauth2/dailymotion/httplib2 new file mode 120000 index 0000000..69b02ef --- /dev/null +++ b/samples/oauth2/dailymotion/httplib2 @@ -0,0 +1 @@ +../../../httplib2/ \ No newline at end of file diff --git a/samples/oauth2/dailymotion/index.yaml b/samples/oauth2/dailymotion/index.yaml new file mode 100644 index 0000000..a3b9e05 --- /dev/null +++ b/samples/oauth2/dailymotion/index.yaml @@ -0,0 +1,11 @@ +indexes: + +# AUTOGENERATED + +# This index.yaml is automatically updated whenever the dev_appserver +# detects that a new type of query is run. If you want to manage the +# index.yaml file manually, remove the above marker line (the line +# saying "# AUTOGENERATED"). If you want to manage some indexes +# manually, move them above the marker line. The index.yaml file is +# automatically uploaded to the admin console when you next deploy +# your application using appcfg.py. diff --git a/samples/oauth2/dailymotion/main.py b/samples/oauth2/dailymotion/main.py new file mode 100644 index 0000000..c904e3b --- /dev/null +++ b/samples/oauth2/dailymotion/main.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python +# +# Copyright 2007 Google Inc. +# +# 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. +# + +__author__ = 'jcgregorio@google.com (Joe Gregorio)' + + +import httplib2 +import logging +import os +import pickle + +from apiclient.discovery import build +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 +from google.appengine.ext.webapp import template +from google.appengine.ext.webapp import util +from google.appengine.ext.webapp.util import login_required + + +class Credentials(db.Model): + credentials = CredentialsProperty() + + +class MainHandler(webapp.RequestHandler): + + @login_required + def get(self): + user = users.get_current_user() + credentials = StorageByKeyName( + Credentials, user.user_id(), 'credentials').get() + + if credentials is None or credentials.invalid == True: + flow = OAuth2WebServerFlow( + client_id='2ad565600216d25d9cde', + client_secret='03b56df2949a520be6049ff98b89813f17b467dc', + scope='read', + user_agent='oauth2client-sample/1.0', + auth_uri='https://api.dailymotion.com/oauth/authorize', + token_uri='https://api.dailymotion.com/oauth/token' + ) + + 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() + + resp, content1 = http.request('https://api.dailymotion.com/me?access_token=%s' % + credentials.access_token) + + http = credentials.authorize(http) + resp, content2 = http.request('https://api.dailymotion.com/me') + + path = os.path.join(os.path.dirname(__file__), 'welcome.html') + logout = users.create_logout_url('/') + self.response.out.write( + template.render( + path, { + 'content1': content1, + 'content2': content2, + 'logout': logout + })) + + +class OAuthHandler(webapp.RequestHandler): + + @login_required + def get(self): + user = users.get_current_user() + 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 + + +def main(): + application = webapp.WSGIApplication( + [ + ('/', MainHandler), + ('/auth_return', OAuthHandler) + ], + debug=True) + util.run_wsgi_app(application) + + +if __name__ == '__main__': + main() diff --git a/samples/oauth2/dailymotion/oauth2client b/samples/oauth2/dailymotion/oauth2client new file mode 120000 index 0000000..0a1ec33 --- /dev/null +++ b/samples/oauth2/dailymotion/oauth2client @@ -0,0 +1 @@ +../../../oauth2client/ \ No newline at end of file diff --git a/samples/oauth2/dailymotion/simplejson b/samples/oauth2/dailymotion/simplejson new file mode 120000 index 0000000..eeaa2f0 --- /dev/null +++ b/samples/oauth2/dailymotion/simplejson @@ -0,0 +1 @@ +../../../simplejson/ \ No newline at end of file diff --git a/samples/oauth2/dailymotion/uritemplate b/samples/oauth2/dailymotion/uritemplate new file mode 120000 index 0000000..5952908 --- /dev/null +++ b/samples/oauth2/dailymotion/uritemplate @@ -0,0 +1 @@ +../../../uritemplate/ \ No newline at end of file diff --git a/samples/oauth2/dailymotion/welcome.html b/samples/oauth2/dailymotion/welcome.html new file mode 100644 index 0000000..06fcb95 --- /dev/null +++ b/samples/oauth2/dailymotion/welcome.html @@ -0,0 +1,16 @@ + + + Daily Motion Sample + + + +

Logout

+

First request with access_token in query parameter:

+
{{ content1 }} 
+

Second request with access_token in header:

+
{{ content2 }} 
+ +