Move AWS auth handlers to their own module
This commit is contained in:
52
requestbuilder/auth/__init__.py
Normal file
52
requestbuilder/auth/__init__.py
Normal 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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user