Skip to content

Commit dc9ec7f

Browse files
authored
Switch to newly added profile in Explorer (#3660)
* reload profiles * only change on 1st credential
1 parent f7fab32 commit dc9ec7f

File tree

4 files changed

+36
-0
lines changed

4 files changed

+36
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "feature",
3+
"description" : "Explorer is automatically refreshed with new credentials when they are added to credential file."
4+
}

jetbrains-core/resources/META-INF/plugin.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ with what features/services are supported.
119119
topic="software.aws.toolkits.jetbrains.core.credentials.ConnectionSettingsStateChangeNotifier"/>
120120
<listener class="software.aws.toolkits.jetbrains.services.dynamic.DynamicResourceStateChangedNotificationHandler"
121121
topic="software.aws.toolkits.jetbrains.services.dynamic.DynamicResourceStateMutationHandler"/>
122+
<listener class="software.aws.toolkits.jetbrains.core.credentials.RefreshExplorerCredentials"
123+
topic="software.aws.toolkits.jetbrains.core.credentials.ChangeConnectionSettingIfValid"/>
122124
<listener class="software.aws.toolkits.jetbrains.services.dynamic.SuggestEditExperimentListener"
123125
topic="com.intellij.openapi.fileEditor.FileEditorManagerListener"/>
124126
<listener class="software.aws.toolkits.jetbrains.services.dynamic.UpdateOnExperimentState"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.jetbrains.core.credentials
5+
6+
import com.intellij.openapi.project.Project
7+
import software.aws.toolkits.jetbrains.core.credentials.profiles.ProfileCredentialsIdentifier
8+
9+
class RefreshExplorerCredentials(val project: Project) : ChangeConnectionSettingIfValid {
10+
11+
override fun changeConnection(profile: ProfileCredentialsIdentifier) {
12+
super.changeConnection(profile)
13+
AwsConnectionManager.getInstance(project).changeCredentialProvider(profile)
14+
}
15+
}
16+
17+
interface ChangeConnectionSettingIfValid {
18+
fun changeConnection(profile: ProfileCredentialsIdentifier) {}
19+
}

jetbrains-core/src/software/aws/toolkits/jetbrains/core/credentials/profiles/ProfileCredentialProviderFactory.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ package software.aws.toolkits.jetbrains.core.credentials.profiles
55

66
import com.intellij.openapi.actionSystem.ActionManager
77
import com.intellij.openapi.actionSystem.AnActionEvent
8+
import com.intellij.openapi.application.ApplicationManager
89
import com.intellij.openapi.project.DumbAwareAction
10+
import com.intellij.util.messages.Topic
911
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials
1012
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider
1113
import software.amazon.awssdk.auth.credentials.AwsCredentialsProviderChain
@@ -27,6 +29,7 @@ import software.aws.toolkits.core.credentials.CredentialsChangeListener
2729
import software.aws.toolkits.core.region.AwsRegion
2830
import software.aws.toolkits.core.utils.getLogger
2931
import software.aws.toolkits.core.utils.warn
32+
import software.aws.toolkits.jetbrains.core.credentials.ChangeConnectionSettingIfValid
3033
import software.aws.toolkits.jetbrains.core.credentials.MfaRequiredInteractiveCredentials
3134
import software.aws.toolkits.jetbrains.core.credentials.SsoRequiredInteractiveCredentials
3235
import software.aws.toolkits.jetbrains.core.credentials.ToolkitCredentialProcessProvider
@@ -137,6 +140,9 @@ class ProfileCredentialProviderFactory(private val ssoCache: SsoCache = diskCach
137140
credentialLoadCallback(CredentialsChangeEvent(profilesAdded, profilesModified, profilesRemoved))
138141

139142
notifyUserOfResult(newProfiles, initialLoad)
143+
if (profilesAdded.isNotEmpty() && newProfiles.validProfiles.size == 1) {
144+
ApplicationManager.getApplication().messageBus.syncPublisher(NEW_PROFILE_ADDED).changeConnection(profilesAdded.first())
145+
}
140146
}
141147

142148
private fun notifyUserOfLoadFailure(e: Exception) {
@@ -306,6 +312,11 @@ class ProfileCredentialProviderFactory(private val ssoCache: SsoCache = diskCach
306312

307313
companion object {
308314
private val LOG = getLogger<ProfileCredentialProviderFactory>()
315+
316+
val NEW_PROFILE_ADDED: Topic<ChangeConnectionSettingIfValid> = Topic.create(
317+
"Change to newly added profile",
318+
ChangeConnectionSettingIfValid::class.java
319+
)
309320
}
310321
}
311322

0 commit comments

Comments
 (0)