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 15605cf8578c3dd017e75c0b3264c2657688e780..20ecdee08460628233187c39fc9244cb35b8f83d 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 0000000000000000000000000000000000000000..2439ef58a6690482d36b4ed24bd65a94e8a5b9a4 --- /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) + } + +}