Move AWS auth handlers to their own module

This commit is contained in:
Garrett Holmstrom
2015-04-22 11:56:32 -07:00
parent 23fa93ceeb
commit bca22678c0
2 changed files with 56 additions and 32 deletions

View File

@@ -0,0 +1,52 @@
# Copyright (c) 2012-2015, Eucalyptus Systems, Inc.
#
# Permission to use, copy, modify, and/or distribute this software for
# any purpose with or without fee is hereby granted, provided that the
# above copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
from __future__ import absolute_import
import logging
import warnings
class BaseAuth(object):
'''
Basis for all authentication
This class does nothing on its own. It is up to you to implement the
necessary functions to effect an authentication scheme.
'''
ARGS = []
def __init__(self, config, loglevel=None, **kwargs):
self.args = kwargs
self.config = config
self.log = logging.getLogger(self.__class__.__name__)
if loglevel is not None:
self.log.level = loglevel
def configure(self):
pass
def apply_to_request(self, request, service):
pass
def bind_to_service(self, service):
def wrapped_apply_to_request(req):
return self.apply_to_request(req, service) or req
return wrapped_apply_to_request
# Compatibility with requestbuilder < 0.3
from .aws import HmacKeyAuth
from .aws import HmacV1Auth as S3RestAuth
from .aws import QueryHmacV2Auth as QuerySigV2Auth

View File

@@ -21,7 +21,6 @@ import email.utils
import hashlib
import hmac
import os
import logging
import re
import time
import warnings
@@ -30,6 +29,7 @@ import six
import six.moves.urllib_parse as urlparse
from requestbuilder import Arg
from requestbuilder.auth import BaseAuth
from requestbuilder.exceptions import AuthError
@@ -37,34 +37,6 @@ ISO8601 = '%Y-%m-%dT%H:%M:%SZ'
ISO8601_BASIC = '%Y%m%dT%H%M%SZ'
class BaseAuth(object):
'''
Basis for all authentication
This class does nothing on its own. It is up to you to implement the
necessary functions to effect an authentication scheme.
'''
ARGS = []
def __init__(self, config, loglevel=None, **kwargs):
self.args = kwargs
self.config = config
self.log = logging.getLogger(self.__class__.__name__)
if loglevel is not None:
self.log.level = loglevel
def configure(self):
pass
def apply_to_request(self, request, service):
pass
def bind_to_service(self, service):
def wrapped_apply_to_request(req):
return self.apply_to_request(req, service) or req
return wrapped_apply_to_request
class HmacKeyAuth(BaseAuth):
'''
Basis for AWS HMAC-based authentication
@@ -140,7 +112,7 @@ class HmacKeyAuth(BaseAuth):
self.args['secret_key'] = config_secret_key
class S3RestAuth(HmacKeyAuth):
class HmacV1Auth(HmacKeyAuth):
'''
S3 REST authentication
http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
@@ -274,7 +246,7 @@ class S3RestAuth(HmacKeyAuth):
return base64.b64encode(req_hmac.digest())
class S3QueryAuth(S3RestAuth):
class QueryHmacV1Auth(HmacV1Auth):
DEFAULT_TIMEOUT = 600 # 10 minutes
def _update_request_before_signing(self, req):
@@ -298,7 +270,7 @@ class S3QueryAuth(S3RestAuth):
req.prepare_url(req.url, {'Signature': signature})
class QuerySigV2Auth(HmacKeyAuth):
class QueryHmacV2Auth(HmacKeyAuth):
'''
AWS signature version 2
http://docs.aws.amazon.com/general/latest/gr/signature-version-2.html