Skip to content

Commit

Permalink
webview-ui: remove confirmUserCode dialog (#1858)
Browse files Browse the repository at this point in the history
  • Loading branch information
Will-ShaoHua authored Apr 5, 2024
1 parent 3056d22 commit 7e4a31e
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ import software.aws.toolkits.jetbrains.core.region.AwsRegionProvider
import software.aws.toolkits.jetbrains.isDeveloperMode
import software.aws.toolkits.jetbrains.services.amazonq.util.createBrowser
import software.aws.toolkits.jetbrains.services.amazonq.webview.AssetResourceHandler
import software.aws.toolkits.telemetry.AwsTelemetry
import software.aws.toolkits.telemetry.CredentialType
import software.aws.toolkits.telemetry.Result
import java.awt.event.ActionListener
import java.io.IOException
import java.util.function.Function
Expand Down Expand Up @@ -177,6 +180,12 @@ class WebviewBrowser(val project: Project) {
}
}

"cancelLogin" -> {
println("cancel login........")
// TODO: BearerToken vs. SsoProfile
AwsTelemetry.loginWithBrowser(project = null, result = Result.Cancelled, credentialType = CredentialType.BearerToken)
}

else -> {
println("received unknown command from the browser: $command")
}
Expand Down
5 changes: 5 additions & 0 deletions plugins/amazonq/q-webview/src/ideClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,9 @@ export class IdeClient {
reset() {
this.store.commit('reset')
}

cancelLogin(): void {
this.reset()
window.ideApi.postMessage({ command: 'cancelLogin' })
}
}
1 change: 1 addition & 0 deletions plugins/amazonq/q-webview/src/q-ui/components/login.vue
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ export default defineComponent({
this.mutateStage('START')
},
handleCancelButton() {
window.ideClient.cancelLogin()
this.mutateStage('START')
},
changeTheme(darkMode: boolean) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package software.aws.toolkits.jetbrains.core.credentials.sso

import com.intellij.ide.BrowserUtil
import com.intellij.openapi.progress.ProcessCanceledException
import com.intellij.ui.jcef.JBCefApp
import software.aws.toolkits.jetbrains.core.credentials.sono.SONO_URL
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.ConfirmUserCodeLoginDialog
import software.aws.toolkits.jetbrains.utils.computeOnEdt
Expand All @@ -19,13 +20,31 @@ interface SsoLoginCallbackProvider {
}

class DefaultSsoLoginCallbackProvider : SsoLoginCallbackProvider {
override fun getProvider(ssoUrl: String): SsoLoginCallback = when (ssoUrl) {
SONO_URL -> BearerTokenPrompt
else -> SsoPrompt
override fun getProvider(ssoUrl: String): SsoLoginCallback = when {
JBCefApp.isSupported() -> {
if (ssoUrl == SONO_URL) {
BearerTokenPromptWithBrowserSupport
} else {
SsoPromptWithBrowserSupport
}
}
ssoUrl == SONO_URL -> DefaultBearerTokenPrompt
else -> DefaultSsoPrompt
}
}

interface SsoPrompt : SsoLoginCallback {
override fun tokenRetrieved() {
AwsTelemetry.loginWithBrowser(project = null, result = Result.Succeeded, credentialType = CredentialType.SsoProfile)
}

override fun tokenRetrievalFailure(e: Exception) {
e.notifyError(message("credentials.sso.login.failed"))
AwsTelemetry.loginWithBrowser(project = null, result = Result.Failed, credentialType = CredentialType.SsoProfile)
}
}

object SsoPrompt : SsoLoginCallback {
object DefaultSsoPrompt : SsoPrompt {
override fun tokenPending(authorization: Authorization) {
computeOnEdt {
val result = ConfirmUserCodeLoginDialog(
Expand All @@ -42,18 +61,27 @@ object SsoPrompt : SsoLoginCallback {
}
}
}
}

object SsoPromptWithBrowserSupport : SsoPrompt {
override fun tokenPending(authorization: Authorization) {
computeOnEdt {
BrowserUtil.browse(authorization.verificationUriComplete)
}
}
}

interface BearerTokenPrompt : SsoLoginCallback {
override fun tokenRetrieved() {
AwsTelemetry.loginWithBrowser(project = null, result = Result.Succeeded, credentialType = CredentialType.SsoProfile)
AwsTelemetry.loginWithBrowser(project = null, result = Result.Succeeded, credentialType = CredentialType.BearerToken)
}

override fun tokenRetrievalFailure(e: Exception) {
e.notifyError(message("credentials.sso.login.failed"))
AwsTelemetry.loginWithBrowser(project = null, result = Result.Failed, credentialType = CredentialType.SsoProfile)
AwsTelemetry.loginWithBrowser(project = null, result = Result.Failed, credentialType = CredentialType.BearerToken)
}
}

object BearerTokenPrompt : SsoLoginCallback {
object DefaultBearerTokenPrompt : BearerTokenPrompt {
override fun tokenPending(authorization: Authorization) {
computeOnEdt {
val codeCopied = ConfirmUserCodeLoginDialog(
Expand All @@ -69,12 +97,12 @@ object BearerTokenPrompt : SsoLoginCallback {
}
}
}
}

override fun tokenRetrieved() {
AwsTelemetry.loginWithBrowser(project = null, result = Result.Succeeded, credentialType = CredentialType.BearerToken)
}

override fun tokenRetrievalFailure(e: Exception) {
AwsTelemetry.loginWithBrowser(project = null, result = Result.Failed, credentialType = CredentialType.BearerToken)
object BearerTokenPromptWithBrowserSupport : BearerTokenPrompt {
override fun tokenPending(authorization: Authorization) {
computeOnEdt {
BrowserUtil.browse(authorization.verificationUriComplete)
}
}
}

0 comments on commit 7e4a31e

Please sign in to comment.