briar-headless: Add endpoint for removing a contact

This commit is contained in:
Torsten Grote
2018-10-24 12:12:33 -03:00
parent 822597b4c6
commit 51209b5eec
6 changed files with 75 additions and 9 deletions

View File

@@ -7,9 +7,11 @@ import io.javalin.Context
import io.javalin.Javalin
import io.javalin.JavalinEvent.SERVER_START_FAILED
import io.javalin.JavalinEvent.SERVER_STOPPED
import io.javalin.NotFoundResponse
import io.javalin.apibuilder.ApiBuilder.*
import io.javalin.core.util.ContextUtil
import io.javalin.core.util.Header.AUTHORIZATION
import org.briarproject.bramble.api.contact.ContactId
import org.briarproject.briar.headless.blogs.BlogController
import org.briarproject.briar.headless.contact.ContactController
import org.briarproject.briar.headless.event.WebSocketController
@@ -63,6 +65,9 @@ constructor(
path("/v1") {
path("/contacts") {
get { ctx -> contactController.list(ctx) }
path("/:contactId") {
delete { ctx -> contactController.delete(ctx) }
}
}
path("/messages/:contactId") {
get { ctx -> messagingController.list(ctx) }
@@ -112,6 +117,21 @@ constructor(
}
/**
* Returns a [ContactId] from the "contactId" path parameter.
*
* @throws NotFoundResponse when contactId is not a number.
*/
fun Context.getContactIdFromPathParam(): ContactId {
val contactString = pathParam("contactId")
val contactInt = try {
Integer.parseInt(contactString)
} catch (e: NumberFormatException) {
throw NotFoundResponse()
}
return ContactId(contactInt)
}
/**
* Returns a String from the JSON field or throws [BadRequestResponse] if null or empty.
*/

View File

@@ -5,5 +5,6 @@ import io.javalin.Context
interface ContactController {
fun list(ctx: Context): Context
fun delete(ctx: Context): Context
}

View File

@@ -1,7 +1,10 @@
package org.briarproject.briar.headless.contact
import io.javalin.Context
import io.javalin.NotFoundResponse
import org.briarproject.bramble.api.contact.ContactManager
import org.briarproject.bramble.api.db.NoSuchContactException
import org.briarproject.briar.headless.getContactIdFromPathParam
import javax.annotation.concurrent.Immutable
import javax.inject.Inject
import javax.inject.Singleton
@@ -19,4 +22,14 @@ constructor(private val contactManager: ContactManager) : ContactController {
return ctx.json(contacts)
}
override fun delete(ctx: Context): Context {
val contactId = ctx.getContactIdFromPathParam()
try {
contactManager.removeContact(contactId)
} catch (e: NoSuchContactException) {
throw NotFoundResponse()
}
return ctx
}
}

View File

@@ -26,6 +26,7 @@ import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse
import org.briarproject.briar.headless.event.WebSocketController
import org.briarproject.briar.headless.event.output
import org.briarproject.briar.headless.getContactIdFromPathParam
import org.briarproject.briar.headless.getFromJson
import org.briarproject.briar.headless.json.JsonDict
import java.util.concurrent.Executor
@@ -84,13 +85,7 @@ constructor(
}
private fun getContact(ctx: Context): Contact {
val contactString = ctx.pathParam("contactId")
val contactInt = try {
Integer.parseInt(contactString)
} catch (e: NumberFormatException) {
throw NotFoundResponse()
}
val contactId = ContactId(contactInt)
val contactId = ctx.getContactIdFromPathParam()
return try {
contactManager.getContact(contactId)
} catch (e: NoSuchContactException) {