From 8b44f3734e18770939d0dcc82cc16a4bb083e819 Mon Sep 17 00:00:00 2001 From: Honza Jerabek Date: Thu, 11 Nov 2021 23:13:14 +0100 Subject: [PATCH] Unify getting aws credentials --- getAwsOptions.js | 25 +++++++++++++++++++++++++ index.js | 34 ++++++++-------------------------- resolveStackOutput.js | 9 ++++----- 3 files changed, 37 insertions(+), 31 deletions(-) create mode 100644 getAwsOptions.js diff --git a/getAwsOptions.js b/getAwsOptions.js new file mode 100644 index 0000000..1eb0447 --- /dev/null +++ b/getAwsOptions.js @@ -0,0 +1,25 @@ +function getAwsOptions(provider) { + if (provider.cachedCredentials && typeof(provider.cachedCredentials.accessKeyId) != 'undefined' + && typeof(provider.cachedCredentials.secretAccessKey) != 'undefined' + && typeof(provider.cachedCredentials.sessionToken) != 'undefined') { + + return { + // Temporarily disabled the below below because Serverless framework is not interpolating ${env:foo} + // in provider.credentials.region or provider.cachedCredentials.region + // region: provider.cachedCredentials.region, + region: provider.getRegion(), + credentials: { + accessKeyId: provider.cachedCredentials.accessKeyId, + secretAccessKey: provider.cachedCredentials.secretAccessKey, + sessionToken: provider.cachedCredentials.sessionToken, + } + } + } else { + return { + region: provider.getRegion() || provider.getCredentials().region, + credentials: provider.getCredentials().credentials + } + } +} + +module.exports = getAwsOptions diff --git a/index.js b/index.js index c100224..f626e6b 100644 --- a/index.js +++ b/index.js @@ -7,6 +7,7 @@ const minimatch = require('minimatch'); const path = require('path'); const fs = require('fs'); const resolveStackOutput = require('./resolveStackOutput') +const getAwsOptions = require('./getAwsOptions') const messagePrefix = 'S3 Sync: '; const mime = require('mime'); const child_process = require('child_process'); @@ -81,37 +82,18 @@ class ServerlessS3Sync { client() { const provider = this.serverless.getProvider('aws'); - let awsCredentials, region; - if (provider.cachedCredentials && typeof(provider.cachedCredentials.accessKeyId) != 'undefined' - && typeof(provider.cachedCredentials.secretAccessKey) != 'undefined' - && typeof(provider.cachedCredentials.sessionToken) != 'undefined') { - // Temporarily disabled the below below because Serverless framework is not interpolating ${env:foo} - // in provider.credentials.region or provider.cachedCredentials.region - // region = provider.cachedCredentials.region - region = provider.getRegion(); - awsCredentials = { - accessKeyId: provider.cachedCredentials.accessKeyId, - secretAccessKey: provider.cachedCredentials.secretAccessKey, - sessionToken: provider.cachedCredentials.sessionToken, - } - } else { - region = provider.getRegion() || provider.getCredentials().region; - awsCredentials = provider.getCredentials().credentials; - } - let s3Options = { - region: region, - credentials: awsCredentials - }; - if(this.getEndpoint() && this.isOffline()) { - s3Options.endpoint = new provider.sdk.Endpoint(this.serverless.service.custom.s3Sync.endpoint); - s3Options.s3ForcePathStyle = true; - } + const s3Options = getAwsOptions(provider) + + if(this.getEndpoint() && this.isOffline()) { + s3Options.endpoint = new provider.sdk.Endpoint(this.serverless.service.custom.s3Sync.endpoint); + s3Options.s3ForcePathStyle = true; + } const s3Client = new provider.sdk.S3(s3Options); if(this.getEndpoint() && this.isOffline()) { //see: https://github.com/aws/aws-sdk-js/issues/1157 s3Client.shouldDisableBodySigning = () => true } - return s3.createClient({ s3Client }); + return s3.createClient({ s3Client }); } sync() { diff --git a/resolveStackOutput.js b/resolveStackOutput.js index 5735eeb..07f693d 100644 --- a/resolveStackOutput.js +++ b/resolveStackOutput.js @@ -1,10 +1,9 @@ +const getAwsOptions = require('./getAwsOptions') + function resolveStackOutput(plugin, outputKey) { const provider = plugin.serverless.getProvider('aws'); - const awsCredentials = provider.getCredentials(); - const cfn = new provider.sdk.CloudFormation({ - region: provider.getRegion(), - credentials: awsCredentials.credentials - }); + const options = getAwsOptions(provider) + const cfn = new provider.sdk.CloudFormation(options); const stackName = provider.naming.getStackName(); return cfn