Skip to content

Commit 95c92cf

Browse files
committed
Avoid incorrect reauth
1 parent 640c686 commit 95c92cf

File tree

2 files changed

+23
-3
lines changed
  • plugins
    • amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq
    • core/jetbrains-community/src/software/aws/toolkits/jetbrains/utils

2 files changed

+23
-3
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QLoginWebview.kt

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import com.intellij.ui.dsl.builder.Align
1717
import com.intellij.ui.dsl.builder.panel
1818
import com.intellij.ui.jcef.JBCefJSQuery
1919
import org.cef.CefApp
20+
import software.amazon.awssdk.services.ssooidc.model.SsoOidcException
2021
import software.aws.toolkits.core.utils.error
2122
import software.aws.toolkits.core.utils.getLogger
2223
import software.aws.toolkits.core.utils.warn
@@ -27,6 +28,8 @@ import software.aws.toolkits.jetbrains.core.credentials.actions.SsoLogoutAction
2728
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
2829
import software.aws.toolkits.jetbrains.core.credentials.sono.Q_SCOPES
2930
import software.aws.toolkits.jetbrains.core.credentials.sono.isSono
31+
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProvider
32+
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProviderListener
3033
import software.aws.toolkits.jetbrains.core.region.AwsRegionProvider
3134
import software.aws.toolkits.jetbrains.core.webview.BrowserMessage
3235
import software.aws.toolkits.jetbrains.core.webview.BrowserState
@@ -243,12 +246,27 @@ class QWebviewBrowser(val project: Project, private val parentDisposable: Dispos
243246
writeValueAsString(it)
244247
}
245248

246-
// TODO: pass "REAUTH" if connection expires
247-
val stage = if (isQExpired(project)) {
248-
"REAUTH"
249+
val stage = if(isQExpired(project)) {
250+
try {
251+
val conn = ToolkitConnectionManager.getInstance(project).activeConnectionForFeature(QConnection.getInstance()) as? AwsBearerTokenConnection
252+
val provider = conn?.getConnectionSettings()?.tokenProvider
253+
val p = provider?.delegate as? BearerTokenProvider
254+
p?.resolveToken()
255+
provider?.id?.let { BearerTokenProviderListener.notifyCredUpdate(it) }
256+
return
257+
} catch (e: SsoOidcException) {
258+
"REAUTH"
259+
}
260+
249261
} else {
250262
"START"
251263
}
264+
// TODO: pass "REAUTH" if connection expires
265+
// val stage = if (isQExpired(project)) {
266+
// "REAUTH"
267+
// } else {
268+
// "START"
269+
// }
252270

253271
val jsonData = """
254272
{

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/utils/FunctionUtils.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.intellij.openapi.project.Project
77
import kotlinx.coroutines.delay
88
import kotlinx.coroutines.withTimeoutOrNull
99
import org.slf4j.LoggerFactory
10+
import software.amazon.awssdk.services.ssooidc.model.SsoOidcException
1011
import software.aws.toolkits.core.utils.debug
1112
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
1213
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
@@ -56,6 +57,7 @@ fun isQExpired(project: Project): Boolean {
5657
LOG.debug {
5758
"qConnectionState: $qState; cwConnectionState: $cwState"
5859
}
60+
5961
return qState == BearerTokenAuthState.NEEDS_REFRESH || cwState == BearerTokenAuthState.NEEDS_REFRESH
6062
}
6163

0 commit comments

Comments
 (0)