From b6c0309c21f252dd7cfb3489a537540c2e43a79a Mon Sep 17 00:00:00 2001 From: "Jessica.Donahue" Date: Mon, 27 Nov 2017 16:44:12 -0500 Subject: [PATCH] Add custom endpoint feature and include aws credentials in client --- lib/s3.js | 8 ++++++++ lib/util.js | 13 ++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/s3.js b/lib/s3.js index 349fb18..641fdbb 100644 --- a/lib/s3.js +++ b/lib/s3.js @@ -10,6 +10,14 @@ function makeClient (options) { context.logger = util.logWrapper(context.logger) assert(context.region, 'Region is a required option for S3 clients') + if (!context.credentials && context.secretAccessKey) { + context.credentials = { + secretAccessKey: context.secretAccessKey, + accessKeyId: context.accessKeyId, + sessionToken: context.sessionToken + } + } + return { getObject: getObject.bind(null, context), putObject: putObject.bind(null, context), diff --git a/lib/util.js b/lib/util.js index 96f7a11..537eba2 100644 --- a/lib/util.js +++ b/lib/util.js @@ -3,6 +3,8 @@ const request = require('request-micro') const aws4 = require('aws4') const util = require('util') +const url = require('url') + module.exports = { logWrapper: logWrapper, @@ -58,14 +60,19 @@ function formatError (context, obj) { } function signedRequest (context, params) { + let endpoint + if (context.endpoint) { + endpoint = url.parse(context.endpoint) + } try { let defaultParams = { service: 's3', - hostname: `s3${context.region !== 'us-east-1' ? `-${context.region}` : ''}.amazonaws.com`, + hostname: endpoint ? endpoint.hostname : undefined, + port: endpoint ? endpoint.port : undefined, region: context.region, - protocol: 'https:' + protocol: endpoint ? endpoint.protocol : 'https:' } - return request(aws4.sign(Object.assign(defaultParams, params))).then(result => { + return request(aws4.sign(Object.assign(defaultParams, params), context.credentials)).then(result => { context.logger.info('response status', result.statusCode) context.logger.debug('response headers', result.headers) if (result.statusCode >= 400) throw formatError(context, result)