@@ -39,17 +39,22 @@ class Configuration
3939 self ::OPTION_ROLE_SESSION_NAME => true ,
4040 ];
4141
42+ // Put fallback options into groups to avoid mixing of provided config and environment variables
4243 private const FALLBACK_OPTIONS = [
43- self ::OPTION_REGION => ['AWS_REGION ' , 'AWS_DEFAULT_REGION ' ],
44- self ::OPTION_PROFILE => ['AWS_PROFILE ' , 'AWS_DEFAULT_PROFILE ' ],
45- self ::OPTION_ACCESS_KEY_ID => ['AWS_ACCESS_KEY_ID ' , 'AWS_ACCESS_KEY ' ],
46- self ::OPTION_SECRET_ACCESS_KEY => ['AWS_SECRET_ACCESS_KEY ' , 'AWS_SECRET_KEY ' ],
47- self ::OPTION_SESSION_TOKEN => 'AWS_SESSION_TOKEN ' ,
48- self ::OPTION_SHARED_CREDENTIALS_FILE => 'AWS_SHARED_CREDENTIALS_FILE ' ,
49- self ::OPTION_SHARED_CONFIG_FILE => 'AWS_CONFIG_FILE ' ,
50- self ::OPTION_ROLE_ARN => 'AWS_ROLE_ARN ' ,
51- self ::OPTION_WEB_IDENTITY_TOKEN_FILE => 'AWS_WEB_IDENTITY_TOKEN_FILE ' ,
52- self ::OPTION_ROLE_SESSION_NAME => 'AWS_ROLE_SESSION_NAME ' ,
44+ [self ::OPTION_REGION => ['AWS_REGION ' , 'AWS_DEFAULT_REGION ' ]],
45+ [self ::OPTION_PROFILE => ['AWS_PROFILE ' , 'AWS_DEFAULT_PROFILE ' ]],
46+ [
47+ self ::OPTION_ACCESS_KEY_ID => ['AWS_ACCESS_KEY_ID ' , 'AWS_ACCESS_KEY ' ],
48+ self ::OPTION_SECRET_ACCESS_KEY => ['AWS_SECRET_ACCESS_KEY ' , 'AWS_SECRET_KEY ' ],
49+ self ::OPTION_SESSION_TOKEN => 'AWS_SESSION_TOKEN ' ,
50+ ],
51+ [self ::OPTION_SHARED_CREDENTIALS_FILE => 'AWS_SHARED_CREDENTIALS_FILE ' ],
52+ [self ::OPTION_SHARED_CONFIG_FILE => 'AWS_CONFIG_FILE ' ],
53+ [
54+ self ::OPTION_ROLE_ARN => 'AWS_ROLE_ARN ' ,
55+ self ::OPTION_WEB_IDENTITY_TOKEN_FILE => 'AWS_WEB_IDENTITY_TOKEN_FILE ' ,
56+ self ::OPTION_ROLE_SESSION_NAME => 'AWS_ROLE_SESSION_NAME ' ,
57+ ],
5358 ];
5459
5560 private const DEFAULT_OPTIONS = [
@@ -69,26 +74,32 @@ public static function create(array $options)
6974 throw new InvalidArgument (\sprintf ('Invalid option(s) "%s" passed to "%s::%s". ' , \implode ('", " ' , \array_keys ($ invalidOptions )), __CLASS__ , __METHOD__ ));
7075 }
7176
72- foreach (self ::FALLBACK_OPTIONS as $ option => $ envVariableNames ) {
73- if (isset ($ options [$ option ])) {
74- continue ;
77+ foreach (self ::FALLBACK_OPTIONS as $ fallbackGroup ) {
78+ // prevent mixing env variables with config keys
79+ foreach ($ fallbackGroup as $ option => $ envVariableNames ) {
80+ if (isset ($ options [$ option ])) {
81+ continue 2 ;
82+ }
7583 }
7684
77- foreach ((array ) $ envVariableNames as $ envVariableName ) {
78- if (false !== $ value = \getenv ($ envVariableName )) {
79- $ options [$ option ] = $ value ;
85+ foreach ($ fallbackGroup as $ option => $ envVariableNames ) {
86+ $ envVariableNames = (array ) $ envVariableNames ;
87+ foreach ($ envVariableNames as $ envVariableName ) {
88+ if (false !== $ value = \getenv ($ envVariableName )) {
89+ $ options [$ option ] = $ value ;
8090
81- break ;
91+ break ;
92+ }
8293 }
8394 }
8495 }
8596
86- foreach (self ::DEFAULT_OPTIONS as $ option => $ defaultValue ) {
87- if (isset ($ options [$ option ])) {
97+ foreach (self ::DEFAULT_OPTIONS as $ optionTrigger => $ defaultValue ) {
98+ if (isset ($ options [$ optionTrigger ])) {
8899 continue ;
89100 }
90101
91- $ options [$ option ] = $ defaultValue ;
102+ $ options [$ optionTrigger ] = $ defaultValue ;
92103 }
93104
94105 $ configuration = new Configuration ();
0 commit comments