Added oauth wrapper
This commit is contained in:
78
oauth_wrap.py
Normal file
78
oauth_wrap.py
Normal file
@@ -0,0 +1,78 @@
|
||||
# Copyright (C) 2010 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.
|
||||
|
||||
import httplib2
|
||||
import oauth2 as oauth
|
||||
import simplejson
|
||||
|
||||
|
||||
def oauth_wrap(consumer, token, http):
|
||||
"""
|
||||
Args:
|
||||
http - An instance of httplib2.Http
|
||||
or something that acts like it.
|
||||
|
||||
Returns:
|
||||
A modified instance of http that was passed in.
|
||||
|
||||
Example:
|
||||
|
||||
h = httplib2.Http()
|
||||
h = oauth_wrap(h)
|
||||
|
||||
Grumble. You can't create a new OAuth
|
||||
subclass of httplib2.Authenication because
|
||||
it never gets passed the absolute URI, which is
|
||||
needed for signing. So instead we have to overload
|
||||
'request' with a closure that adds in the
|
||||
Authorization header and then calls the original version
|
||||
of 'request().
|
||||
"""
|
||||
request_orig = http.request
|
||||
signer = oauth.SignatureMethod_HMAC_SHA1()
|
||||
|
||||
def new_request(uri, method='GET', body=None, headers=None,
|
||||
redirections=httplib2.DEFAULT_MAX_REDIRECTS, connection_type=None):
|
||||
"""Modify the request headers to add the appropriate
|
||||
Authorization header."""
|
||||
req = oauth.Request.from_consumer_and_token(
|
||||
consumer, token, http_method=method, http_url=uri)
|
||||
req.sign_request(signer, consumer, token)
|
||||
if headers == None:
|
||||
headers = {}
|
||||
headers.update(req.to_header())
|
||||
headers['user-agent'] = 'jcgregorio-test-client'
|
||||
return request_orig(uri, method, body, headers, redirections,
|
||||
connection_type)
|
||||
|
||||
http.request = new_request
|
||||
return http
|
||||
|
||||
def get_authorised_http(oauth_params):
|
||||
consumer = oauth.Consumer(oauth_params['consumer_key'],
|
||||
oauth_params['consumer_secret'])
|
||||
token = oauth.Token(oauth_params['oauth_token'],
|
||||
oauth_params['oauth_token_secret'])
|
||||
|
||||
# Create a simple monkeypatch for httplib2.Http.request
|
||||
# just adds in the oauth authorization header and then calls
|
||||
# the original request().
|
||||
http = httplib2.Http()
|
||||
return oauth_wrap(consumer, token, http)
|
||||
|
||||
def get_wrapped_http(filename='oauth_token.dat'):
|
||||
f = open(filename, 'r')
|
||||
oauth_params = simplejson.loads(f.read())
|
||||
|
||||
return get_authorised_http(oauth_params)
|
Reference in New Issue
Block a user