From bf8ece7783898add8d78dab588bcaf7019eaee6c Mon Sep 17 00:00:00 2001 From: Aditya Manohar Date: Sat, 20 Dec 2014 04:15:12 -0800 Subject: [PATCH] Fix CloudSearchDomain signing on EC2 instance --- lib/services/cloudsearchdomain.js | 23 ++++++++++++++-------- test/credential_provider_chain.spec.coffee | 1 + test/credentials.spec.coffee | 3 +++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/lib/services/cloudsearchdomain.js b/lib/services/cloudsearchdomain.js index 0765ca7fd0..adcda74612 100644 --- a/lib/services/cloudsearchdomain.js +++ b/lib/services/cloudsearchdomain.js @@ -71,14 +71,21 @@ AWS.util.update(AWS.CloudSearchDomain.prototype, { * @api private */ setupRequestListeners: function setupRequestListeners(request) { - if (!request.service.config.credentials) { - request.removeListener('validate', - AWS.EventListeners.Core.VALIDATE_CREDENTIALS - ); - request.removeListener('sign', AWS.EventListeners.Core.SIGN); - } else { - request.addListener('validate', this.updateRegion); - } + request.removeListener('validate', + AWS.EventListeners.Core.VALIDATE_CREDENTIALS + ); + request.onAsync('validate', this.validateCredentials); + request.addListener('validate', this.updateRegion); + }, + + validateCredentials: function(req, done) { + if (!req.service.api.signatureVersion) return done(); // none + req.service.config.getCredentials(function(err) { + if (err) { + req.removeListener('sign', AWS.EventListeners.Core.SIGN); + } + done(); + }); }, /** diff --git a/test/credential_provider_chain.spec.coffee b/test/credential_provider_chain.spec.coffee index 6d7e7fb31a..75ea972dab 100644 --- a/test/credential_provider_chain.spec.coffee +++ b/test/credential_provider_chain.spec.coffee @@ -16,6 +16,7 @@ if AWS.util.isNode() afterEach -> AWS.CredentialProviderChain.defaultProviders = defaultProviders + process.env = {} it 'returns an error by default', -> chain.resolve (err) -> diff --git a/test/credentials.spec.coffee b/test/credentials.spec.coffee index 82bac328ba..1302764066 100644 --- a/test/credentials.spec.coffee +++ b/test/credentials.spec.coffee @@ -91,6 +91,9 @@ if AWS.util.isNode() beforeEach -> process.env = {} + afterEach -> + process.env = {} + describe 'constructor', -> it 'should be able to read credentials from env with a prefix', -> process.env.AWS_ACCESS_KEY_ID = 'akid'