Skip to content

Commit b8a0329

Browse files
committed
Session token is now kept as a cookie
1 parent 1d43fec commit b8a0329

File tree

1 file changed

+35
-21
lines changed

1 file changed

+35
-21
lines changed

src/main/kotlin/com/coder/gateway/sdk/CoderRestClientService.kt

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@ package com.coder.gateway.sdk
22

33
import com.coder.gateway.models.UriScheme
44
import com.coder.gateway.sdk.ex.AuthenticationException
5-
import com.coder.gateway.sdk.v1.CoderV1RestFacade
6-
import com.coder.gateway.sdk.v1.LoginRequest
7-
import com.coder.gateway.sdk.v1.SSHKeys
8-
import com.coder.gateway.sdk.v1.User
9-
import com.coder.gateway.sdk.v1.Workspace
5+
import com.coder.gateway.sdk.v2.CoderV2RestFacade
6+
import com.coder.gateway.sdk.v2.models.AgentGitSSHKeys
7+
import com.coder.gateway.sdk.v2.models.LoginWithPasswordRequest
8+
import com.coder.gateway.sdk.v2.models.User
9+
import com.coder.gateway.sdk.v2.models.Workspace
1010
import com.google.gson.Gson
1111
import com.google.gson.GsonBuilder
1212
import com.intellij.openapi.components.Service
1313
import com.jetbrains.gateway.sdk.convertors.InstantConverter
1414
import com.jetbrains.gateway.sdk.convertors.RTCIceServerAdapter
1515
import dev.onvoid.webrtc.RTCIceServer
16+
import okhttp3.Cookie
17+
import okhttp3.CookieJar
18+
import okhttp3.HttpUrl
1619
import okhttp3.OkHttpClient
1720
import okhttp3.logging.HttpLoggingInterceptor
1821
import retrofit2.Retrofit
@@ -21,9 +24,7 @@ import java.time.Instant
2124

2225
@Service(Service.Level.APP)
2326
class CoderRestClientService {
24-
private lateinit var retroRestClient: CoderV1RestFacade
25-
26-
lateinit var sessionToken: String
27+
private lateinit var retroRestClient: CoderV2RestFacade
2728
lateinit var me: User
2829

2930
/**
@@ -44,19 +45,23 @@ class CoderRestClientService {
4445

4546
retroRestClient = Retrofit.Builder()
4647
.baseUrl("${uriScheme.scheme}://$hostPath:$port")
47-
.client(OkHttpClient.Builder().addInterceptor(interceptor).build())
48+
.client(
49+
OkHttpClient.Builder()
50+
.addInterceptor(interceptor)
51+
.cookieJar(CoderCookieJar())
52+
.build()
53+
)
4854
.addConverterFactory(GsonConverterFactory.create(gson))
4955
.build()
50-
.create(CoderV1RestFacade::class.java)
56+
.create(CoderV2RestFacade::class.java)
5157

52-
val sessionTokenResponse = retroRestClient.authenticate(LoginRequest(email, password)).execute()
58+
val sessionTokenResponse = retroRestClient.authenticate(LoginWithPasswordRequest(email, password)).execute()
5359

5460
if (!sessionTokenResponse.isSuccessful) {
5561
throw AuthenticationException("Authentication failed with code:${sessionTokenResponse.code()}, reason: ${sessionTokenResponse.message()}")
5662
}
57-
sessionToken = sessionTokenResponse.body()!!.sessionToken
5863

59-
val userResponse = retroRestClient.me(sessionToken).execute()
64+
val userResponse = retroRestClient.me().execute()
6065

6166
if (!userResponse.isSuccessful) {
6267
throw IllegalStateException("Could not retrieve information about logged use:${userResponse.code()}, reason: ${userResponse.message()}")
@@ -66,28 +71,37 @@ class CoderRestClientService {
6671
}
6772

6873
fun workspaces(): List<Workspace> {
69-
val workspacesResponse = retroRestClient.workspaces(sessionToken, me.id).execute()
74+
val workspacesResponse = retroRestClient.workspaces().execute()
7075
if (!workspacesResponse.isSuccessful) {
7176
throw IllegalStateException("Could not retrieve Coder Workspaces:${workspacesResponse.code()}, reason: ${workspacesResponse.message()}")
7277
}
7378

7479
return workspacesResponse.body()!!
7580
}
7681

77-
fun userSSHKeys(): SSHKeys {
78-
val sshKeysResponse = retroRestClient.sshKeys(sessionToken, me.id).execute()
82+
fun userSSHKeys(): AgentGitSSHKeys {
83+
val sshKeysResponse = retroRestClient.sshKeys().execute()
7984
if (!sshKeysResponse.isSuccessful) {
8085
throw IllegalStateException("Could not retrieve Coder Workspaces:${sshKeysResponse.code()}, reason: ${sshKeysResponse.message()}")
8186
}
8287

8388
return sshKeysResponse.body()!!
8489
}
8590

86-
fun iceServers(): List<RTCIceServer> {
87-
val iceServersResponse = retroRestClient.iceServers(sessionToken).execute()
88-
if (!iceServersResponse.isSuccessful) {
89-
throw IllegalStateException("Could not retrieve retrieve ICE servers:${iceServersResponse.code()}, reason: ${iceServersResponse.message()}")
91+
private class CoderCookieJar : CookieJar {
92+
private lateinit var coderCookies: List<Cookie>
93+
override fun loadForRequest(url: HttpUrl): List<Cookie> {
94+
if (!url.encodedPath.endsWith("user/login")) {
95+
return coderCookies
96+
}
97+
return emptyList()
98+
}
99+
100+
override fun saveFromResponse(url: HttpUrl, cookies: List<Cookie>) {
101+
if (url.encodedPath.endsWith("user/login")) {
102+
coderCookies = ArrayList(cookies)
103+
}
90104
}
91-
return iceServersResponse.body()!!.iceServers
105+
92106
}
93107
}

0 commit comments

Comments
 (0)