Skip to content

Commit c989166

Browse files
rlimanodnyab
andauthored
Always show device code prompt when performing device code grant through a legacy SSO configuration (aws#4522)
* Always show device code prompt when performing device code grant through a legacy SSO configuration Resolves regression from prior behavior * tst --------- Co-authored-by: manodnyab <66754471+manodnyab@users.noreply.github.com>
1 parent cfdf936 commit c989166

File tree

6 files changed

+24
-21
lines changed

6 files changed

+24
-21
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Always show device code prompt when performing device code grant through a legacy SSO configuration"
4+
}

plugins/core/jetbrains-community/src/migration/software/aws/toolkits/jetbrains/core/credentials/sso/SsoLoginCallbackProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ package migration.software.aws.toolkits.jetbrains.core.credentials.sso
66
import software.aws.toolkits.jetbrains.core.credentials.sso.SsoLoginCallback
77

88
interface SsoLoginCallbackProvider {
9-
fun getProvider(ssoUrl: String): SsoLoginCallback
9+
fun getProvider(isAlwaysShowDeviceCode: Boolean, ssoUrl: String): SsoLoginCallback
1010
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ class ProfileLegacySsoProvider(ssoCache: SsoCache, profile: Profile) : AwsCreden
3333
profile.requiredProperty(ProfileProperty.SSO_START_URL),
3434
ssoRegion,
3535
ssoCache,
36-
ssoOidcClient
36+
ssoOidcClient,
37+
isAlwaysShowDeviceCode = true,
3738
)
3839

3940
credentialsProvider = SsoCredentialProvider(

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class SsoAccessTokenProvider(
4848
private val ssoRegion: String,
4949
private val cache: SsoCache,
5050
private val client: SsoOidcClient,
51+
private val isAlwaysShowDeviceCode: Boolean = false,
5152
private val scopes: List<String> = emptyList(),
5253
private val clock: Clock = Clock.systemUTC()
5354
) : SdkTokenProvider {
@@ -207,7 +208,7 @@ class SsoAccessTokenProvider(
207208

208209
@Deprecated("Device authorization grant flow is deprecated")
209210
private fun pollForDAGToken(): AccessToken {
210-
val onPendingToken = service<SsoLoginCallbackProvider>().getProvider(ssoUrl)
211+
val onPendingToken = service<SsoLoginCallbackProvider>().getProvider(isAlwaysShowDeviceCode, ssoUrl)
211212
val progressIndicator = progressIndicator()
212213
val registration = registerDAGClient()
213214
val authorization = authorizeDAGClient(registration)

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

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,21 @@ import software.aws.toolkits.telemetry.Result
1818
typealias SsoLoginCallbackProvider = migration.software.aws.toolkits.jetbrains.core.credentials.sso.SsoLoginCallbackProvider
1919

2020
class DefaultSsoLoginCallbackProvider : SsoLoginCallbackProvider {
21-
override fun getProvider(ssoUrl: String): SsoLoginCallback = when {
22-
JBCefApp.isSupported() -> {
23-
if (ssoUrl == SONO_URL) {
24-
BearerTokenPromptWithBrowserSupport
25-
} else {
26-
SsoPromptWithBrowserSupport
27-
}
21+
override fun getProvider(isAlwaysShowDeviceCode: Boolean, ssoUrl: String): SsoLoginCallback {
22+
val deviceCodeProvider = if (ssoUrl == SONO_URL) {
23+
DefaultBearerTokenPrompt
24+
} else {
25+
DefaultSsoPrompt
26+
}
27+
28+
if (isAlwaysShowDeviceCode) {
29+
return deviceCodeProvider
30+
}
31+
32+
return when {
33+
JBCefApp.isSupported() -> SsoPromptWithBrowserSupport
34+
else -> deviceCodeProvider
2835
}
29-
ssoUrl == SONO_URL -> DefaultBearerTokenPrompt
30-
else -> DefaultSsoPrompt
3136
}
3237
}
3338

@@ -96,11 +101,3 @@ object DefaultBearerTokenPrompt : BearerTokenPrompt {
96101
}
97102
}
98103
}
99-
100-
object BearerTokenPromptWithBrowserSupport : BearerTokenPrompt {
101-
override fun tokenPending(authorization: Authorization) {
102-
computeOnEdt {
103-
BrowserUtil.browse(authorization.verificationUriComplete)
104-
}
105-
}
106-
}

plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/core/credentials/sso/MockSsoLoginCallbackProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ internal class MockSsoLoginCallbackProvider : SsoLoginCallbackProvider {
2828
override fun tokenRetrievalFailure(e: Exception) {}
2929
}
3030

31-
override fun getProvider(ssoUrl: String): SsoLoginCallback =
31+
override fun getProvider(isAlwaysShowDeviceCode: Boolean, ssoUrl: String): SsoLoginCallback =
3232
provider ?: ErrorSsoLoginCallback
3333

3434
companion object {

0 commit comments

Comments
 (0)