Mercurial > hg > hybrid-music-recommender-using-content-based-and-social-information
diff Code/python_oauth2-master/example/appengine_oauth.py @ 21:e68dbee1f6db
Modified code
New datasets
Updated report
author | Paulo Chiliguano <p.e.chiilguano@se14.qmul.ac.uk> |
---|---|
date | Tue, 11 Aug 2015 10:50:36 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Code/python_oauth2-master/example/appengine_oauth.py Tue Aug 11 10:50:36 2015 +0100 @@ -0,0 +1,108 @@ +""" +The MIT License + +Copyright (c) 2010 Justin Plock + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import os + +from google.appengine.ext import webapp +from google.appengine.ext import db +from google.appengine.ext.webapp import util +import oauth2 as oauth # httplib2 is required for this to work on AppEngine + +class Client(db.Model): + # oauth_key is the Model's key_name field + oauth_secret = db.StringProperty() # str(uuid.uuid4()) works well for this + first_name = db.StringProperty() + last_name = db.StringProperty() + email_address = db.EmailProperty(required=True) + password = db.StringProperty(required=True) + + @property + def secret(self): + return self.oauth_secret + +class OAuthHandler(webapp.RequestHandler): + + def __init__(self): + self._server = oauth.Server() + self._server.add_signature_method(oauth.SignatureMethod_HMAC_SHA1()) + self._server.add_signature_method(oauth.SignatureMethod_PLAINTEXT()) + + def get_oauth_request(self): + """Return an OAuth Request object for the current request.""" + + try: + method = os.environ['REQUEST_METHOD'] + except: + method = 'GET' + + postdata = None + if method in ('POST', 'PUT'): + postdata = self.request.body + + return oauth.Request.from_request(method, self.request.uri, + headers=self.request.headers, query_string=postdata) + + def get_client(self, request=None): + """Return the client from the OAuth parameters.""" + + if not isinstance(request, oauth.Request): + request = self.get_oauth_request() + client_key = request.get_parameter('oauth_consumer_key') + if not client_key: + raise Exception('Missing "oauth_consumer_key" parameter in ' \ + 'OAuth "Authorization" header') + + client = models.Client.get_by_key_name(client_key) + if not client: + raise Exception('Client "%s" not found.' % client_key) + + return client + + def is_valid(self): + """Returns a Client object if this is a valid OAuth request.""" + + try: + request = self.get_oauth_request() + client = self.get_client(request) + params = self._server.verify_request(request, client, None) + except Exception, e: + raise e + + return client + +class SampleHandler(OAuthHandler): + def get(self): + try: + client = self.is_valid() + except Exception, e: + self.error(500) + self.response.out.write(e) + +def main(): + application = webapp.WSGIApplication([(r'/sample', SampleHandler)], + debug=False) + util.run_wsgi_app(application) + +if __name__ == '__main__': + main()