@@ -2,6 +2,9 @@ var AWS = require('../core');
2
2
var path = require ( 'path' ) ;
3
3
var STS = require ( '../../clients/sts' ) ;
4
4
5
+ var configOptInEnv = 'AWS_SDK_LOAD_CONFIG' ;
6
+ var defaultProfile = 'default' ;
7
+
5
8
/**
6
9
* Represents credentials loaded from shared credentials file
7
10
* (defaulting to ~/.aws/credentials or defined by the
@@ -52,9 +55,9 @@ AWS.SharedIniFileCredentials = AWS.util.inherit(AWS.Credentials, {
52
55
53
56
options = options || { } ;
54
57
55
- this . filename = options . filename || process . env . AWS_CREDENTIAL_PROFILES_FILE ;
56
- this . profile = options . profile || process . env . AWS_PROFILE || 'default' ;
57
- this . disableAssumeRole = ! ! options . disableAssumeRole ;
58
+ this . filename = options . filename ;
59
+ this . profile = options . profile || process . env . AWS_PROFILE || defaultProfile ;
60
+ this . disableAssumeRole = Boolean ( options . disableAssumeRole ) ;
58
61
this . get ( function ( ) { } ) ;
59
62
} ,
60
63
@@ -73,10 +76,18 @@ AWS.SharedIniFileCredentials = AWS.util.inherit(AWS.Credentials, {
73
76
if ( ! callback ) callback = function ( err ) { if ( err ) throw err ; } ;
74
77
try {
75
78
if ( ! this . filename ) this . loadDefaultFilename ( ) ;
79
+ var profile = { } ;
80
+ if ( process . env [ configOptInEnv ] ) {
81
+ var configProfileName = this . profile === defaultProfile ?
82
+ 'default' : 'profile ' + this . profile ;
83
+ var config = AWS . util . ini
84
+ . parse ( AWS . util . readFileSync ( this . configFilename ) ) ;
85
+ profile = AWS . util . merge ( profile , config [ configProfileName ] ) ;
86
+ }
76
87
var creds = AWS . util . ini . parse ( AWS . util . readFileSync ( this . filename ) ) ;
77
- var profile = creds [ this . profile ] ;
88
+ profile = AWS . util . merge ( profile , creds [ this . profile ] ) ;
78
89
79
- if ( typeof profile !== 'object' ) {
90
+ if ( Object . keys ( profile ) . length === 0 ) {
80
91
throw AWS . util . error (
81
92
new Error ( 'Profile ' + this . profile + ' not found in ' + this . filename ) ,
82
93
{ code : 'SharedIniFileCredentialsProviderFailure' }
@@ -193,6 +204,7 @@ AWS.SharedIniFileCredentials = AWS.util.inherit(AWS.Credentials, {
193
204
*/
194
205
loadDefaultFilename : function loadDefaultFilename ( ) {
195
206
var env = process . env ;
207
+
196
208
var home = env . HOME ||
197
209
env . USERPROFILE ||
198
210
( env . HOMEPATH ? ( ( env . HOMEDRIVE || 'C:/' ) + env . HOMEPATH ) : null ) ;
@@ -204,5 +216,11 @@ AWS.SharedIniFileCredentials = AWS.util.inherit(AWS.Credentials, {
204
216
}
205
217
206
218
this . filename = path . join ( home , '.aws' , 'credentials' ) ;
219
+
220
+ if ( env [ configOptInEnv ] ) {
221
+ this . filename = env . AWS_SHARED_CREDENTIALS_FILE || this . filename ;
222
+ this . configFilename = env . AWS_CONFIG_FILE ||
223
+ path . join ( home , '.aws' , 'config' ) ;
224
+ }
207
225
}
208
226
} ) ;
0 commit comments