def make_signed_request(self, method, url, data=None, params=None, ttl=100, **kwargs): signer = signing.Signer(settings.HMAC_SECRET, settings.HMAC_ALGORITHM) if method.upper() in QUERY_METHODS: signed = signing.sign_data(signer, params or {}, ttl=ttl) params = signed else: signed = signing.sign_data(signer, json.loads(data or {}), ttl=ttl) data = json.dumps(signed) # Ensure url ends with a / if not url.endswith('/'): if '?' not in url: url += '/' elif url[url.rfind('?') - 1] != '/': url = url.replace('?', '/?') return (yield from self.make_request(method, url, data=data, params=params, **kwargs))
async def push_metadata(version_id, callback_url, metadata): signer = signing.Signer(settings.HMAC_SECRET, settings.HMAC_ALGORITHM) data = signing.sign_data( signer, { 'version': version_id, 'metadata': metadata, }, ) response = await aiohttp.request( 'PUT', callback_url, data=json.dumps(data), headers={'Content-Type': 'application/json'}, ) if response.status != HTTPStatus.OK: raise Exception('Failed to report archive completion, got status ' 'code {}'.format(response.status))
def _push_archive_complete(self, version_id, callback_url, metadata): signer = signing.Signer(settings.HMAC_SECRET, settings.HMAC_ALGORITHM) with utils.RetryHook(self): data = signing.sign_data( signer, { 'version': version_id, 'metadata': metadata, }, ) future = aiohttp.request( 'PUT', callback_url, data=json.dumps(data), headers={'Content-Type': 'application/json'}, ) loop = asyncio.get_event_loop() response = loop.run_until_complete(future) if response.status != http.client.OK: raise Exception('Failed to report archive completion, got status code {}'.format(response.status))
from waterbutler.server import utils as server_utils def list_or_value(value): assert isinstance(value, list) if len(value) == 0: return None if len(value) == 1: # Remove leading slashes as they break things return value[0].decode('utf-8') return [item.decode('utf-8') for item in value] logger = logging.getLogger(__name__) auth_handler = AuthHandler(settings.AUTH_HANDLERS) signer = signing.Signer(settings.HMAC_SECRET, settings.HMAC_ALGORITHM) class BaseHandler(server_utils.CORsMixin, server_utils.UtilMixin, tornado.web.RequestHandler, SentryMixin): """Base Handler to inherit from when defining a new view. Handles CORs headers, additional status codes, and translating :class:`waterbutler.core.exceptions.ProviderError`s into http responses .. note:: For IE compatability passing a ?method=<httpmethod> will cause that request, regardless of the actual method, to be interpreted as the specified method. """ ACTION_MAP = {}