Skip to content

Commit

Permalink
#1766 Update route for procedure
Browse files Browse the repository at this point in the history
  • Loading branch information
rriclet committed Feb 4, 2021
1 parent 3abc59e commit d6af9cf
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 13 deletions.
3 changes: 2 additions & 1 deletion thehive/app/org/thp/thehive/controllers/v1/Properties.scala
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,7 @@ class Properties @Inject() (
.property("owningOrganisation", UMapping.string)(
_.authSelect((cases, authContext) => cases.origin.visible(authContext).value(_.name)).readonly
)
.property("procedures", UMapping.entityId.sequence)(_.select(_.procedure.value(_._id)).readonly)
.build

lazy val caseTemplate: PublicProperties =
Expand Down Expand Up @@ -361,7 +362,7 @@ class Properties @Inject() (
lazy val procedure: PublicProperties =
PublicPropertyListBuilder[Procedure]
.property("description", UMapping.string)(_.field.updatable)
.property("occurence", UMapping.date)(_.field.readonly)
.property("occurence", UMapping.date)(_.field.updatable)
.build

lazy val profile: PublicProperties =
Expand Down
1 change: 1 addition & 0 deletions thehive/app/org/thp/thehive/controllers/v1/Router.scala
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ class Router @Inject() (

case POST(p"/procedure") => procedureCtrl.create
case GET(p"/procedure/$procedureId") => procedureCtrl.get(procedureId)
case PATCH(p"/procedure/$procedureId") => procedureCtrl.update(procedureId)
case DELETE(p"/procedure/$procedureId") => procedureCtrl.delete(procedureId)

case POST(p"/profile") => profileCtrl.create
Expand Down
16 changes: 6 additions & 10 deletions thehive/app/org/thp/thehive/services/ProcedureSrv.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import org.thp.scalligraph.models.{Database, Entity}
import org.thp.scalligraph.query.PropertyUpdater
import org.thp.scalligraph.services._
import org.thp.scalligraph.traversal.TraversalOps.TraversalOpsDefs
import org.thp.scalligraph.traversal.{Converter, StepLabel, Traversal}
import org.thp.scalligraph.traversal.{Converter, Traversal}
import org.thp.thehive.controllers.v1.Conversion._
import org.thp.thehive.models._
import org.thp.thehive.services.ProcedureOps._
Expand Down Expand Up @@ -73,16 +73,12 @@ object ProcedureOps {
def get(idOrName: EntityIdOrName): Traversal.V[Procedure] =
idOrName.fold(traversal.getByIds(_), _ => traversal.limit(0))

def richProcedure: Traversal[RichProcedure, JMap[String, Any], Converter[RichProcedure, JMap[String, Any]]] = {
val procedure = StepLabel.v[Procedure]
val pattern = StepLabel.v[Pattern]
def richProcedure: Traversal[RichProcedure, JMap[String, Any], Converter[RichProcedure, JMap[String, Any]]] =
traversal
.as(procedure)
.in[ProcedurePattern]
.v[Pattern]
.as(pattern)
.select((procedure, pattern))
.project(
_.by
.by(_.pattern)
)
.domainMap { case (procedure, pattern) => RichProcedure(procedure, pattern) }
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,42 @@ class ProcedureCtrlTest extends PlaySpecification with TestAppBuilder {
)
}

// TODO test update of fields
// description
"update a procedure" in testApp { app =>
val request1 = FakeRequest("POST", "/api/v1/procedure/testProcedure3")
.withJsonBody(
Json.toJson(
InputProcedure(
"an old description",
new Date(),
"1",
"T123"
)
)
)
.withHeaders("user" -> "[email protected]")
val result1 = app[ProcedureCtrl].create(request1)
val procedureId = contentAsJson(result1).as[OutputProcedure]._id
status(result1) must beEqualTo(201).updateMessage(s => s"$s\n${contentAsString(result1)}")

val updatedDate = new Date()
val request2 = FakeRequest("PATCH", "/api/v1/procedure/testProcedure3")
.withHeaders("user" -> "[email protected]")
.withJsonBody(Json.obj("description" -> "a new description", "occurence" -> updatedDate))
val result2 = app[ProcedureCtrl].update(procedureId)(request2)
status(result2) must beEqualTo(204).updateMessage(s => s"$s\n${contentAsString(result2)}")

val request3 = FakeRequest("GET", "/api/v1/procedure/testProcedure3")
.withHeaders("user" -> "[email protected]")
val result3 = app[ProcedureCtrl].get(procedureId)(request3)
status(result3) must beEqualTo(200).updateMessage(s => s"$s\n${contentAsString(result3)}")

val resultProcedure = contentAsJson(result3).as[OutputProcedure]
TestProcedure(resultProcedure) must_=== TestProcedure(
"a new description",
updatedDate,
"T123"
)
}

"delete a procedure" in testApp { app =>
val request1 = FakeRequest("POST", "/api/v1/procedure/testProcedure3")
Expand Down

0 comments on commit d6af9cf

Please sign in to comment.