From 11f56d5070aaeaa7eef845364c7177c487309225 Mon Sep 17 00:00:00 2001 From: Nico Alt <nicoalt@posteo.org> Date: Fri, 25 Sep 2020 18:30:44 +0200 Subject: [PATCH] Add method to delete all private messages to REST API Needed for https://code.briarproject.org/briar/briar-gtk/-/issues/11. Fixes #1782 --- briar-headless/README.md | 6 +++++ .../org/briarproject/briar/headless/Router.kt | 3 +++ .../headless/messaging/MessagingController.kt | 2 ++ .../messaging/MessagingControllerImpl.kt | 11 ++++++++ .../messaging/MessagingControllerImplTest.kt | 25 +++++++++++++++++++ 5 files changed, 47 insertions(+) diff --git a/briar-headless/README.md b/briar-headless/README.md index fbeb7c8042..701c74770c 100644 --- a/briar-headless/README.md +++ b/briar-headless/README.md @@ -234,6 +234,12 @@ The text of the message should be posted as JSON: } ``` +### Deleting all private messages + +`DELETE /v1/messages/{contactId}/all` + +It returns with a status code `200`, if removal was successful. + ### Listing blog posts `GET /v1/blogs/posts` diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/Router.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/Router.kt index 940eac8fe2..25d474b8b3 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/Router.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/Router.kt @@ -86,6 +86,9 @@ constructor( get { ctx -> messagingController.list(ctx) } post { ctx -> messagingController.write(ctx) } } + path("/messages/:contactId/all") { + delete { ctx -> messagingController.deleteAllMessages(ctx) } + } path("/forums") { get { ctx -> forumController.list(ctx) } post { ctx -> forumController.create(ctx) } diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingController.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingController.kt index 55d7024f4d..cc53b1c237 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingController.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingController.kt @@ -8,4 +8,6 @@ interface MessagingController { fun write(ctx: Context): Context + fun deleteAllMessages(ctx: Context): Context + } diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt index df5607170e..147f333690 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt @@ -83,6 +83,17 @@ constructor( return ctx.json(m.output(contact.id, text)) } + override fun deleteAllMessages(ctx: Context): Context { + val contactId = ctx.getContactIdFromPathParam() + try { + conversationManager.deleteAllMessages(contactId) + } catch (e: NoSuchContactException) { + throw NotFoundResponse() + } + return ctx + + } + override fun eventOccurred(e: Event) { when (e) { is ConversationMessageReceivedEvent<*> -> { diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt index 6feac73e2f..96e5b3629f 100644 --- a/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt +++ b/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt @@ -17,6 +17,7 @@ import org.briarproject.bramble.test.ImmediateExecutor import org.briarproject.bramble.test.TestUtils.getRandomId import org.briarproject.bramble.util.StringUtils.getRandomString import org.briarproject.briar.api.client.SessionId +import org.briarproject.briar.api.conversation.DeletionResult import org.briarproject.briar.api.introduction.IntroductionRequest import org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH import org.briarproject.briar.api.messaging.MessagingManager @@ -315,6 +316,30 @@ internal class MessagingControllerImplTest : ControllerTest() { assertJsonEquals(json, request.output(contact.id)) } + @Test + fun testDeleteAllMessages() { + every { ctx.pathParam("contactId") } returns "1" + every { conversationManager.deleteAllMessages(ContactId(1)) } returns DeletionResult() + controller.deleteAllMessages(ctx) + } + + @Test + fun testDeleteAllMessagesInvalidContactId() { + every { ctx.pathParam("contactId") } returns "foo" + assertThrows(NotFoundResponse::class.java) { + controller.deleteAllMessages(ctx) + } + } + + @Test + fun testDeleteAllMessagesNonexistentContactId() { + every { ctx.pathParam("contactId") } returns "1" + every { conversationManager.deleteAllMessages(ContactId(1)) } throws NoSuchContactException() + assertThrows(NotFoundResponse::class.java) { + controller.deleteAllMessages(ctx) + } + } + private fun expectGetContact() { every { ctx.pathParam("contactId") } returns contact.id.int.toString() every { contactManager.getContact(contact.id) } returns contact -- GitLab