From d095ba0b151a4a48f71f447d1bce15c27101a090 Mon Sep 17 00:00:00 2001 From: Nico Alt Date: Sat, 13 Feb 2021 12:00:00 +0000 Subject: [PATCH] Include name/alias of already existing (pending) contact in error --- briar-headless/README.md | 14 ++++++++++-- .../headless/contact/ContactControllerImpl.kt | 6 +++-- .../ContactControllerIntegrationTest.kt | 1 + .../headless/contact/ContactControllerTest.kt | 22 +++++++++++++++---- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/briar-headless/README.md b/briar-headless/README.md index d8be1ecf6..812b7b2b5 100644 --- a/briar-headless/README.md +++ b/briar-headless/README.md @@ -118,6 +118,14 @@ Until it is completed, a pending contact is returned as JSON: Possible errors when adding a pending contact are: +#### 400: Pending contact's link is invalid + +```json +{ + "error": "INVALID_LINK" +} +``` + #### 400: Pending contact's handshake public key is invalid ```json @@ -147,7 +155,8 @@ when this happens: ```json { - "error": "CONTACT_EXISTS" + "error": "CONTACT_EXISTS", + "remoteAuthorName": "Bob" } ``` @@ -165,7 +174,8 @@ possible attack. ```json { - "error": "PENDING_EXISTS" + "error": "PENDING_EXISTS", + "pendingContactAlias": "Alice" } ``` ----------- diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/contact/ContactControllerImpl.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/contact/ContactControllerImpl.kt index 11216ecab..8a7328252 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/contact/ContactControllerImpl.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/contact/ContactControllerImpl.kt @@ -112,11 +112,13 @@ constructor( return ctx.json(details) } catch (e: ContactExistsException) { ctx.status(FORBIDDEN_403) - val details = mapOf("error" to "CONTACT_EXISTS") + val details = + mapOf("error" to "CONTACT_EXISTS", "remoteAuthorName" to e.remoteAuthor.name) return ctx.json(details) } catch (e: PendingContactExistsException) { ctx.status(FORBIDDEN_403) - val details = mapOf("error" to "PENDING_EXISTS") + val details = + mapOf("error" to "PENDING_EXISTS", "pendingContactAlias" to e.pendingContact.alias) return ctx.json(details) } return ctx.json(pendingContact.output()) diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerIntegrationTest.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerIntegrationTest.kt index 22446ee0b..65a85c1fb 100644 --- a/briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerIntegrationTest.kt +++ b/briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerIntegrationTest.kt @@ -135,6 +135,7 @@ class ContactControllerIntegrationTest: IntegrationTest() { response = post("$url/contacts/add/pending", json) assertEquals(403, response.statusCode) assertEquals("PENDING_EXISTS", response.jsonObject.getString("error")) + assertEquals(alias, response.jsonObject.getString("pendingContactAlias")) } @Test diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerTest.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerTest.kt index 52afebd76..4476f5a17 100644 --- a/briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerTest.kt +++ b/briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerTest.kt @@ -183,8 +183,15 @@ internal class ContactControllerTest : ControllerTest() { link, alias ) - } throws ContactExistsException(null, null) - every { ctx.json(mapOf("error" to "CONTACT_EXISTS")) } returns ctx + } throws ContactExistsException(null, author) + every { + ctx.json( + mapOf( + "error" to "CONTACT_EXISTS", + "remoteAuthorName" to author.name + ) + ) + } returns ctx controller.addPendingContact(ctx) verify { ctx.status(403) } } @@ -204,8 +211,15 @@ internal class ContactControllerTest : ControllerTest() { link, alias ) - } throws PendingContactExistsException(null) - every { ctx.json(mapOf("error" to "PENDING_EXISTS")) } returns ctx + } throws PendingContactExistsException(pendingContact) + every { + ctx.json( + mapOf( + "error" to "PENDING_EXISTS", + "pendingContactAlias" to pendingContact.alias + ) + ) + } returns ctx controller.addPendingContact(ctx) verify { ctx.status(403) } }