mirror of
https://github.com/amark/gun.git
synced 2025-06-09 07:36:44 +00:00
114 lines
3.5 KiB
JavaScript
114 lines
3.5 KiB
JavaScript
var AWS = require('../core');
|
|
|
|
/**
|
|
* Creates a credential provider chain that searches for AWS credentials
|
|
* in a list of credential providers specified by the {providers} property.
|
|
*
|
|
* By default, the chain will use the {defaultProviders} to resolve credentials.
|
|
* These providers will look in the environment using the
|
|
* {AWS.EnvironmentCredentials} class with the 'AWS' and 'AMAZON' prefixes.
|
|
*
|
|
* ## Setting Providers
|
|
*
|
|
* Each provider in the {providers} list should be a function that returns
|
|
* a {AWS.Credentials} object, or a hardcoded credentials object. The function
|
|
* form allows for delayed execution of the credential construction.
|
|
*
|
|
* ## Resolving Credentials from a Chain
|
|
*
|
|
* Call {resolve} to return the first valid credential object that can be
|
|
* loaded by the provider chain.
|
|
*
|
|
* For example, to resolve a chain with a custom provider that checks a file
|
|
* on disk after the set of {defaultProviders}:
|
|
*
|
|
* ```javascript
|
|
* var diskProvider = new AWS.FileSystemCredentials('./creds.json');
|
|
* var chain = new AWS.CredentialProviderChain();
|
|
* chain.providers.push(diskProvider);
|
|
* chain.resolve();
|
|
* ```
|
|
*
|
|
* The above code will return the `diskProvider` object if the
|
|
* file contains credentials and the `defaultProviders` do not contain
|
|
* any credential settings.
|
|
*
|
|
* @!attribute providers
|
|
* @return [Array<AWS.Credentials, Function>]
|
|
* a list of credentials objects or functions that return credentials
|
|
* objects. If the provider is a function, the function will be
|
|
* executed lazily when the provider needs to be checked for valid
|
|
* credentials. By default, this object will be set to the
|
|
* {defaultProviders}.
|
|
* @see defaultProviders
|
|
*/
|
|
AWS.CredentialProviderChain = AWS.util.inherit(AWS.Credentials, {
|
|
|
|
/**
|
|
* Creates a new CredentialProviderChain with a default set of providers
|
|
* specified by {defaultProviders}.
|
|
*/
|
|
constructor: function CredentialProviderChain(providers) {
|
|
if (providers) {
|
|
this.providers = providers;
|
|
} else {
|
|
this.providers = AWS.CredentialProviderChain.defaultProviders.slice(0);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Resolves the provider chain by searching for the first set of
|
|
* credentials in {providers}.
|
|
*
|
|
* @callback callback function(err, credentials)
|
|
* Called when the provider resolves the chain to a credentials object
|
|
* or null if no credentials can be found.
|
|
*
|
|
* @param err [Error] the error object returned if no credentials are
|
|
* found.
|
|
* @param credentials [AWS.Credentials] the credentials object resolved
|
|
* by the provider chain.
|
|
* @return [AWS.CredentialProviderChain] the provider, for chaining.
|
|
*/
|
|
resolve: function resolve(callback) {
|
|
if (this.providers.length === 0) {
|
|
callback(new Error('No providers'));
|
|
return this;
|
|
}
|
|
|
|
var index = 0;
|
|
var providers = this.providers.slice(0);
|
|
|
|
function resolveNext(err, creds) {
|
|
if ((!err && creds) || index === providers.length) {
|
|
callback(err, creds);
|
|
return;
|
|
}
|
|
|
|
var provider = providers[index++];
|
|
if (typeof provider === 'function') {
|
|
creds = provider.call();
|
|
} else {
|
|
creds = provider;
|
|
}
|
|
|
|
if (creds.get) {
|
|
creds.get(function(err) {
|
|
resolveNext(err, err ? null : creds);
|
|
});
|
|
} else {
|
|
resolveNext(null, creds);
|
|
}
|
|
}
|
|
|
|
resolveNext();
|
|
return this;
|
|
}
|
|
|
|
});
|
|
|
|
/**
|
|
* The default set of providers used by a vanilla CredentialProviderChain.
|
|
*/
|
|
AWS.CredentialProviderChain.defaultProviders = [];
|