From 9a9d7e8641381b870fa76abfc24af8fbe601e463 Mon Sep 17 00:00:00 2001 From: AllanFly120 Date: Wed, 26 Dec 2018 11:05:34 -0800 Subject: [PATCH] make credentials provider chain resolve synchronous. (#2456) --- .../next-release/bugfix-credentials-3d679332.json | 5 +++++ lib/credentials/credential_provider_chain.js | 4 +--- test/credential_provider_chain.spec.js | 12 ++++++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 .changes/next-release/bugfix-credentials-3d679332.json diff --git a/.changes/next-release/bugfix-credentials-3d679332.json b/.changes/next-release/bugfix-credentials-3d679332.json new file mode 100644 index 0000000000..1247916b3a --- /dev/null +++ b/.changes/next-release/bugfix-credentials-3d679332.json @@ -0,0 +1,5 @@ +{ + "type": "bugfix", + "category": "credentials", + "description": "Make CredentialProviderChain coalesce resolvation synchronous" +} \ No newline at end of file diff --git a/lib/credentials/credential_provider_chain.js b/lib/credentials/credential_provider_chain.js index ff7d4925ac..2f50ff771f 100644 --- a/lib/credentials/credential_provider_chain.js +++ b/lib/credentials/credential_provider_chain.js @@ -108,9 +108,7 @@ AWS.CredentialProviderChain = AWS.util.inherit(AWS.Credentials, { function resolveNext(err, creds) { if ((!err && creds) || index === providers.length) { AWS.util.arrayEach(self.resolveCallbacks, function (callback) { - AWS.util.defer(function () { - callback(err, creds); - }); + callback(err, creds); }); self.resolveCallbacks.length = 0; return; diff --git a/test/credential_provider_chain.spec.js b/test/credential_provider_chain.spec.js index 53f954a38a..a9ccc62117 100644 --- a/test/credential_provider_chain.spec.js +++ b/test/credential_provider_chain.spec.js @@ -53,6 +53,18 @@ return expect(creds.sessionToken).to.equal('session'); }); }); + it('should be able to resolve credentials synchronously', function() { + process.env['AMAZON_ACCESS_KEY_ID'] = 'akid'; + process.env['AMAZON_SECRET_ACCESS_KEY'] = 'secret'; + process.env['AMAZON_SESSION_TOKEN'] = 'session'; + var credentials = null; + chain.resolve(function(err, creds) { + credentials = creds; + }); + expect(credentials.accessKeyId).to.equal('akid'); + expect(credentials.secretAccessKey).to.equal('secret'); + expect(credentials.sessionToken).to.equal('session'); + }); it('prefers AWS credentials to AMAZON credentials', function() { process.env['AWS_ACCESS_KEY_ID'] = 'akid'; process.env['AWS_SECRET_ACCESS_KEY'] = 'secret';