Skip to content
Snippets Groups Projects
Commit 4f7feec4 authored by Torsten Grote's avatar Torsten Grote
Browse files

Merge branch '70-status-endpoint' into 'main'

API endpoint for checking mailbox status

Closes #70

See merge request !38
parents 6bc51791 e4b2265f
Branches
Tags
1 merge request!38API endpoint for checking mailbox status
Pipeline #8065 passed
...@@ -4,9 +4,11 @@ import io.ktor.application.Application ...@@ -4,9 +4,11 @@ import io.ktor.application.Application
import io.ktor.application.ApplicationCall import io.ktor.application.ApplicationCall
import io.ktor.application.call import io.ktor.application.call
import io.ktor.auth.authenticate import io.ktor.auth.authenticate
import io.ktor.auth.principal
import io.ktor.features.BadRequestException import io.ktor.features.BadRequestException
import io.ktor.features.MissingRequestParameterException import io.ktor.features.MissingRequestParameterException
import io.ktor.http.ContentType import io.ktor.http.ContentType
import io.ktor.http.HttpStatusCode
import io.ktor.http.HttpStatusCode.Companion.BadRequest import io.ktor.http.HttpStatusCode.Companion.BadRequest
import io.ktor.http.HttpStatusCode.Companion.Unauthorized import io.ktor.http.HttpStatusCode.Companion.Unauthorized
import io.ktor.response.respond import io.ktor.response.respond
...@@ -32,9 +34,20 @@ internal fun Application.configureBasicApi( ...@@ -32,9 +34,20 @@ internal fun Application.configureBasicApi(
) = routing { ) = routing {
route(V) { route(V) {
get { get {
call.respondText("Hello world!", ContentType.Text.Plain) call.respondText(
"Hello, I'm a Briar teapot",
ContentType.Text.Plain,
HttpStatusCode(418, "I'm a teapot")
)
} }
authenticate { authenticate {
get("/status") {
call.handle {
if (call.principal<MailboxPrincipal>() !is MailboxPrincipal.OwnerPrincipal)
throw AuthException()
call.respond(HttpStatusCode.OK)
}
}
delete { delete {
call.handle { call.handle {
wipeManager.onWipeRequest(call) wipeManager.onWipeRequest(call)
......
package org.briarproject.mailbox.core.server
import io.ktor.client.request.get
import io.ktor.client.statement.HttpResponse
import io.ktor.client.statement.readText
import io.ktor.http.HttpStatusCode
import kotlinx.coroutines.runBlocking
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import kotlin.test.assertEquals
class StatusIntegrationTest : IntegrationTest() {
@BeforeEach
fun initDb() {
addOwnerToken()
addContact(contact1)
addContact(contact2)
}
@Test
fun `owner can access status`(): Unit = runBlocking {
val response: HttpResponse = httpClient.get("$baseUrl/status") {
authenticateWithToken(ownerToken)
}
assertEquals(HttpStatusCode.OK, response.status)
assertEquals("", response.readText())
}
@Test
fun `contact cannot access status`(): Unit = runBlocking {
val response: HttpResponse = httpClient.get("$baseUrl/status") {
authenticateWithToken(contact1.token)
}
assertEquals(HttpStatusCode.Unauthorized, response.status)
}
@Test
fun `wrong token cannot access status`(): Unit = runBlocking {
val response: HttpResponse = httpClient.get("$baseUrl/status") {
authenticateWithToken(token)
}
assertEquals(HttpStatusCode.Unauthorized, response.status)
}
@Test
fun `empty token cannot access status`(): Unit = runBlocking {
val response: HttpResponse = httpClient.get("$baseUrl/status") {
authenticateWithToken("")
}
assertEquals(HttpStatusCode.Unauthorized, response.status)
}
}
...@@ -10,10 +10,10 @@ import kotlin.test.assertEquals ...@@ -10,10 +10,10 @@ import kotlin.test.assertEquals
class WebServerIntegrationTest : IntegrationTest() { class WebServerIntegrationTest : IntegrationTest() {
@Test @Test
fun routeRespondsWithHelloWorldString(): Unit = runBlocking { fun routeRespondsWithTeapot(): Unit = runBlocking {
val response: HttpResponse = httpClient.get("$baseUrl/") val response: HttpResponse = httpClient.get("$baseUrl/")
assertEquals(200, response.status.value) assertEquals(418, response.status.value)
assertEquals("Hello world!", response.readText()) assertEquals("Hello, I'm a Briar teapot", response.readText())
} }
@Test @Test
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment