Skip to content

Commit 6570e20

Browse files
committed
rebase
1 parent e676cea commit 6570e20

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

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

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import com.intellij.openapi.components.service
88
import com.intellij.openapi.extensions.ExtensionPointName
99
import com.intellij.openapi.progress.ProcessCanceledException
1010
import com.intellij.openapi.project.Project
11+
import kotlinx.coroutines.delay
12+
import kotlinx.coroutines.runBlocking
1113
import migration.software.aws.toolkits.jetbrains.services.telemetry.TelemetryService
1214
import software.amazon.awssdk.services.ssooidc.model.SsoOidcException
1315
import software.aws.toolkits.core.ClientConnectionSettings
@@ -25,13 +27,17 @@ import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenAu
2527
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProvider
2628
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProviderListener
2729
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.InteractiveBearerTokenProvider
30+
import software.aws.toolkits.jetbrains.utils.notifyInfo
2831
import software.aws.toolkits.jetbrains.utils.runUnderProgressIfNeeded
2932
import software.aws.toolkits.resources.AwsCoreBundle
3033
import software.aws.toolkits.telemetry.AuthTelemetry
34+
import software.aws.toolkits.resources.AwsCoreBundle.message
3135
import software.aws.toolkits.telemetry.CredentialSourceId
3236
import software.aws.toolkits.telemetry.CredentialType
3337
import software.aws.toolkits.telemetry.Result
38+
import java.net.UnknownHostException
3439
import java.time.Instant
40+
import kotlin.math.min
3541

3642
sealed interface ToolkitConnection {
3743
val id: String
@@ -310,7 +316,7 @@ fun maybeReauthProviderIfNeeded(
310316
onReauthRequired: (SsoOidcException?) -> Any,
311317
): Boolean {
312318
val state = tokenProvider.state()
313-
when (state) {
319+
return when (state) {
314320
BearerTokenAuthState.NOT_AUTHENTICATED -> {
315321
getLogger<ToolkitAuthManager>().info { "Token provider NOT_AUTHENTICATED, requesting login" }
316322
onReauthRequired(null)
@@ -323,13 +329,36 @@ fun maybeReauthProviderIfNeeded(
323329
return runUnderProgressIfNeeded(project, AwsCoreBundle.message("credentials.refreshing"), true) {
324330
tokenProvider.resolveToken()
325331
BearerTokenProviderListener.notifyCredUpdate(tokenProvider.id)
332+
hasNotifiedNetworkErrorOnce = false
326333
return@runUnderProgressIfNeeded false
327334
}
328335
} catch (e: SsoOidcException) {
329336
AuthTelemetry.sourceOfRefresh(authRefreshSource = reauthSource.toString())
330337
getLogger<ToolkitAuthManager>().warn(e) { "Redriving bearer token login flow since token could not be refreshed" }
331338
onReauthRequired(e)
332339
return true
340+
} catch (e: Exception) {
341+
when {
342+
e is SsoOidcException -> {
343+
getLogger<ToolkitAuthManager>().warn(e) { "Redriving bearer token login flow since token could not be refreshed" }
344+
onReauthRequired(e)
345+
return true
346+
}
347+
348+
e is UnknownHostException || e.message?.contains("Unable to execute HTTP request") == true -> {
349+
getLogger<ToolkitAuthManager>().error("Failed to refresh token", e)
350+
if (!hasNotifiedNetworkErrorOnce) {
351+
hasNotifiedNetworkErrorOnce = true
352+
notifyInfo(
353+
message("general.auth.network.error"),
354+
message("general.auth.network.error.message"),
355+
project
356+
)
357+
}
358+
return false
359+
}
360+
else -> {return false}
361+
}
333362
}
334363
}
335364

@@ -410,6 +439,8 @@ private fun recordAddConnection(
410439
}
411440
}
412441

442+
private var hasNotifiedNetworkErrorOnce = false
443+
413444
data class ConnectionMetadata(
414445
val sourceId: String? = null,
415446
)

plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,6 +1240,8 @@ gateway.connection.workflow.step_skipped=Step skipped
12401240
gateway.connection.workflow.step_successful=\nStep completed successfully\n
12411241
general.add.another=Add another
12421242
general.auth.reauthenticate=Reauthenticate
1243+
general.auth.network.error=Network Error
1244+
general.auth.network.error.message=Failed to update connection due to networking issues
12431245
general.cancel=Cancel
12441246
general.close_button=Close
12451247
general.configure_button=Configure

0 commit comments

Comments
 (0)