From 1fa1d7bab02d220f1d8431c6e06b22bdfe29011f Mon Sep 17 00:00:00 2001 From: To-om Date: Fri, 30 Apr 2021 12:49:45 +0200 Subject: [PATCH] #2010 Fix custom fields format --- .../org/thp/thehive/dto/v1/CustomFieldValue.scala | 10 +++++++++- .../org/thp/thehive/controllers/v1/Conversion.scala | 11 +++++++++++ .../thp/thehive/controllers/v1/CustomFieldCtrl.scala | 5 +++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/dto/src/main/scala/org/thp/thehive/dto/v1/CustomFieldValue.scala b/dto/src/main/scala/org/thp/thehive/dto/v1/CustomFieldValue.scala index df6ade452a..41d47130fb 100644 --- a/dto/src/main/scala/org/thp/thehive/dto/v1/CustomFieldValue.scala +++ b/dto/src/main/scala/org/thp/thehive/dto/v1/CustomFieldValue.scala @@ -8,7 +8,14 @@ import play.api.libs.json._ import java.util.Date -case class InputCustomField(name: String, description: String, `type`: String, mandatory: Option[Boolean]) +case class InputCustomField( + name: String, + displayName: Option[String], + description: String, + `type`: String, + mandatory: Option[Boolean], + options: Seq[JsValue] = Nil +) object InputCustomField { implicit val writes: Writes[InputCustomField] = Json.writes[InputCustomField] @@ -22,6 +29,7 @@ case class OutputCustomField( _createdAt: Date, _updatedAt: Option[Date] = None, name: String, + displayName: String, description: String, `type`: String, options: Seq[JsValue], diff --git a/thehive/app/org/thp/thehive/controllers/v1/Conversion.scala b/thehive/app/org/thp/thehive/controllers/v1/Conversion.scala index 99d70f90d7..9446ca0880 100644 --- a/thehive/app/org/thp/thehive/controllers/v1/Conversion.scala +++ b/thehive/app/org/thp/thehive/controllers/v1/Conversion.scala @@ -181,6 +181,17 @@ object Conversion { .transform ) + implicit class InputCustomFieldOps(inputCustomField: InputCustomField) { + + def toCustomField: CustomField = + inputCustomField + .into[CustomField] + .withFieldComputed(_.`type`, icf => CustomFieldType.withName(icf.`type`)) + .withFieldComputed(_.mandatory, _.mandatory.getOrElse(false)) + .withFieldComputed(_.displayName, c => c.displayName.getOrElse(c.name)) + .transform + } + implicit val customFieldOutput: Renderer.Aux[CustomField with Entity, OutputCustomField] = Renderer.toJson[CustomField with Entity, OutputCustomField](customField => customField diff --git a/thehive/app/org/thp/thehive/controllers/v1/CustomFieldCtrl.scala b/thehive/app/org/thp/thehive/controllers/v1/CustomFieldCtrl.scala index 344755ea12..ead8769d67 100644 --- a/thehive/app/org/thp/thehive/controllers/v1/CustomFieldCtrl.scala +++ b/thehive/app/org/thp/thehive/controllers/v1/CustomFieldCtrl.scala @@ -7,6 +7,7 @@ import org.thp.scalligraph.query.{ParamQuery, PublicProperties, PublicPropertyLi import org.thp.scalligraph.traversal.TraversalOps._ import org.thp.scalligraph.traversal.{IteratorOutput, Traversal} import org.thp.thehive.controllers.v1.Conversion._ +import org.thp.thehive.dto.v1.InputCustomField import org.thp.thehive.models._ import org.thp.thehive.services.CustomFieldSrv import play.api.mvc.{Action, AnyContent, Results} @@ -42,11 +43,11 @@ class CustomFieldCtrl @Inject() (entrypoint: Entrypoint, db: Database, customFie def create: Action[AnyContent] = entrypoint("create custom field") - .extract("customField", FieldsParser[CustomField]) + .extract("customField", FieldsParser[InputCustomField]) .authTransaction(db) { implicit request => implicit graph => val customField = request.body("customField") customFieldSrv - .create(customField) + .create(customField.toCustomField) .map(createdCustomField => Results.Created(createdCustomField.toJson)) }