Skip to content

Commit c610a57

Browse files
authored
Remove footgun from attempting to use application-level ToolkitConnectionManager outside of Gateway (#4851)
1 parent 6afea39 commit c610a57

File tree

10 files changed

+26
-18
lines changed

10 files changed

+26
-18
lines changed

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ToolkitAuthManager.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ interface ToolkitConnectionManager : Disposable {
9999
override fun dispose() {}
100100

101101
companion object {
102-
fun getInstance(project: Project?) = project?.let { it.service<ToolkitConnectionManager>() } ?: service()
102+
fun getInstance(project: Project) = project.service<ToolkitConnectionManager>()
103103
}
104104
}
105105

@@ -140,7 +140,7 @@ fun loginSso(
140140
onSuccess()
141141
}
142142

143-
ToolkitConnectionManager.getInstance(project).switchConnection(connection)
143+
project?.let { ToolkitConnectionManager.getInstance(it).switchConnection(connection) }
144144
return connection
145145
}
146146

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/gettingstarted/SetupAuthenticationDialog.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ interface AuthenticationDialog {
117117
}
118118

119119
class SetupAuthenticationDialog(
120-
private val project: Project?,
120+
private val project: Project,
121121
private val scopes: List<String> = emptyList(),
122122
private val state: SetupAuthenticationDialogState = SetupAuthenticationDialogState(),
123123
private val tabSettings: Map<SetupAuthenticationTabs, AuthenticationTabSettings> = emptyMap(),
@@ -299,8 +299,6 @@ class SetupAuthenticationDialog(
299299

300300
val tokenProvider = connection.getConnectionSettings().tokenProvider
301301

302-
if (project == null) error("Not allowed")
303-
304302
val rolePopup = IdcRolePopup(
305303
project,
306304
state.idcTabState.region.id,

plugins/toolkit/jetbrains-core/resources/META-INF/inactive/plugin-gateway.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,9 @@
1414
<incompatible-with>com.intellij.modules.python</incompatible-with>
1515
<incompatible-with>com.intellij.modules.ultimate</incompatible-with>
1616
<incompatible-with>com.intellij.java</incompatible-with>
17+
18+
<extensions defaultExtensionNs="com.intellij">
19+
<applicationService serviceInterface="software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager"
20+
serviceImplementation="software.aws.toolkits.jetbrains.core.credentials.DefaultToolkitConnectionManager"/>
21+
</extensions>
1722
</idea-plugin>

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,6 @@
190190
<moduleService serviceImplementation="software.aws.toolkits.jetbrains.settings.SyncSettings"/>
191191
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.settings.UpdateLambdaState"/>
192192

193-
<!-- application-level ToolkitConnectionManager is gateway-only -->
194-
<applicationService serviceInterface="software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager"
195-
serviceImplementation="software.aws.toolkits.jetbrains.core.credentials.DefaultToolkitConnectionManager"/>
196-
197193
<projectService serviceImplementation="software.aws.toolkits.jetbrains.services.dynamic.CreateResourceFileStatusHandler"/>
198194

199195
<statusBarWidgetFactory id="AwsSettingsPanel" implementation="software.aws.toolkits.jetbrains.core.credentials.AwsSettingsPanelInstaller"/>

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/core/credentials/ConnectionSettingsMenuBuilder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ class ConnectionSettingsMenuBuilder private constructor() {
246246
override fun actionPerformed(e: AnActionEvent) {
247247
reauthConnectionIfNeeded(e.project, value, isReAuth = true)
248248

249-
ToolkitConnectionManager.getInstance(e.project).switchConnection(value)
249+
e.project?.let { ToolkitConnectionManager.getInstance(it).switchConnection(value) }
250250
}
251251
},
252252

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/core/credentials/sono/CodeCatalystCredentialManager.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,11 @@ class CodeCatalystCredentialManager {
3636
}
3737

3838
fun connection() = (
39-
ToolkitConnectionManager.getInstance(project).activeConnectionForFeature(CodeCatalystConnection.getInstance())
40-
as? AwsBearerTokenConnection
41-
)
39+
project?.let {
40+
ToolkitConnectionManager.getInstance(project)
41+
// app-version only used for gateway
42+
} ?: service<ToolkitConnectionManager>()
43+
).activeConnectionForFeature(CodeCatalystConnection.getInstance()) as? AwsBearerTokenConnection
4244

4345
internal fun provider(conn: AwsBearerTokenConnection) = conn.getConnectionSettings().tokenProvider.delegate as BearerTokenProvider
4446

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/core/gettingstarted/GatewaySetupAuthenticationDialog.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
package software.aws.toolkits.jetbrains.core.gettingstarted
55

6+
import com.intellij.openapi.components.service
67
import com.intellij.openapi.observable.properties.PropertyGraph
78
import com.intellij.openapi.project.Project
89
import com.intellij.openapi.ui.DialogWrapper
@@ -13,6 +14,7 @@ import com.intellij.util.ui.JBUI
1314
import com.intellij.util.ui.components.BorderLayoutPanel
1415
import org.jetbrains.annotations.VisibleForTesting
1516
import software.aws.toolkits.core.region.AwsRegion
17+
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
1618
import software.aws.toolkits.jetbrains.core.credentials.loginSso
1719
import software.aws.toolkits.jetbrains.core.credentials.sono.IDENTITY_CENTER_ROLE_ACCESS_SCOPE
1820
import software.aws.toolkits.jetbrains.core.credentials.sono.SONO_REGION
@@ -164,7 +166,7 @@ class GatewaySetupAuthenticationDialog(
164166
scopes
165167
}
166168

167-
when (selectedTab()) {
169+
val connection = when (selectedTab()) {
168170
GatewaySetupAuthenticationTabs.IDENTITY_CENTER -> {
169171
authType = CredentialSourceId.IamIdentityCenter
170172
val startUrl = state.idcTabState.startUrl
@@ -178,6 +180,8 @@ class GatewaySetupAuthenticationDialog(
178180
}
179181
}
180182

183+
service<ToolkitConnectionManager>().switchConnection(connection)
184+
181185
close(OK_EXIT_CODE)
182186
}
183187

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/core/gettingstarted/ToolkitGettingStartedAuthUtils.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ fun requestCredentialsForCodeCatalyst(
5151
}
5252

5353
else -> {
54+
requireNotNull(project) { "project must not be null when requesting credentials outside of gateway" }
55+
5456
SetupAuthenticationDialog(
5557
project,
5658
state = SetupAuthenticationDialogState().also {

plugins/toolkit/jetbrains-gateway/src/software/aws/toolkits/jetbrains/gateway/CawsConnectionProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.intellij.icons.AllIcons
77
import com.intellij.openapi.application.ApplicationManager
88
import com.intellij.openapi.application.ModalityState
99
import com.intellij.openapi.application.runInEdt
10+
import com.intellij.openapi.components.service
1011
import com.intellij.openapi.progress.ProcessCanceledException
1112
import com.intellij.openapi.progress.ProgressIndicator
1213
import com.intellij.openapi.rd.createNestedDisposable
@@ -107,7 +108,7 @@ class CawsConnectionProvider : GatewayConnectionProvider {
107108
return null
108109
}
109110

110-
val currentConnection = ToolkitConnectionManager.getInstance(null).activeConnectionForFeature(CodeCatalystConnection.getInstance())
111+
val currentConnection = service<ToolkitConnectionManager>().activeConnectionForFeature(CodeCatalystConnection.getInstance())
111112
as AwsBearerTokenConnection?
112113

113114
val ssoSettings = connectionParams.ssoSettings ?: SsoSettings(SONO_URL, SONO_REGION)

plugins/toolkit/jetbrains-gateway/src/software/aws/toolkits/jetbrains/gateway/CawsConnectorViewPanels.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package software.aws.toolkits.jetbrains.gateway
55

66
import com.intellij.ide.browsers.BrowserLauncher
7+
import com.intellij.openapi.components.service
78
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
89
import com.intellij.openapi.observable.properties.PropertyGraph
910
import com.intellij.openapi.rd.createNestedDisposable
@@ -191,9 +192,8 @@ fun cawsWizard(lifetime: Lifetime, settings: CawsSettings = CawsSettings()) = Mu
191192
return@startWithModalProgressAsync
192193
}
193194

194-
val currentConnection = ToolkitConnectionManager.getInstance(
195-
null
196-
).activeConnectionForFeature(CodeCatalystConnection.getInstance()) as AwsBearerTokenConnection?
195+
val currentConnection = service<ToolkitConnectionManager>()
196+
.activeConnectionForFeature(CodeCatalystConnection.getInstance()) as AwsBearerTokenConnection?
197197
?: error("Connection cannot be null")
198198

199199
val parameters = mapOf(

0 commit comments

Comments
 (0)