diff --git a/ScalliGraph b/ScalliGraph index a6f82a382e..916c53145f 160000 --- a/ScalliGraph +++ b/ScalliGraph @@ -1 +1 @@ -Subproject commit a6f82a382eb7191640a621591b20a072f96375c8 +Subproject commit 916c53145f7a830266ae1bc85df2da10ba86598a diff --git a/thehive/app/org/thp/thehive/controllers/v0/AlertCtrl.scala b/thehive/app/org/thp/thehive/controllers/v0/AlertCtrl.scala index 85f54705d6..68fa42aaf1 100644 --- a/thehive/app/org/thp/thehive/controllers/v0/AlertCtrl.scala +++ b/thehive/app/org/thp/thehive/controllers/v0/AlertCtrl.scala @@ -206,27 +206,37 @@ class AlertCtrl @Inject() ( def markAsRead(alertId: String): Action[AnyContent] = entrypoint("mark alert as read") .authTransaction(db) { implicit request => implicit graph => - alertSrv - .get(EntityIdOrName(alertId)) - .can(Permissions.manageAlert) - .existsOrFail - .map { _ => - alertSrv.markAsRead(EntityIdOrName(alertId)) - Results.NoContent - } + for { + alert <- + alertSrv + .get(EntityIdOrName(alertId)) + .can(Permissions.manageAlert) + .getOrFail("Alert") + _ <- alertSrv.markAsRead(alert._id) + alertWithObservables <- + alertSrv + .get(alert) + .project(_.by(_.richAlert).by(_.observables.richObservable.fold)) + .getOrFail("Alert") + } yield Results.Ok(alertWithObservables.toJson) } def markAsUnread(alertId: String): Action[AnyContent] = entrypoint("mark alert as unread") .authTransaction(db) { implicit request => implicit graph => - alertSrv - .get(EntityIdOrName(alertId)) - .can(Permissions.manageAlert) - .existsOrFail - .map { _ => - alertSrv.markAsUnread(EntityIdOrName(alertId)) - Results.NoContent - } + for { + alert <- + alertSrv + .get(EntityIdOrName(alertId)) + .can(Permissions.manageAlert) + .getOrFail("Alert") + _ <- alertSrv.markAsUnread(alert._id) + alertWithObservables <- + alertSrv + .get(alert) + .project(_.by(_.richAlert).by(_.observables.richObservable.fold)) + .getOrFail("Alert") + } yield Results.Ok(alertWithObservables.toJson) } def createCase(alertId: String): Action[AnyContent] = @@ -249,27 +259,37 @@ class AlertCtrl @Inject() ( def followAlert(alertId: String): Action[AnyContent] = entrypoint("follow alert") .authTransaction(db) { implicit request => implicit graph => - alertSrv - .get(EntityIdOrName(alertId)) - .can(Permissions.manageAlert) - .existsOrFail - .map { _ => - alertSrv.followAlert(EntityIdOrName(alertId)) - Results.NoContent - } + for { + alert <- + alertSrv + .get(EntityIdOrName(alertId)) + .can(Permissions.manageAlert) + .getOrFail("Alert") + _ <- alertSrv.followAlert(alert._id) + alertWithObservables <- + alertSrv + .get(alert) + .project(_.by(_.richAlert).by(_.observables.richObservable.fold)) + .getOrFail("Alert") + } yield Results.Ok(alertWithObservables.toJson) } def unfollowAlert(alertId: String): Action[AnyContent] = entrypoint("unfollow alert") .authTransaction(db) { implicit request => implicit graph => - alertSrv - .get(EntityIdOrName(alertId)) - .can(Permissions.manageAlert) - .existsOrFail - .map { _ => - alertSrv.unfollowAlert(EntityIdOrName(alertId)) - Results.NoContent - } + for { + alert <- + alertSrv + .get(EntityIdOrName(alertId)) + .can(Permissions.manageAlert) + .getOrFail("Alert") + _ <- alertSrv.unfollowAlert(alert._id) + alertWithObservables <- + alertSrv + .get(alert) + .project(_.by(_.richAlert).by(_.observables.richObservable.fold)) + .getOrFail("Alert") + } yield Results.Ok(alertWithObservables.toJson) } private def createObservable(observable: InputObservable)(implicit