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 @@ -9,6 +9,7 @@ import org.eclipse.lsp4j.jsonrpc.services.JsonRequest
import org.eclipse.lsp4j.services.LanguageServer
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.GetConfigurationFromServerParams
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.UpdateCredentialsPayload
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams
import java.util.concurrent.CompletableFuture
Expand All @@ -29,4 +30,7 @@ interface AmazonQLanguageServer : LanguageServer {

@JsonRequest("aws/getConfigurationFromServer")
fun getConfigurationFromServer(params: GetConfigurationFromServerParams): CompletableFuture<LspServerConfigurations>

@JsonRequest("aws/updateConfiguration")
fun updateConfiguration(params: UpdateConfigurationParams): CompletableFuture<LspServerConfigurations>
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,14 @@ import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenPr
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProviderListener
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.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
import java.util.concurrent.CompletableFuture
Expand All @@ -28,16 +33,19 @@ class DefaultAuthCredentialsService(
serverInstance: Disposable,
) : AuthCredentialsService,
BearerTokenProviderListener,
ToolkitConnectionManagerListener {
ToolkitConnectionManagerListener,
QRegionProfileSelectedListener {

init {
project.messageBus.connect(serverInstance).apply {
subscribe(BearerTokenProviderListener.TOPIC, this@DefaultAuthCredentialsService)
subscribe(ToolkitConnectionManagerListener.TOPIC, this@DefaultAuthCredentialsService)
subscribe(QRegionProfileSelectedListener.TOPIC, this@DefaultAuthCredentialsService)
}

if (isQConnected(project) && !isQExpired(project)) {
updateTokenFromActiveConnection()
updateConfiguration()
}
}

Expand Down Expand Up @@ -108,4 +116,20 @@ class DefaultAuthCredentialsService(
encrypted = false
)
}

override fun onProfileSelected(project: Project, profile: QRegionProfile?) {
updateConfiguration()
}

private fun updateConfiguration(): CompletableFuture<LspServerConfigurations> {
val payload = UpdateConfigurationParams(
section = "aws.q",
settings = mapOf(
"profileArn" to QRegionProfileManager.getInstance().activeProfile(project)?.arn
)
)
return AmazonQLspService.executeIfRunning(project) { server ->
server.updateConfiguration(payload)
} ?: (CompletableFuture.failedFuture(IllegalStateException("LSP Server not running")))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,10 @@ data class WorkspaceInfo(val workspaceRoot: String, val workspaceId: String)

// This represents the entire array
data class LspServerConfigurations(val workspaces: List<WorkspaceInfo>)

data class UpdateConfigurationParams(
val section: String,
val settings: LSPAny,
Copy link
Contributor

Choose a reason for hiding this comment

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

we should follow up with proper type safety

)

typealias LSPAny = Any?
Loading