Skip to content

Commit fc5efc0

Browse files
committed
Emit metric on OAuth failure
1 parent 0b83303 commit fc5efc0

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ import software.aws.toolkits.jetbrains.core.credentials.sso.PKCEAuthorizationGra
3232
import software.aws.toolkits.jetbrains.core.credentials.sso.PKCEClientRegistration
3333
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.buildUnmanagedSsoOidcClient
3434
import software.aws.toolkits.resources.AwsCoreBundle
35+
import software.aws.toolkits.telemetry.AuthType
36+
import software.aws.toolkits.telemetry.AwsTelemetry
37+
import software.aws.toolkits.telemetry.MetricResult
3538
import java.math.BigInteger
3639
import java.time.Instant
3740
import java.util.Base64
@@ -67,6 +70,8 @@ class ToolkitOAuthService : OAuthServiceBase<AccessToken>() {
6770
override fun handleOAuthServerCallback(path: String, parameters: Map<String, List<String>>): OAuthService.OAuthResult<AccessToken>? {
6871
val request = currentRequest.get() ?: return OAuthService.OAuthResult(null, false)
6972
val toolkitRequest = request.request as? ToolkitOAuthRequest ?: return OAuthService.OAuthResult(request.request, false)
73+
toolkitRequest.error = OAuthError(error = "error", errorDescription = "errorDescription")
74+
return OAuthService.OAuthResult(toolkitRequest, false)
7075

7176
val callbackState = parameters["state"]?.firstOrNull()
7277
if (toolkitRequest.csrfToken != callbackState) {
@@ -189,13 +194,23 @@ internal class ToolkitOAuthCallbackHandler : OAuthCallbackHandlerBase() {
189194
"scopes" to ApplicationNamesInfo.getInstance().fullProductName
190195
)
191196
} else {
192-
val (error, errorDescription) = (oAuthResult.request as? ToolkitOAuthRequest)?.error ?: OAuthError(null, null)
197+
val toolkitRequest = (oAuthResult.request as? ToolkitOAuthRequest)
198+
val (error, errorDescription) = toolkitRequest?.error ?: OAuthError(null, null)
193199
val errorString = if (error != null && errorDescription != null) {
194200
"$error: $errorDescription"
195201
} else {
196202
errorDescription ?: error ?: AwsCoreBundle.message("general.unknown_error")
197203
}
198204

205+
AwsTelemetry.loginWithBrowser(
206+
project = null,
207+
credentialStartUrl = toolkitRequest?.registration?.issuerUrl,
208+
result = MetricResult.Failed,
209+
reason = error,
210+
reasonDesc = errorDescription,
211+
authType = AuthType.PKCE
212+
)
213+
199214
mapOf(
200215
"error" to errorString
201216
)

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/webview/LoginBrowser.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import software.aws.toolkits.jetbrains.core.credentials.reauthConnectionIfNeeded
3636
import software.aws.toolkits.jetbrains.core.credentials.sono.CODECATALYST_SCOPES
3737
import software.aws.toolkits.jetbrains.core.credentials.sono.IDENTITY_CENTER_ROLE_ACCESS_SCOPE
3838
import software.aws.toolkits.jetbrains.core.credentials.sono.Q_SCOPES
39+
import software.aws.toolkits.jetbrains.core.credentials.sono.SONO_REGION
3940
import software.aws.toolkits.jetbrains.core.credentials.sono.SONO_URL
4041
import software.aws.toolkits.jetbrains.core.credentials.sso.PendingAuthorization
4142
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.InteractiveBearerTokenProvider
@@ -197,7 +198,7 @@ abstract class LoginBrowser(
197198
reason = e.message,
198199
credentialSourceId = CredentialSourceId.AwsId,
199200
isReAuth = isReauth,
200-
authType = getAuthType()
201+
authType = getAuthType(SONO_REGION)
201202
)
202203
AuthTelemetry.addConnection(
203204
result = Result.Failed,
@@ -217,7 +218,7 @@ abstract class LoginBrowser(
217218
result = Result.Succeeded,
218219
credentialSourceId = CredentialSourceId.AwsId,
219220
isReAuth = isReauth,
220-
authType = getAuthType()
221+
authType = getAuthType(SONO_REGION)
221222
)
222223
AuthTelemetry.addConnection(
223224
result = Result.Succeeded,

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/webview/WebviewTelemetryUtils.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import software.aws.toolkits.jetbrains.core.credentials.sono.Q_SCOPES
99
import software.aws.toolkits.telemetry.AuthType
1010
import software.aws.toolkits.telemetry.FeatureId
1111

12-
fun getAuthType(region: String = "us-east-1"): AuthType {
12+
fun getAuthType(region: String): AuthType {
1313
val isCommercialRegion = !region.startsWith("us-gov") && !region.startsWith("us-iso") && !region.startsWith("cn")
1414
if (!Registry.`is`("aws.dev.useDAG") && isCommercialRegion) {
1515
return AuthType.PKCE

0 commit comments

Comments
 (0)