Skip to content
This repository was archived by the owner on Jan 9, 2024. It is now read-only.

Commit c612464

Browse files
committed
Fix bearer auth
1 parent dee7775 commit c612464

File tree

1 file changed

+22
-18
lines changed

1 file changed

+22
-18
lines changed

src/main/kotlin/id/walt/web/controllers/AuthController.kt

+22-18
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import io.ktor.server.request.*
2323
import io.ktor.server.response.*
2424
import io.ktor.server.sessions.*
2525
import io.ktor.util.pipeline.*
26+
import kotlinx.serialization.json.JsonObject
2627
import kotlinx.serialization.json.JsonPrimitive
2728
import kotlinx.serialization.json.buildJsonObject
2829
import kotlinx.uuid.UUID
@@ -66,21 +67,18 @@ fun Application.configureSecurity() {
6667

6768
install(Authentication) {
6869

69-
bearer {
70-
bearer("authenticated-bearer") {
71-
authenticate { tokenCredential ->
72-
if (securityUserTokenMapping.contains(tokenCredential.token)) {
73-
UserIdPrincipal(securityUserTokenMapping[tokenCredential.token].toString())
74-
} else {
75-
null
76-
}
70+
bearer("authenticated-bearer") {
71+
authenticate { tokenCredential ->
72+
if (securityUserTokenMapping.contains(tokenCredential.token)) {
73+
UserIdPrincipal(securityUserTokenMapping[tokenCredential.token].toString())
74+
} else {
75+
null
7776
}
7877
}
7978
}
8079

8180
session<LoginTokenSession>("authenticated-session") {
8281
validate { session ->
83-
//println("Validating: $session, [$securityUserTokenMapping]")
8482
if (securityUserTokenMapping.contains(session.token)) {
8583
UserIdPrincipal(securityUserTokenMapping[session.token].toString())
8684
} else {
@@ -90,7 +88,13 @@ fun Application.configureSecurity() {
9088
}
9189

9290
challenge {
93-
call.respond(HttpStatusCode.Unauthorized, "Login to continue.")
91+
call.respond(
92+
HttpStatusCode.Unauthorized, JsonObject(
93+
mapOf(
94+
"message" to JsonPrimitive("Login Required")
95+
)
96+
)
97+
)
9498
}
9599
}
96100
}
@@ -210,14 +214,14 @@ fun Application.auth() {
210214
}
211215
}
212216

213-
214-
fun PipelineContext<Unit, ApplicationCall>.getUserId() = call.principal<UserIdPrincipal>("authenticated-session")
215-
?: call.principal<UserIdPrincipal>("authenticated-bearer")
216-
?: throw UnauthorizedException("Could not retrieve authorized user.")
217+
fun PipelineContext<Unit, ApplicationCall>.getUserId() =
218+
call.principal<UserIdPrincipal>("authenticated-session")
219+
?: call.principal<UserIdPrincipal>("authenticated-bearer")
220+
?: call.principal<UserIdPrincipal>() // bearer is registered with no name for some reason
221+
?: throw UnauthorizedException("Could not find user authorization within request.")
217222

218223
fun PipelineContext<Unit, ApplicationCall>.getUserUUID() =
219-
runCatching { UUID(getUserId().name) }
220-
.getOrNull() ?: throw IllegalArgumentException("Invalid user id")
224+
runCatching { UUID(getUserId().name) }.getOrElse { throw IllegalArgumentException("Invalid user id: $it") }
221225

222226
fun PipelineContext<Unit, ApplicationCall>.getWalletId() =
223227
runCatching {
@@ -231,8 +235,8 @@ fun PipelineContext<Unit, ApplicationCall>.getWalletService() =
231235
WalletServiceManager.getWalletService(getUserUUID(), getWalletId())
232236

233237
fun PipelineContext<Unit, ApplicationCall>.getUsersSessionToken(): String? =
234-
call.sessions.get(LoginTokenSession::class)?.token ?: call.request.authorization()
235-
?.removePrefix("Bearer ")
238+
call.sessions.get(LoginTokenSession::class)?.token
239+
?: call.request.authorization()?.removePrefix("Bearer ")
236240

237241
fun getNftService() = WalletServiceManager.getNftService()
238242

0 commit comments

Comments
 (0)