From 482258fc92c2b9c384f0782a11d9679b02fd6a4d Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 21 Jan 2022 12:08:52 -0300 Subject: [PATCH] Add method for deleting a file from a mailbox --- .../bramble/mailbox/MailboxApi.java | 8 ++++ .../bramble/mailbox/MailboxApiImpl.java | 13 ++++++ .../bramble/mailbox/MailboxApiTest.java | 40 +++++++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApi.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApi.java index 6d5eec1df..6a5b946f9 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApi.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApi.java @@ -88,6 +88,14 @@ interface MailboxApi { void getFile(MailboxProperties properties, String folderId, String fileId, File file) throws IOException, ApiException; + /** + * Used by owner and contacts to delete files. + *

+ * Returns 200 OK (no exception) if deletion was successful. + */ + void deleteFile(MailboxProperties properties, String folderId, + String fileId) throws IOException, ApiException; + @Immutable @JsonSerialize class MailboxContact { diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApiImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApiImpl.java index 751600ad4..a027f41eb 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApiImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApiImpl.java @@ -221,6 +221,19 @@ class MailboxApiImpl implements MailboxApi { copyAndClose(body.byteStream(), outputStream); } + @Override + public void deleteFile(MailboxProperties properties, String folderId, + String fileId) throws IOException, ApiException { + String path = "/files/" + folderId + "/" + fileId; + Request request = getRequestBuilder(properties.getAuthToken()) + .delete() + .url(properties.getOnionAddress() + path) + .build(); + OkHttpClient client = httpClientProvider.get(); + Response response = client.newCall(request).execute(); + if (response.code() != 200) throw new ApiException(); + } + /* Helper Functions */ private Response sendGetRequest(MailboxProperties properties, String path) diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxApiTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxApiTest.java index 4c0c53b44..082a81df1 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxApiTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxApiTest.java @@ -582,6 +582,46 @@ public class MailboxApiTest extends BrambleTestCase { assertEquals(0, readBytes(file3).length); } + @Test + public void testDeleteFile() throws Exception { + String name = getMailboxSecret(); + + MockWebServer server = new MockWebServer(); + server.enqueue(new MockResponse()); + server.enqueue(new MockResponse().setResponseCode(205)); + server.enqueue(new MockResponse().setResponseCode(401)); + server.start(); + String baseUrl = getBaseUrl(server); + MailboxProperties properties = + new MailboxProperties(baseUrl, token, true); + + // file gets deleted as expected + api.deleteFile(properties, contactInboxId, name); + RecordedRequest request1 = server.takeRequest(); + assertEquals("DELETE", request1.getMethod()); + assertEquals("/files/" + contactInboxId + "/" + name, + request1.getPath()); + assertToken(request1, token); + + // request is not returning 200 + assertThrows(ApiException.class, () -> + api.deleteFile(properties, contactInboxId, name)); + RecordedRequest request2 = server.takeRequest(); + assertEquals("DELETE", request2.getMethod()); + assertEquals("/files/" + contactInboxId + "/" + name, + request2.getPath()); + assertToken(request2, token); + + // request is not authorized + assertThrows(ApiException.class, () -> + api.deleteFile(properties, contactInboxId, name)); + RecordedRequest request3 = server.takeRequest(); + assertEquals("DELETE", request3.getMethod()); + assertEquals("/files/" + contactInboxId + "/" + name, + request3.getPath()); + assertToken(request3, token); + } + private String getBaseUrl(MockWebServer server) { String baseUrl = server.url("").toString(); return baseUrl.substring(0, baseUrl.length() - 1);