Skip to content

Commit 13e090b

Browse files
committed
Implement API for retrieve ICEServer config
- gson type adapter for the RTCICeServer - retrofit calls to retrieve ICE configurations
1 parent e2857cd commit 13e090b

File tree

4 files changed

+75
-3
lines changed

4 files changed

+75
-3
lines changed

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

+13-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package com.coder.gateway.sdk
22

3+
import com.coder.gateway.models.SSHKeys
34
import com.coder.gateway.models.UriScheme
45
import com.coder.gateway.models.User
5-
import com.coder.gateway.models.SSHKeys
66
import com.coder.gateway.models.Workspace
77
import com.coder.gateway.sdk.ex.AuthenticationException
88
import com.google.gson.Gson
99
import com.google.gson.GsonBuilder
1010
import com.intellij.openapi.components.Service
1111
import com.jetbrains.gateway.sdk.convertors.InstantConverter
12+
import com.jetbrains.gateway.sdk.convertors.RTCIceServerAdapter
13+
import dev.onvoid.webrtc.RTCIceServer
1214
import okhttp3.OkHttpClient
1315
import okhttp3.logging.HttpLoggingInterceptor
1416
import retrofit2.Retrofit
@@ -31,6 +33,7 @@ class CoderClientService {
3133

3234
val gson: Gson = GsonBuilder()
3335
.registerTypeAdapter(Instant::class.java, InstantConverter())
36+
.registerTypeAdapter(RTCIceServer::class.java, RTCIceServerAdapter())
3437
.setPrettyPrinting()
3538
.create()
3639

@@ -77,4 +80,12 @@ class CoderClientService {
7780

7881
return sshKeysResponse.body()!!
7982
}
80-
}
83+
84+
fun iceServers(): List<RTCIceServer> {
85+
val iceServersResponse = retroRestClient.iceServers(sessionToken).execute()
86+
if (!iceServersResponse.isSuccessful) {
87+
throw IllegalStateException("Could not retrieve retrieve ICE servers:${iceServersResponse.code()}, reason: ${iceServersResponse.message()}")
88+
}
89+
return iceServersResponse.body()!!.iceServers
90+
}
91+
}

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

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

3-
import com.coder.gateway.models.User
43
import com.coder.gateway.models.SSHKeys
4+
import com.coder.gateway.models.User
55
import com.coder.gateway.models.Workspace
66
import retrofit2.Call
77
import retrofit2.http.Body
@@ -25,4 +25,7 @@ interface CoderRestService {
2525

2626
@GET("api/v0/users/{userId}/sshkey")
2727
fun sshKeys(@Header("Session-Token") sessionToken: String, @Path("userId") userID: String): Call<SSHKeys>
28+
29+
@GET("api/private/webrtc/ice")
30+
fun iceServers(@Header("Session-Token") sessionToken: String): Call<IceServersWrapper>
2831
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.coder.gateway.sdk
2+
3+
import com.google.gson.annotations.SerializedName
4+
import dev.onvoid.webrtc.RTCIceServer
5+
6+
data class IceServersWrapper(@SerializedName("data") val iceServers: List<RTCIceServer>)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.jetbrains.gateway.sdk.convertors
2+
3+
import com.google.gson.TypeAdapter
4+
import com.google.gson.stream.JsonReader
5+
import com.google.gson.stream.JsonWriter
6+
import dev.onvoid.webrtc.RTCIceServer
7+
8+
private const val URLS = "urls"
9+
10+
private const val USERNAME = "username"
11+
12+
private const val PASSWORD = "password"
13+
14+
/**
15+
* GSON adapter for converting [RTCIceServer] objects.
16+
*/
17+
class RTCIceServerAdapter : TypeAdapter<RTCIceServer>() {
18+
override fun write(writer: JsonWriter, iceServer: RTCIceServer) {
19+
writer.beginObject()
20+
writer.name(URLS).beginArray()
21+
iceServer.urls.forEach {
22+
writer.value(it)
23+
}
24+
writer.endArray()
25+
writer.name(USERNAME).value(iceServer.username)
26+
writer.name(PASSWORD).value(iceServer.password)
27+
writer.endObject()
28+
}
29+
30+
override fun read(reader: JsonReader): RTCIceServer {
31+
val iceServer = RTCIceServer()
32+
reader.beginObject()
33+
while (reader.hasNext()) {
34+
when (reader.nextName()) {
35+
URLS -> {
36+
val urls = mutableListOf<String>()
37+
reader.beginArray()
38+
while (reader.hasNext()) {
39+
urls.add(reader.nextString())
40+
}
41+
reader.endArray()
42+
iceServer.urls = urls
43+
}
44+
USERNAME -> iceServer.username = reader.nextString()
45+
"credential" -> iceServer.password = reader.nextString()
46+
}
47+
}
48+
reader.endObject()
49+
return iceServer
50+
}
51+
52+
}

0 commit comments

Comments
 (0)