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 1157de2d83417d1d2814c0fbec755814d43b854c..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,9 +4,11 @@ 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 +import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode.Companion.BadRequest import io.ktor.http.HttpStatusCode.Companion.Unauthorized import io.ktor.response.respond @@ -32,9 +34,20 @@ internal fun Application.configureBasicApi( ) = routing { route(V) { 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 { + 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) + } + +} diff --git a/mailbox-core/src/test/java/org/briarproject/mailbox/core/server/WebServerIntegrationTest.kt b/mailbox-core/src/test/java/org/briarproject/mailbox/core/server/WebServerIntegrationTest.kt index 95dc851d1fea703529fdeb4ad69687a9a7dc936d..0d363e3a69042d8aa4879c8e719ade079da9b909 100644 --- a/mailbox-core/src/test/java/org/briarproject/mailbox/core/server/WebServerIntegrationTest.kt +++ b/mailbox-core/src/test/java/org/briarproject/mailbox/core/server/WebServerIntegrationTest.kt @@ -10,10 +10,10 @@ import kotlin.test.assertEquals class WebServerIntegrationTest : IntegrationTest() { @Test - fun routeRespondsWithHelloWorldString(): Unit = runBlocking { + fun routeRespondsWithTeapot(): Unit = runBlocking { val response: HttpResponse = httpClient.get("$baseUrl/") - assertEquals(200, response.status.value) - assertEquals("Hello world!", response.readText()) + assertEquals(418, response.status.value) + assertEquals("Hello, I'm a Briar teapot", response.readText()) } @Test