From 978028dc9cb0ecb4eeb98f5812a487eb10b1b353 Mon Sep 17 00:00:00 2001
From: Jan-Niclas Struewer <j.n.struewer@gmail.com>
Date: Mon, 11 Dec 2023 19:10:15 +0100
Subject: [PATCH] store received cookies and reuse them for further requests

---
 .../repository/service/RepositoryService.kt   | 31 ++++++++++++++++---
 1 file changed, 27 insertions(+), 4 deletions(-)

diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/repository/service/RepositoryService.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/repository/service/RepositoryService.kt
index 12059bbe..1cb29132 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/repository/service/RepositoryService.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/repository/service/RepositoryService.kt
@@ -8,10 +8,15 @@ import de.fraunhofer.iem.dataprovider.repository.dto.RepositoryCreateDto
 import de.fraunhofer.iem.dataprovider.repository.dto.ValidateUserDto
 import de.fraunhofer.iem.dataprovider.repository.entity.RepositoryEntity
 import de.fraunhofer.iem.dataprovider.repository.repository.RepositoryRepository
-import de.fraunhofer.iem.dataprovider.utilities.HttpClientWrapper
+import io.ktor.client.*
 import io.ktor.client.call.*
+import io.ktor.client.engine.cio.*
+import io.ktor.client.plugins.contentnegotiation.*
+import io.ktor.client.plugins.cookies.*
 import io.ktor.client.request.*
 import io.ktor.http.*
+import io.ktor.serialization.kotlinx.json.*
+import kotlinx.serialization.json.Json
 import org.springframework.stereotype.Service
 import java.util.*
 
@@ -19,11 +24,18 @@ import java.util.*
 class RepositoryService(
     private val repositoryRepository: RepositoryRepository,
     private val openCodeGitlabApi: OpenCodeGitlabApi,
-    private val openCodeApiProperties: OpenCodeApiProperties,
-    httpClientWrapper: HttpClientWrapper
+    private val openCodeApiProperties: OpenCodeApiProperties
 ) {
     private val logger = getLogger(javaClass)
-    private val httpClient = httpClientWrapper.getClient()
+    private val httpClient = HttpClient(CIO) {
+        install(HttpCookies)
+        install(ContentNegotiation) {
+            json(
+                Json { ignoreUnknownKeys = true }
+            )
+        }
+    }
+
     /**
      * Either creates or returns a repository entity based upon its
      * opencode repository id.
@@ -89,6 +101,17 @@ class RepositoryService(
         println(userCookie)
         println(userCookie.headers)
         println(userCookie.body<Any>())
+        val setCookies = userCookie.setCookie()
+        println(setCookies)
+
+        val me = httpClient.get(openCodeApiProperties.auth) {
+            url {
+                appendPathSegments("me")
+            }
+        }
+
+        println(me)
+        println(me.body<Any>())
     }
 
 }
-- 
GitLab