Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import software.aws.toolkits.core.utils.getLogger
import software.aws.toolkits.core.utils.info
import software.aws.toolkits.core.utils.warn
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection

Check warning on line 32 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused import directive

Unused import directive
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AsyncChatUiListener
Expand All @@ -46,7 +46,7 @@
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogResult
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.SsoProfileData

Check warning on line 49 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused import directive

Unused import directive
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
import software.aws.toolkits.resources.message
Expand Down Expand Up @@ -125,19 +125,7 @@
val connection = ToolkitConnectionManager.getInstance(project)
.activeConnectionForFeature(QConnection.getInstance())

when (connection) {
is AwsBearerTokenConnection -> {
ConnectionMetadata(
SsoProfileData(connection.startUrl)
)
}
else -> {
// If no connection or not a bearer token connection return default builderID start url
ConnectionMetadata(
SsoProfileData(AmazonQLspConstants.AWS_BUILDER_ID_URL)
)
}
}
connection?.let { ConnectionMetadata.fromConnection(it) }
}

override fun openTab(params: LSPAny): CompletableFuture<OpenTabResult> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@
package software.aws.toolkits.jetbrains.services.amazonq.lsp.auth

import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection
import java.util.concurrent.CompletableFuture

interface AuthCredentialsService {
fun updateTokenCredentials(accessToken: String, encrypted: Boolean): CompletableFuture<ResponseMessage>
fun updateTokenCredentials(connection: ToolkitConnection, encrypted: Boolean): CompletableFuture<ResponseMessage>
fun deleteTokenCredentials(): CompletableFuture<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,26 @@
import software.aws.toolkits.core.TokenConnectionSettings
import software.aws.toolkits.core.utils.getLogger
import software.aws.toolkits.core.utils.warn
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection

Check warning on line 13 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/auth/DefaultAuthCredentialsService.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused import directive

Unused import directive
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManagerListener
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenAuthState
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProvider
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProviderListener
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspConstants

Check warning on line 21 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/auth/DefaultAuthCredentialsService.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused import directive

Unused import directive
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.LspServerConfigurations
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.UpdateConfigurationParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.BearerCredentials
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.SsoProfileData

Check warning on line 28 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/auth/DefaultAuthCredentialsService.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused import directive

Unused import directive
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.UpdateCredentialsPayload
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.UpdateCredentialsPayloadData
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfile
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileManager

Check warning on line 32 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/auth/DefaultAuthCredentialsService.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused import directive

Unused import directive
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileSelectedListener
import software.aws.toolkits.jetbrains.utils.isQConnected
import software.aws.toolkits.jetbrains.utils.isQExpired
Expand All @@ -46,7 +50,7 @@

private val scheduler: ScheduledExecutorService = AppExecutorUtil.getAppScheduledExecutorService()
private var tokenSyncTask: ScheduledFuture<*>? = null
private val tokenSyncIntervalSeconds = 10L
private val tokenSyncIntervalMinutes = 5L

init {
project.messageBus.connect(serverInstance).apply {
Expand Down Expand Up @@ -98,14 +102,14 @@
LOG.warn(e) { "Failed to sync bearer token to Flare" }
}
},
tokenSyncIntervalSeconds,
tokenSyncIntervalSeconds,
TimeUnit.SECONDS
tokenSyncIntervalMinutes,
tokenSyncIntervalMinutes,
TimeUnit.MINUTES
)
}

override fun updateTokenCredentials(accessToken: String, encrypted: Boolean): CompletableFuture<ResponseMessage> {
val payload = createUpdateCredentialsPayload(accessToken, encrypted)
override fun updateTokenCredentials(connection: ToolkitConnection, encrypted: Boolean): CompletableFuture<ResponseMessage> {
val payload = createUpdateCredentialsPayload(connection, encrypted)

return AmazonQLspService.executeIfRunning(project) { server ->
server.updateTokenCredentials(payload)
Expand Down Expand Up @@ -142,35 +146,39 @@
}

private fun updateTokenFromConnection(connection: ToolkitConnection): CompletableFuture<ResponseMessage> =
(connection.getConnectionSettings() as? TokenConnectionSettings)
updateTokenCredentials(connection, true)

override fun invalidate(providerId: String) {
deleteTokenCredentials()
}

private fun createUpdateCredentialsPayload(connection: ToolkitConnection, encrypted: Boolean): UpdateCredentialsPayload {
val token = (connection.getConnectionSettings() as? TokenConnectionSettings)
?.tokenProvider
?.delegate
?.let { it as? BearerTokenProvider }
?.currentToken()
?.accessToken
?.let { token -> updateTokenCredentials(token, true) }
?: CompletableFuture.failedFuture(IllegalStateException("Unable to get token from connection"))
?: error("Unable to get token from connection")

override fun invalidate(providerId: String) {
deleteTokenCredentials()
}

private fun createUpdateCredentialsPayload(token: String, encrypted: Boolean): UpdateCredentialsPayload =
if (encrypted) {
return if (encrypted) {
UpdateCredentialsPayload(
data = encryptionManager.encrypt(
UpdateCredentialsPayloadData(
BearerCredentials(token)
)
),
metadata = ConnectionMetadata.fromConnection(connection),
encrypted = true
)
} else {
UpdateCredentialsPayload(
data = token,
metadata = ConnectionMetadata.fromConnection(connection),
encrypted = false
)
}
}

override fun onProfileSelected(project: Project, profile: QRegionProfile?) {
updateConfiguration()
Expand All @@ -180,7 +188,7 @@
val payload = UpdateConfigurationParams(
section = "aws.q",
settings = mapOf(
"profileArn" to QRegionProfileManager.getInstance().activeProfile(project)?.arn
"profileArn" to "invalidinvalidinvalid"
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

imao

)
)
return AmazonQLspService.executeIfRunning(project) { server ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,29 @@

package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials

import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspConstants

data class ConnectionMetadata(
val sso: SsoProfileData,
)
) {
companion object {
fun fromConnection(connection: ToolkitConnection) = when (connection) {
is AwsBearerTokenConnection -> {
ConnectionMetadata(
SsoProfileData(connection.startUrl)
)
}
else -> {
// If no connection or not a bearer token connection return default builderID start url
ConnectionMetadata(
SsoProfileData(AmazonQLspConstants.AWS_BUILDER_ID_URL)
)
}
}
}
}

data class SsoProfileData(
val startUrl: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentia

data class UpdateCredentialsPayload(
val data: String,
val metadata: ConnectionMetadata,
val encrypted: Boolean,
)

Expand Down
Loading