From e4b2265fe36ba6167a9bf936cce7c59555dbbbbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= <sebastian@mobanisto.de> Date: Fri, 5 Nov 2021 13:05:25 +0100 Subject: [PATCH] Add /status endpoint --- .../mailbox/core/server/Routing.kt | 14 ++++- .../core/server/StatusIntegrationTest.kt | 54 +++++++++++++++++++ 2 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 mailbox-core/src/test/java/org/briarproject/mailbox/core/server/StatusIntegrationTest.kt diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/server/Routing.kt b/mailbox-core/src/main/java/org/briarproject/mailbox/core/server/Routing.kt index 15605cf8..20ecdee0 100644 --- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/server/Routing.kt +++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/server/Routing.kt @@ -4,6 +4,7 @@ import io.ktor.application.Application import io.ktor.application.ApplicationCall import io.ktor.application.call import io.ktor.auth.authenticate +import io.ktor.auth.principal import io.ktor.features.BadRequestException import io.ktor.features.MissingRequestParameterException import io.ktor.http.ContentType @@ -33,11 +34,20 @@ internal fun Application.configureBasicApi( ) = routing { route(V) { get { - call.respondText("Hello, I'm a Briar teapot", + call.respondText( + "Hello, I'm a Briar teapot", ContentType.Text.Plain, - HttpStatusCode(418, "I'm a teapot")) + HttpStatusCode(418, "I'm a teapot") + ) } authenticate { + get("/status") { + call.handle { + if (call.principal<MailboxPrincipal>() !is MailboxPrincipal.OwnerPrincipal) + throw AuthException() + call.respond(HttpStatusCode.OK) + } + } delete { call.handle { wipeManager.onWipeRequest(call) diff --git a/mailbox-core/src/test/java/org/briarproject/mailbox/core/server/StatusIntegrationTest.kt b/mailbox-core/src/test/java/org/briarproject/mailbox/core/server/StatusIntegrationTest.kt new file mode 100644 index 00000000..2439ef58 --- /dev/null +++ b/mailbox-core/src/test/java/org/briarproject/mailbox/core/server/StatusIntegrationTest.kt @@ -0,0 +1,54 @@ +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) + } + +} -- GitLab