92 lines
2.9 KiB
JavaScript
92 lines
2.9 KiB
JavaScript
var AWS = require('../core');
|
|
|
|
/**
|
|
* Represents credentials from the environment.
|
|
*
|
|
* By default, this class will look for the matching environment variables
|
|
* prefixed by a given {envPrefix}. The un-prefixed environment variable names
|
|
* for each credential value is listed below:
|
|
*
|
|
* ```javascript
|
|
* accessKeyId: ACCESS_KEY_ID
|
|
* secretAccessKey: SECRET_ACCESS_KEY
|
|
* sessionToken: SESSION_TOKEN
|
|
* ```
|
|
*
|
|
* With the default prefix of 'AWS', the environment variables would be:
|
|
*
|
|
* AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
|
|
*
|
|
* @!attribute envPrefix
|
|
* @readonly
|
|
* @return [String] the prefix for the environment variable names excluding
|
|
* the separating underscore ('_').
|
|
*/
|
|
AWS.EnvironmentCredentials = AWS.util.inherit(AWS.Credentials, {
|
|
|
|
/**
|
|
* Creates a new EnvironmentCredentials class with a given variable
|
|
* prefix {envPrefix}. For example, to load credentials using the 'AWS'
|
|
* prefix:
|
|
*
|
|
* ```javascript
|
|
* var creds = new AWS.EnvironmentCredentials('AWS');
|
|
* creds.accessKeyId == 'AKID' // from AWS_ACCESS_KEY_ID env var
|
|
* ```
|
|
*
|
|
* @param envPrefix [String] the prefix to use (e.g., 'AWS') for environment
|
|
* variables. Do not include the separating underscore.
|
|
*/
|
|
constructor: function EnvironmentCredentials(envPrefix) {
|
|
AWS.Credentials.call(this);
|
|
this.envPrefix = envPrefix;
|
|
this.get(function() {});
|
|
},
|
|
|
|
/**
|
|
* Loads credentials from the environment using the prefixed
|
|
* environment variables.
|
|
*
|
|
* @callback callback function(err)
|
|
* Called after the (prefixed) ACCESS_KEY_ID, SECRET_ACCESS_KEY, and
|
|
* SESSION_TOKEN environment variables are read. When this callback is
|
|
* called with no error, it means that the credentials information has
|
|
* been loaded into the object (as the `accessKeyId`, `secretAccessKey`,
|
|
* and `sessionToken` properties).
|
|
* @param err [Error] if an error occurred, this value will be filled
|
|
* @see get
|
|
*/
|
|
refresh: function refresh(callback) {
|
|
if (!callback) callback = AWS.util.fn.callback;
|
|
|
|
if (!process || !process.env) {
|
|
callback(AWS.util.error(
|
|
new Error('No process info or environment variables available'),
|
|
{ code: 'EnvironmentCredentialsProviderFailure' }
|
|
));
|
|
return;
|
|
}
|
|
|
|
var keys = ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY', 'SESSION_TOKEN'];
|
|
var values = [];
|
|
|
|
for (var i = 0; i < keys.length; i++) {
|
|
var prefix = '';
|
|
if (this.envPrefix) prefix = this.envPrefix + '_';
|
|
values[i] = process.env[prefix + keys[i]];
|
|
if (!values[i] && keys[i] !== 'SESSION_TOKEN') {
|
|
callback(AWS.util.error(
|
|
new Error('Variable ' + prefix + keys[i] + ' not set.'),
|
|
{ code: 'EnvironmentCredentialsProviderFailure' }
|
|
));
|
|
return;
|
|
}
|
|
}
|
|
|
|
this.expired = false;
|
|
AWS.Credentials.apply(this, values);
|
|
callback();
|
|
}
|
|
|
|
});
|