Skip to content

Commit 8759b81

Browse files
committed
Basic http client with auth support
- the service is able to do basic authentication with username and password. - retrieve a token
1 parent 3c3bdd4 commit 8759b81

File tree

6 files changed

+96
-2
lines changed

6 files changed

+96
-2
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88

99
* welcome screen
1010
* basuc connector view triggered by the Coder's welcome view.
11-
* back button to return to the main welcome view
11+
* back button to return to the main welcome view
12+
* basic Coder http client

build.gradle.kts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,19 @@ plugins {
1717
group = properties("pluginGroup")
1818
version = properties("pluginVersion")
1919

20+
val ktorVersion = properties("ktorVersion")
21+
dependencies {
22+
implementation("io.ktor:ktor-client-core:$ktorVersion")
23+
implementation("io.ktor:ktor-client-cio:$ktorVersion")
24+
implementation("io.ktor:ktor-client-logging:$ktorVersion")
25+
implementation("io.ktor:ktor-client-encoding:$ktorVersion")
26+
implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
27+
// implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
28+
implementation("io.ktor:ktor-serialization-gson:$ktorVersion")
29+
implementation("org.apache.logging.log4j:log4j-slf4j-impl:2.17.2")
30+
31+
}
32+
2033
// Configure project's dependencies
2134
repositories {
2235
mavenCentral()

gradle.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,6 @@ gradleVersion=7.4
2525
# See https://plugins.jetbrains.com/docs/intellij/kotlin.html#kotlin-standard-library for details.
2626
# suppress inspection "UnusedProperty"
2727
kotlin.stdlib.default.dependency=false
28+
29+
30+
ktorVersion=2.0.1
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.coder.gateway.sdk
2+
3+
import com.intellij.openapi.components.Service
4+
import io.ktor.client.HttpClient
5+
import io.ktor.client.engine.cio.CIO
6+
import io.ktor.client.plugins.compression.ContentEncoding
7+
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
8+
import io.ktor.client.plugins.logging.DEFAULT
9+
import io.ktor.client.plugins.logging.LogLevel
10+
import io.ktor.client.plugins.logging.Logger
11+
import io.ktor.client.plugins.logging.Logging
12+
import io.ktor.client.request.post
13+
import io.ktor.client.request.setBody
14+
import io.ktor.client.statement.bodyAsText
15+
import io.ktor.http.ContentType
16+
import io.ktor.http.contentType
17+
import io.ktor.serialization.gson.gson
18+
import kotlinx.coroutines.runBlocking
19+
20+
@Service
21+
class CoderClientService {
22+
private val httpClient = HttpClient(CIO) {
23+
install(Logging) {
24+
logger = Logger.DEFAULT
25+
level = LogLevel.ALL
26+
}
27+
install(ContentEncoding)
28+
install(ContentNegotiation) {
29+
gson() {
30+
setPrettyPrinting()
31+
}
32+
}
33+
}
34+
35+
suspend fun authenthicateWithPassword(url: String, email: String, password: String) {
36+
val urlPath = url.trimEnd('/')
37+
val response = httpClient.post("$urlPath/auth/basic/login") {
38+
contentType(ContentType.Application.Json)
39+
setBody(LoginRequest(email, password))
40+
}
41+
42+
println(">>> ${response.bodyAsText()}")
43+
}
44+
45+
fun dispose() {
46+
httpClient.close()
47+
}
48+
}
49+
50+
fun main() {
51+
val coderClient = CoderClientService()
52+
53+
runBlocking {
54+
coderClient.authenthicateWithPassword("http://localhost:7080", "example@email.com", "password example")
55+
}
56+
57+
coderClient.dispose()
58+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.coder.gateway.sdk
2+
3+
import kotlinx.serialization.SerialName
4+
import kotlinx.serialization.Serializable
5+
6+
@Serializable
7+
data class LoginRequest(
8+
@SerialName("email")
9+
val email: String,
10+
11+
@SerialName("password")
12+
val password: String
13+
)
14+
15+
@Serializable
16+
data class LoginResponse(@SerialName("session_token") val sessionToken: String)
17+

src/main/resources/META-INF/plugin.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
<!-- https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html -->
99
<depends>com.intellij.modules.platform</depends>
1010
<depends>com.jetbrains.gateway</depends>
11-
11+
<extensions defaultExtensionNs="com.intellij">
12+
<applicationService serviceImplementation="com.coder.gateway.sdk.CoderClientService"></applicationService>
13+
</extensions>
1214
<extensions defaultExtensionNs="com.jetbrains">
1315
<gatewayConnector implementation="com.coder.gateway.CoderGatewayConnector"/>
1416
</extensions>

0 commit comments

Comments
 (0)