in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/gettingstarted/GettingStartedAuthUtils.kt [122:227]
fun requestCredentialsForQ(
project: Project,
initialConnectionCount: Long = getConnectionCount(),
initialAuthConnections: String = getEnabledConnections(
project
),
isFirstInstance: Boolean = false,
connectionInitiatedFromExplorer: Boolean = false,
connectionInitiatedFromQChatPanel: Boolean = false,
isReauth: Boolean,
): Boolean {
// try to scope upgrade if we have a codewhisperer connection
val codeWhispererConnection = ToolkitConnectionManager.getInstance(project).activeConnectionForFeature(CodeWhispererConnection.getInstance())
if (codeWhispererConnection is LegacyManagedBearerSsoConnection) {
codeWhispererConnection.let {
return tryOrNull {
loginSso(project, it.startUrl, it.region, Q_SCOPES)
} != null
}
}
val dialogState = SetupAuthenticationDialogState().apply {
(codeWhispererConnection as? ProfileSsoManagedBearerSsoConnection)?.let { connection ->
idcTabState.apply {
profileName = connection.configSessionName
startUrl = connection.startUrl
region = AwsRegionProvider.getInstance().let { it.get(connection.region) ?: it.defaultRegion() }
}
// default selected tab is IdC, but just in case
selectedTab.set(SetupAuthenticationTabs.IDENTITY_CENTER)
} ?: run {
selectedTab.set(SetupAuthenticationTabs.BUILDER_ID)
}
}
val authenticationDialog = SetupAuthenticationDialog(
project,
state = dialogState,
tabSettings = mapOf(
SetupAuthenticationTabs.IDENTITY_CENTER to AuthenticationTabSettings(
disabled = false,
notice = SetupAuthenticationNotice(
SetupAuthenticationNotice.NoticeType.WARNING,
AwsCoreBundle.message("gettingstarted.setup.codewhisperer.use_builder_id"),
CODEWHISPERER_AUTH_LEARN_MORE_LINK
)
),
SetupAuthenticationTabs.BUILDER_ID to AuthenticationTabSettings(
disabled = false,
notice = SetupAuthenticationNotice(
SetupAuthenticationNotice.NoticeType.WARNING,
AwsCoreBundle.message("gettingstarted.setup.codewhisperer.use_identity_center"),
CODEWHISPERER_AUTH_LEARN_MORE_LINK
)
),
SetupAuthenticationTabs.IAM_LONG_LIVED to AuthenticationTabSettings(
disabled = true,
notice = SetupAuthenticationNotice(
SetupAuthenticationNotice.NoticeType.ERROR,
AwsCoreBundle.message("gettingstarted.setup.auth.no_iam"),
CODEWHISPERER_AUTH_LEARN_MORE_LINK
)
)
),
scopes = Q_SCOPES,
promptForIdcPermissionSet = false,
sourceOfEntry = SourceOfEntry.Q,
featureId = FeatureId.AmazonQ,
connectionInitiatedFromQChatPanel = connectionInitiatedFromQChatPanel
)
val isAuthenticationSuccessful = authenticationDialog.showAndGet()
if (isAuthenticationSuccessful) {
Telemetry.auth.addConnection.use {
it.source(getSourceOfEntry(SourceOfEntry.Q, isFirstInstance, connectionInitiatedFromExplorer, connectionInitiatedFromQChatPanel))
.featureId(FeatureId.AmazonQ)
.credentialSourceId(authenticationDialog.authType)
.isAggregated(true)
.attempts(authenticationDialog.attempts + 1)
.result(MetricResult.Succeeded)
.isReAuth(isReauth)
}
AuthTelemetry.addedConnections(
project,
source = getSourceOfEntry(SourceOfEntry.Q, isFirstInstance, connectionInitiatedFromExplorer, connectionInitiatedFromQChatPanel),
authConnectionsCount = initialConnectionCount,
newAuthConnectionsCount = getConnectionCount() - initialConnectionCount,
enabledAuthConnections = initialAuthConnections,
newEnabledAuthConnections = getEnabledConnections(project),
attempts = authenticationDialog.attempts + 1,
result = Result.Succeeded
)
} else {
Telemetry.auth.addConnection.use {
it.source(getSourceOfEntry(SourceOfEntry.Q, isFirstInstance, connectionInitiatedFromExplorer, connectionInitiatedFromQChatPanel))
.featureId(FeatureId.AmazonQ)
.credentialSourceId(authenticationDialog.authType)
.isAggregated(false)
.attempts(authenticationDialog.attempts + 1)
.result(MetricResult.Cancelled)
.isReAuth(isReauth)
}
}
return isAuthenticationSuccessful
}