Port the MAAS code to oauthlib.

This commit is contained in:
Barry Warsaw 2015-01-26 16:37:29 -05:00
parent c86cdd766f
commit bc41baf9b8
3 changed files with 33 additions and 28 deletions

View File

@ -22,10 +22,11 @@ from __future__ import print_function
from email.utils import parsedate from email.utils import parsedate
import errno import errno
import oauth.oauth as oauth import oauthlib
import os import os
import time import time
import urllib2
from six.moves.urllib_request import Request, urlopen
from cloudinit import log as logging from cloudinit import log as logging
from cloudinit import sources from cloudinit import sources
@ -274,25 +275,34 @@ def check_seed_contents(content, seed):
def oauth_headers(url, consumer_key, token_key, token_secret, consumer_secret, def oauth_headers(url, consumer_key, token_key, token_secret, consumer_secret,
timestamp=None): timestamp=None):
consumer = oauth.OAuthConsumer(consumer_key, consumer_secret) client = oauthlib.oauth1.Client(
token = oauth.OAuthToken(token_key, token_secret) consumer_key,
client_secret=consumer_secret,
resource_owner_key=token_key,
resource_owner_secret=token_secret,
signature_method=oauthlib.SIGNATURE_PLAINTEXT)
uri, signed_headers, body = client.sign(url)
return signed_headers
if timestamp is None: ## consumer = oauth.OAuthConsumer(consumer_key, consumer_secret)
ts = int(time.time()) ## token = oauth.OAuthToken(token_key, token_secret)
else:
ts = timestamp
params = { ## if timestamp is None:
'oauth_version': "1.0", ## ts = int(time.time())
'oauth_nonce': oauth.generate_nonce(), ## else:
'oauth_timestamp': ts, ## ts = timestamp
'oauth_token': token.key,
'oauth_consumer_key': consumer.key, ## params = {
} ## 'oauth_version': "1.0",
req = oauth.OAuthRequest(http_url=url, parameters=params) ## 'oauth_nonce': oauth.generate_nonce(),
req.sign_request(oauth.OAuthSignatureMethod_PLAINTEXT(), ## 'oauth_timestamp': ts,
consumer, token) ## 'oauth_token': token.key,
return req.to_header() ## 'oauth_consumer_key': consumer.key,
## }
## req = oauth.OAuthRequest(http_url=url, parameters=params)
## req.sign_request(oauth.OAuthSignatureMethod_PLAINTEXT(),
## consumer, token)
## return req.to_header()
class MAASSeedDirNone(Exception): class MAASSeedDirNone(Exception):
@ -359,8 +369,8 @@ if __name__ == "__main__":
creds[key] = cfg[key] creds[key] = cfg[key]
def geturl(url, headers_cb): def geturl(url, headers_cb):
req = urllib2.Request(url, data=None, headers=headers_cb(url)) req = Request(url, data=None, headers=headers_cb(url))
return (urllib2.urlopen(req).read()) return urlopen(req).read()
def printurl(url, headers_cb): def printurl(url, headers_cb):
print("== %s ==\n%s\n" % (url, geturl(url, headers_cb))) print("== %s ==\n%s\n" % (url, geturl(url, headers_cb)))

View File

@ -8,7 +8,7 @@ PrettyTable
# This one is currently only used by the MAAS datasource. If that # This one is currently only used by the MAAS datasource. If that
# datasource is removed, this is no longer needed # datasource is removed, this is no longer needed
oauth oauthlib
# This one is currently used only by the CloudSigma and SmartOS datasources. # This one is currently used only by the CloudSigma and SmartOS datasources.
# If these datasources are removed, this is no longer needed # If these datasources are removed, this is no longer needed

View File

@ -4,11 +4,7 @@ import shutil
import tempfile import tempfile
import unittest import unittest
# XXX DataSourceMAAS must be ported to oauthlib for Python 3 from cloudinit.sources import DataSourceMAAS
import six
if not six.PY3:
from cloudinit.sources import DataSourceMAAS
from cloudinit import url_helper from cloudinit import url_helper
from ..helpers import populate_dir from ..helpers import populate_dir
@ -18,7 +14,6 @@ except ImportError:
import mock import mock
@unittest.skipIf(six.PY3, 'DataSourceMAAS must be ported to oauthlib')
class TestMAASDataSource(unittest.TestCase): class TestMAASDataSource(unittest.TestCase):
def setUp(self): def setUp(self):