Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
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 @@ -18,6 +18,7 @@ enum class CssVariable(
TextColorWeak("--mynah-color-text-weak"),
TextColorLink("--mynah-color-text-link"),
TextColorInput("--mynah-color-text-input"),
TextColorDisabled("--mynah-color-text-disabled"),

Background("--mynah-color-bg"),
BackgroundAlt("--mynah-color-bg-alt"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class ThemeBrowserAdapter {
append(CssVariable.TextColorInput, theme.textFieldForeground)
append(CssVariable.TextColorLink, theme.linkText)
append(CssVariable.TextColorWeak, theme.inactiveText)
append(CssVariable.TextColorDisabled, theme.inactiveText)

append(CssVariable.Background, theme.background)
append(CssVariable.BackgroundAlt, theme.background)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import software.aws.toolkits.core.utils.error
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
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 @@ -45,7 +44,6 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenF
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
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 @@ -124,19 +122,7 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
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<LSPAny> {
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 @@ -22,10 +22,10 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryp
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.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
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 +46,7 @@ class DefaultAuthCredentialsService(

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

init {
project.messageBus.connect(serverInstance).apply {
Expand Down Expand Up @@ -98,14 +98,14 @@ class DefaultAuthCredentialsService(
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 +142,39 @@ class DefaultAuthCredentialsService(
}

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 +184,7 @@ class DefaultAuthCredentialsService(
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