From 257d8541c2650fc9d0c6af3350f13a7a36cc5027 Mon Sep 17 00:00:00 2001 From: To-om Date: Tue, 26 May 2020 13:37:55 +0200 Subject: [PATCH] #1353 Add queries to navigate on entities --- ScalliGraph | 2 +- thehive/app/org/thp/thehive/controllers/v1/AlertCtrl.scala | 7 +++++-- thehive/app/org/thp/thehive/controllers/v1/CaseCtrl.scala | 3 ++- .../org/thp/thehive/controllers/v1/ObservableCtrl.scala | 6 ++++++ thehive/app/org/thp/thehive/controllers/v1/TaskCtrl.scala | 7 +++++-- thehive/app/org/thp/thehive/services/ObservableSrv.scala | 2 ++ 6 files changed, 21 insertions(+), 6 deletions(-) diff --git a/ScalliGraph b/ScalliGraph index e1f60dc7a9..6a05ca86fb 160000 --- a/ScalliGraph +++ b/ScalliGraph @@ -1 +1 @@ -Subproject commit e1f60dc7a98360ef8fda91ea67a69e32a973e8d9 +Subproject commit 6a05ca86fbd350785007efdb13726b3a54d98ed9 diff --git a/thehive/app/org/thp/thehive/controllers/v1/AlertCtrl.scala b/thehive/app/org/thp/thehive/controllers/v1/AlertCtrl.scala index 86833437d6..9f28339b7e 100644 --- a/thehive/app/org/thp/thehive/controllers/v1/AlertCtrl.scala +++ b/thehive/app/org/thp/thehive/controllers/v1/AlertCtrl.scala @@ -39,8 +39,11 @@ class AlertCtrl @Inject() ( alertSteps .richPage(range.from, range.to, withTotal = true)(_.richAlert) ) - override val outputQuery: Query = Query.output[RichAlert, AlertSteps](_.richAlert) - override val extraQueries: Seq[ParamQuery[_]] = Seq() + override val outputQuery: Query = Query.output[RichAlert, AlertSteps](_.richAlert) + override val extraQueries: Seq[ParamQuery[_]] = Seq( + Query[AlertSteps, ObservableSteps]("observables", (alertSteps, _) => alertSteps.observables), + Query[AlertSteps, CaseSteps]("case", (alertSteps, _) => alertSteps.`case`) + ) def create: Action[AnyContent] = entrypoint("create alert") diff --git a/thehive/app/org/thp/thehive/controllers/v1/CaseCtrl.scala b/thehive/app/org/thp/thehive/controllers/v1/CaseCtrl.scala index 6bba60526e..082a5df918 100644 --- a/thehive/app/org/thp/thehive/controllers/v1/CaseCtrl.scala +++ b/thehive/app/org/thp/thehive/controllers/v1/CaseCtrl.scala @@ -55,7 +55,8 @@ class CaseCtrl @Inject() ( override val extraQueries: Seq[ParamQuery[_]] = Seq( Query[CaseSteps, TaskSteps]("tasks", (caseSteps, authContext) => caseSteps.tasks(authContext)), Query[CaseSteps, ObservableSteps]("observables", (caseSteps, authContext) => caseSteps.observables(authContext)), - Query[CaseSteps, UserSteps]("assignableUsers", (caseSteps, authContext) => caseSteps.assignableUsers(authContext)) + Query[CaseSteps, UserSteps]("assignableUsers", (caseSteps, authContext) => caseSteps.assignableUsers(authContext)), + Query[CaseSteps, OrganisationSteps]("organisations", (caseSteps, authContext) => caseSteps.organisations.visible(authContext)) ) def create: Action[AnyContent] = diff --git a/thehive/app/org/thp/thehive/controllers/v1/ObservableCtrl.scala b/thehive/app/org/thp/thehive/controllers/v1/ObservableCtrl.scala index 8d5e5601c6..02433e3e9e 100644 --- a/thehive/app/org/thp/thehive/controllers/v1/ObservableCtrl.scala +++ b/thehive/app/org/thp/thehive/controllers/v1/ObservableCtrl.scala @@ -54,6 +54,12 @@ class ObservableCtrl @Inject() ( ) override val outputQuery: Query = Query.output[RichObservable, ObservableSteps](_.richObservable) + override val extraQueries: Seq[ParamQuery[_]] = Seq( + Query[ObservableSteps, OrganisationSteps]("organisations", (observableSteps, authContext) => observableSteps.organisations.visible(authContext)), + Query[ObservableSteps, ObservableSteps]("similar", (observableSteps, authContext) => observableSteps.similar.visible(authContext)), + Query[ObservableSteps, CaseSteps]("case", (observableSteps, _) => observableSteps.`case`) + ) + def create(caseId: String): Action[AnyContent] = entryPoint("create artifact") .extract("artifact", FieldsParser[InputObservable]) diff --git a/thehive/app/org/thp/thehive/controllers/v1/TaskCtrl.scala b/thehive/app/org/thp/thehive/controllers/v1/TaskCtrl.scala index 635a6c4635..ff85496532 100644 --- a/thehive/app/org/thp/thehive/controllers/v1/TaskCtrl.scala +++ b/thehive/app/org/thp/thehive/controllers/v1/TaskCtrl.scala @@ -9,7 +9,7 @@ import org.thp.scalligraph.steps.StepsOps._ import org.thp.thehive.controllers.v1.Conversion._ import org.thp.thehive.dto.v1.InputTask import org.thp.thehive.models.{Permissions, RichTask} -import org.thp.thehive.services.{CaseSrv, OrganisationSrv, ShareSrv, TaskSrv, TaskSteps, UserSteps} +import org.thp.thehive.services.{CaseSrv, CaseSteps, LogSteps, OrganisationSrv, OrganisationSteps, ShareSrv, TaskSrv, TaskSteps, UserSteps} import play.api.mvc.{Action, AnyContent, Results} import scala.util.Success @@ -41,7 +41,10 @@ class TaskCtrl @Inject() ( ) override val outputQuery: Query = Query.output[RichTask, TaskSteps](_.richTask) override val extraQueries: Seq[ParamQuery[_]] = Seq( - Query[TaskSteps, UserSteps]("assignableUsers", (taskSteps, authContext) => taskSteps.assignableUsers(authContext)) + Query[TaskSteps, UserSteps]("assignableUsers", (taskSteps, authContext) => taskSteps.assignableUsers(authContext)), + Query[TaskSteps, LogSteps]("logs", (taskSteps, _) => taskSteps.logs), + Query[TaskSteps, CaseSteps]("case", (taskSteps, _) => taskSteps.`case`), + Query[TaskSteps, OrganisationSteps]("organisations", (taskSteps, authContext) => taskSteps.organisations.visible(authContext)) ) def create: Action[AnyContent] = diff --git a/thehive/app/org/thp/thehive/services/ObservableSrv.scala b/thehive/app/org/thp/thehive/services/ObservableSrv.scala index de7f1d2950..473d641508 100644 --- a/thehive/app/org/thp/thehive/services/ObservableSrv.scala +++ b/thehive/app/org/thp/thehive/services/ObservableSrv.scala @@ -193,6 +193,8 @@ class ObservableSteps(raw: GremlinScala[Vertex])(implicit db: Database, graph: G .has("login", authContext.userId) ) + def organisations = new OrganisationSteps(raw.inTo[ShareObservable].inTo[OrganisationShare]) + override def newInstance(): ObservableSteps = new ObservableSteps(raw.clone()) def richObservable: Traversal[RichObservable, RichObservable] =