Skip to content

Commit 5aebc63

Browse files
committed
Refactor settings
You can get things like the data directory without having to ask the CLI manager now, which I think makes more sense. It is also a bit easier to test because you do not have to account for all the fallback directory logic in the CLI manager tests. This also ensures code will not mutate the settings.
1 parent 588e2a0 commit 5aebc63

13 files changed

+1113
-937
lines changed

src/main/kotlin/com/coder/gateway/CoderGatewayConnectionProvider.kt

+7-5
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ import com.coder.gateway.models.WorkspaceAgentModel
77
import com.coder.gateway.sdk.CoderCLIManager
88
import com.coder.gateway.sdk.CoderRestClient
99
import com.coder.gateway.sdk.DefaultCoderRestClient
10+
import com.coder.gateway.sdk.ensureCLI
1011
import com.coder.gateway.sdk.ex.AuthenticationResponseException
1112
import com.coder.gateway.util.toURL
1213
import com.coder.gateway.sdk.v2.models.Workspace
1314
import com.coder.gateway.sdk.v2.models.WorkspaceStatus
1415
import com.coder.gateway.sdk.v2.models.toAgentModels
16+
import com.coder.gateway.services.CoderSettingsService
1517
import com.coder.gateway.util.withPath
16-
import com.coder.gateway.services.CoderSettingsState
1718
import com.intellij.openapi.components.service
1819
import com.intellij.openapi.diagnostic.Logger
1920
import com.jetbrains.gateway.api.ConnectionRequestor
@@ -37,7 +38,7 @@ private const val IDE_PATH_ON_HOST = "ide_path_on_host"
3738
// CoderGatewayConnectionProvider handles connecting via a Gateway link such as
3839
// jetbrains-gateway://connect#type=coder.
3940
class CoderGatewayConnectionProvider : GatewayConnectionProvider {
40-
private val settings: CoderSettingsState = service()
41+
private val settings: CoderSettingsService = service()
4142

4243
override suspend fun connect(parameters: Map<String, String>, requestor: ConnectionRequestor): GatewayConnectionHandle? {
4344
CoderRemoteConnectionHandle().connect{ indicator ->
@@ -80,7 +81,7 @@ class CoderGatewayConnectionProvider : GatewayConnectionProvider {
8081
throw IllegalArgumentException("The agent \"${agent.name}\" is ${agent.agentStatus.toString().lowercase()}; unable to connect")
8182
}
8283

83-
val cli = CoderCLIManager.ensureCLI(
84+
val cli = ensureCLI(
8485
deploymentURL.toURL(),
8586
client.buildInfo().version,
8687
settings,
@@ -91,7 +92,7 @@ class CoderGatewayConnectionProvider : GatewayConnectionProvider {
9192
cli.login(client.token)
9293

9394
indicator.text = "Configuring Coder CLI..."
94-
cli.configSsh(client.agents(workspaces), settings.headerCommand)
95+
cli.configSsh(client.agents(workspaces).map { it.name })
9596

9697
// TODO: Ask for these if missing. Maybe we can reuse the second
9798
// step of the wizard? Could also be nice if we automatically used
@@ -114,7 +115,7 @@ class CoderGatewayConnectionProvider : GatewayConnectionProvider {
114115
val folder = parameters[FOLDER] ?: throw IllegalArgumentException("Query parameter \"$FOLDER\" is missing")
115116

116117
parameters
117-
.withWorkspaceHostname(CoderCLIManager.getHostName(deploymentURL.toURL(), agent))
118+
.withWorkspaceHostname(CoderCLIManager.getHostName(deploymentURL.toURL(), agent.name))
118119
.withProjectPath(folder)
119120
.withWebTerminalLink(client.url.withPath("/@$username/$workspace.name/terminal").toString())
120121
.withConfigDirectory(cli.coderConfigPath.toString())
@@ -137,6 +138,7 @@ class CoderGatewayConnectionProvider : GatewayConnectionProvider {
137138
lastToken,
138139
isRetry,
139140
useExisting = true,
141+
settings,
140142
)
141143
if (token == null) { // User aborted.
142144
throw IllegalArgumentException("Unable to connect to $deploymentURL, $TOKEN is missing")

src/main/kotlin/com/coder/gateway/CoderRemoteConnectionHandle.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
package com.coder.gateway
44

55
import com.coder.gateway.models.TokenSource
6-
import com.coder.gateway.sdk.CoderCLIManager
76
import com.coder.gateway.sdk.humanizeDuration
87
import com.coder.gateway.sdk.isCancellation
98
import com.coder.gateway.sdk.isWorkerTimeout
109
import com.coder.gateway.sdk.suspendingRetryWithExponentialBackOff
1110
import com.coder.gateway.util.toURL
1211
import com.coder.gateway.util.withPath
1312
import com.coder.gateway.services.CoderRecentWorkspaceConnectionsService
13+
import com.coder.gateway.services.CoderSettings
1414
import com.intellij.ide.BrowserUtil
1515
import com.intellij.openapi.application.ApplicationManager
1616
import com.intellij.openapi.application.ModalityState
@@ -192,6 +192,7 @@ class CoderRemoteConnectionHandle {
192192
token: Pair<String, TokenSource>?,
193193
isRetry: Boolean,
194194
useExisting: Boolean,
195+
settings: CoderSettings,
195196
): Pair<String, TokenSource>? {
196197
var (existingToken, tokenSource) = token ?: Pair("", TokenSource.USER)
197198
val getTokenUrl = url.withPath("/login?redirect=%2Fcli-auth")
@@ -204,7 +205,7 @@ class CoderRemoteConnectionHandle {
204205
if (!useExisting) {
205206
BrowserUtil.browse(getTokenUrl)
206207
} else {
207-
val (u, t) = CoderCLIManager.readConfig()
208+
val (u, t) = settings.readConfig(settings.coderConfigDir)
208209
if (url == u?.toURL() && !t.isNullOrBlank() && t != existingToken) {
209210
logger.info("Injecting token for $url from CLI config")
210211
return Pair(t, TokenSource.CONFIG)

src/main/kotlin/com/coder/gateway/CoderSettingsConfigurable.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.coder.gateway
22

3-
import com.coder.gateway.sdk.CoderCLIManager
3+
import com.coder.gateway.services.CoderSettingsService
44
import com.coder.gateway.util.canCreateDirectory
55
import com.coder.gateway.services.CoderSettingsState
66
import com.intellij.openapi.components.service
@@ -20,6 +20,7 @@ import java.nio.file.Path
2020
class CoderSettingsConfigurable : BoundConfigurable("Coder") {
2121
override fun createPanel(): DialogPanel {
2222
val state: CoderSettingsState = service()
23+
val settings: CoderSettingsService = service()
2324
return panel {
2425
row(CoderGatewayBundle.message("gateway.connector.settings.data-directory.title")) {
2526
textField().resizableColumn().align(AlignX.FILL)
@@ -29,7 +30,7 @@ class CoderSettingsConfigurable : BoundConfigurable("Coder") {
2930
.comment(
3031
CoderGatewayBundle.message(
3132
"gateway.connector.settings.data-directory.comment",
32-
CoderCLIManager.getDataDir(),
33+
settings.dataDir.toString(),
3334
)
3435
)
3536
}.layout(RowLayout.PARENT_GRID)
@@ -39,7 +40,7 @@ class CoderSettingsConfigurable : BoundConfigurable("Coder") {
3940
.comment(
4041
CoderGatewayBundle.message(
4142
"gateway.connector.settings.binary-source.comment",
42-
CoderCLIManager(state, URL("http://localhost"), CoderCLIManager.getDataDir()).remoteBinaryURL.path,
43+
settings.binSource(URL("http://localhost")).path,
4344
)
4445
)
4546
}.layout(RowLayout.PARENT_GRID)

0 commit comments

Comments
 (0)