Skip to content

Commit 867e521

Browse files
committed
refactor: handle auth exceptions better, with an InvalidCredentialsException
1 parent c7a2d0e commit 867e521

File tree

7 files changed

+26
-10
lines changed

7 files changed

+26
-10
lines changed

src/main/kotlin/com/ctrlhub/core/Api.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.ctrlhub.core
22

33
import com.ctrlhub.core.api.KtorApiClient
4-
import com.ctrlhub.core.router.AuthRouter
4+
import com.ctrlhub.core.auth.AuthRouter
55

66
class Api private constructor(apiClient: KtorApiClient) {
77
val auth: AuthRouter = AuthRouter(apiClient)

src/main/kotlin/com/ctrlhub/core/api/KtorApiClient.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ class KtorApiClient private constructor(val httpClient: HttpClient) {
5757
): HttpResponse {
5858
return httpClient.post(url) {
5959
headers?.forEach { (key, value) -> header(key, value) }
60-
body?.let { setBody(Json.encodeToString<T>(it)) }
60+
body?.let {
61+
val jsonBody = Json.encodeToString<T>(it)
62+
setBody(jsonBody)
63+
}
6164
}
6265
}
6366

src/main/kotlin/com/ctrlhub/core/router/AuthRouter.kt renamed to src/main/kotlin/com/ctrlhub/core/auth/AuthRouter.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1-
package com.ctrlhub.core.router
1+
package com.ctrlhub.core.auth
22

33
import com.ctrlhub.core.Config
44
import com.ctrlhub.core.api.ApiClientException
55
import com.ctrlhub.core.api.ApiException
66
import com.ctrlhub.core.api.KtorApiClient
7-
import com.ctrlhub.core.api.payload.auth.LoginPayload
8-
import com.ctrlhub.core.api.response.auth.AuthFlowResponse
9-
import com.ctrlhub.core.api.response.auth.CompleteResponse
10-
import io.ktor.client.call.*
7+
import com.ctrlhub.core.auth.payload.LoginPayload
8+
import com.ctrlhub.core.auth.response.AuthFlowResponse
9+
import com.ctrlhub.core.auth.response.CompleteResponse
10+
import com.ctrlhub.core.router.Router
11+
import io.ktor.client.call.body
1112
import io.ktor.client.plugins.ClientRequestException
13+
import io.ktor.http.HttpStatusCode
1214

1315
class AuthRouter(apiClient: KtorApiClient) : Router(apiClient = apiClient) {
1416
suspend fun initiate(): AuthFlowResponse {
@@ -25,6 +27,13 @@ class AuthRouter(apiClient: KtorApiClient) : Router(apiClient = apiClient) {
2527
return try {
2628
apiClient.post(url = "${Config.authBaseUrl}/self-service/login?flow=$flowId", body = payload).body()
2729
} catch (e: ClientRequestException) {
30+
if (e.response.status == HttpStatusCode.BadRequest) {
31+
val bodyAsString: String = e.response.body()
32+
if (bodyAsString.contains("credentials are invalid")) {
33+
throw InvalidCredentialsException()
34+
}
35+
}
36+
2837
throw ApiClientException("Failed to complete auth", e.response, e)
2938
} catch (e: Exception) {
3039
throw ApiException("Failed to complete auth", e)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.ctrlhub.core.auth
2+
3+
class InvalidCredentialsException: Exception()

src/main/kotlin/com/ctrlhub/core/api/payload/auth/AuthPayloads.kt renamed to src/main/kotlin/com/ctrlhub/core/auth/payload/AuthPayloads.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.ctrlhub.core.api.payload.auth
1+
package com.ctrlhub.core.auth.payload
22

33
import kotlinx.serialization.Serializable
44

src/main/kotlin/com/ctrlhub/core/api/response/auth/AuthResponses.kt renamed to src/main/kotlin/com/ctrlhub/core/auth/response/AuthResponses.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.ctrlhub.core.api.response.auth
1+
package com.ctrlhub.core.auth.response
22

33
import kotlinx.serialization.SerialName
44
import kotlinx.serialization.Serializable

src/test/kotlin/com/ctrlhub/core/router/AuthRouterTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ package com.ctrlhub.core.router
22

33
import com.ctrlhub.core.api.ApiException
44
import com.ctrlhub.core.api.KtorApiClient
5-
import com.ctrlhub.core.api.payload.auth.LoginPayload
5+
import com.ctrlhub.core.auth.payload.LoginPayload
6+
import com.ctrlhub.core.auth.AuthRouter
67
import io.ktor.client.*
78
import io.ktor.client.engine.mock.*
89
import io.ktor.http.*

0 commit comments

Comments
 (0)