@@ -16,6 +16,7 @@ import software.aws.toolkits.core.utils.getLogger
16
16
import software.aws.toolkits.core.utils.tryOrNull
17
17
import software.aws.toolkits.jetbrains.core.credentials.AwsConnectionManager
18
18
import software.aws.toolkits.jetbrains.core.credentials.CredentialManager
19
+ import software.aws.toolkits.jetbrains.core.execution.AwsCredentialInjectionOptions.Companion.DEFAULT_OPTIONS
19
20
import software.aws.toolkits.jetbrains.core.region.AwsRegionProvider
20
21
import software.aws.toolkits.resources.message
21
22
import software.aws.toolkits.telemetry.AwsTelemetry
@@ -24,26 +25,11 @@ import software.aws.toolkits.telemetry.Result.Succeeded
24
25
25
26
class AwsConnectionRunConfigurationExtension <T : RunConfigurationBase <* >> {
26
27
fun addEnvironmentVariables (configuration : T , environment : MutableMap <String , String >, runtimeString : () -> String? = { null }) {
27
- val regionProvider = AwsRegionProvider .getInstance()
28
- val credentialManager = CredentialManager .getInstance()
29
- val credentialConfiguration = configuration.getCopyableUserData(AWS_CONNECTION_RUN_CONFIGURATION_KEY ) ? : return
30
-
31
28
try {
32
- val connection = if (credentialConfiguration.useCurrentConnection) {
33
- AwsConnectionManager .getInstance(configuration.project).connectionSettings() ? : throw RuntimeException (message(" configure.toolkit" ))
34
- } else {
35
- val region = credentialConfiguration.region?.let {
36
- regionProvider.allRegions()[it]
37
- } ? : throw IllegalStateException (message(" configure.validate.no_region_specified" ))
38
-
39
- val credentialProviderId = credentialConfiguration.credential ? : throw IllegalStateException (message(" aws.notification.credentials_missing" ))
40
-
41
- val credentialProvider = credentialManager.getCredentialIdentifierById(credentialProviderId)?.let {
42
- credentialManager.getAwsCredentialProvider(it, region)
43
- } ? : throw RuntimeException (message(" aws.notification.credentials_missing" ))
29
+ val credentialConfiguration = credentialConfiguration(configuration) ? : return
30
+ if (credentialConfiguration == DEFAULT_OPTIONS ) return
44
31
45
- ConnectionSettings (credentialProvider, region)
46
- }
32
+ val connection = getConnection(configuration, credentialConfiguration)
47
33
connection.region.mergeWithExistingEnvironmentVariables(environment)
48
34
connection.credentials.resolveCredentials().mergeWithExistingEnvironmentVariables(environment)
49
35
AwsTelemetry .injectCredentials(configuration.project, result = Succeeded , runtimeString = tryOrNull { runtimeString() })
@@ -53,6 +39,13 @@ class AwsConnectionRunConfigurationExtension<T : RunConfigurationBase<*>> {
53
39
}
54
40
}
55
41
42
+ fun validateConfiguration (runConfiguration : T , isExecution : Boolean ) {
43
+ val credentialConfiguration = runConfiguration.getCopyableUserData(AWS_CONNECTION_RUN_CONFIGURATION_KEY ) ? : return
44
+ if (credentialConfiguration == DEFAULT_OPTIONS ) return
45
+
46
+ getConnection(runConfiguration, credentialConfiguration)
47
+ }
48
+
56
49
fun readExternal (runConfiguration : T , element : Element ) {
57
50
runConfiguration.putCopyableUserData(
58
51
AWS_CONNECTION_RUN_CONFIGURATION_KEY ,
@@ -69,6 +62,29 @@ class AwsConnectionRunConfigurationExtension<T : RunConfigurationBase<*>> {
69
62
}
70
63
}
71
64
65
+ private fun credentialConfiguration (configuration : T ) = configuration.getCopyableUserData(AWS_CONNECTION_RUN_CONFIGURATION_KEY )
66
+
67
+ private fun getConnection (configuration : T , credentialConfiguration : AwsCredentialInjectionOptions ): ConnectionSettings {
68
+ val regionProvider = AwsRegionProvider .getInstance()
69
+ val credentialManager = CredentialManager .getInstance()
70
+
71
+ return if (credentialConfiguration.useCurrentConnection) {
72
+ AwsConnectionManager .getInstance(configuration.project).connectionSettings() ? : throw RuntimeException (message(" configure.toolkit" ))
73
+ } else {
74
+ val region = credentialConfiguration.region?.let {
75
+ regionProvider.allRegions()[it]
76
+ } ? : throw IllegalStateException (message(" configure.validate.no_region_specified" ))
77
+
78
+ val credentialProviderId = credentialConfiguration.credential ? : throw IllegalStateException (message(" aws.notification.credentials_missing" ))
79
+
80
+ val credentialProvider = credentialManager.getCredentialIdentifierById(credentialProviderId)?.let {
81
+ credentialManager.getAwsCredentialProvider(it, region)
82
+ } ? : throw RuntimeException (message(" aws.notification.credentials_missing" ))
83
+
84
+ ConnectionSettings (credentialProvider, region)
85
+ }
86
+ }
87
+
72
88
private companion object {
73
89
val LOG = getLogger<AwsConnectionRunConfigurationExtension <* >>()
74
90
}
@@ -88,12 +104,13 @@ val AWS_CONNECTION_RUN_CONFIGURATION_KEY =
88
104
" aws.toolkit.runConfigurationConnection"
89
105
)
90
106
91
- class AwsCredentialInjectionOptions {
92
- var useCurrentConnection: Boolean = false
93
- var region: String? = null
107
+ data class AwsCredentialInjectionOptions (
108
+ var useCurrentConnection : Boolean = false ,
109
+ var region : String? = null ,
94
110
var credential : String? = null
95
-
111
+ ) {
96
112
companion object {
97
113
operator fun invoke (block : AwsCredentialInjectionOptions .() -> Unit ) = AwsCredentialInjectionOptions ().apply (block)
114
+ val DEFAULT_OPTIONS by lazy { AwsCredentialInjectionOptions () }
98
115
}
99
116
}
0 commit comments