Skip to content

Commit

Permalink
#175 Apply user defined case template when creating case from alert
Browse files Browse the repository at this point in the history
  • Loading branch information
To-om committed Jun 12, 2017
1 parent b0322c9 commit def8ff7
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 12 deletions.
5 changes: 3 additions & 2 deletions thehive-backend/app/controllers/AlertCtrl.scala
Original file line number Diff line number Diff line change
Expand Up @@ -129,10 +129,11 @@ class AlertCtrl @Inject() (
} yield renderer.toOutput(OK, updatedAlert)
}

def createCase(id: String): Action[AnyContent] = authenticated(Role.write).async { implicit request
def createCase(id: String): Action[Fields] = authenticated(Role.write).async(fieldsBodyParser) { implicit request
for {
alert alertSrv.get(id)
caze alertSrv.createCase(alert)
customCaseTemplate = request.body.getString("caseTemplate")
caze alertSrv.createCase(alert, customCaseTemplate)
} yield renderer.toOutput(CREATED, caze)
}

Expand Down
13 changes: 7 additions & 6 deletions thehive-backend/app/services/AlertSrv.scala
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import scala.concurrent.{ ExecutionContext, Future }
import scala.util.{ Failure, Success, Try }

trait AlertTransformer {
def createCase(alert: Alert)(implicit authContext: AuthContext): Future[Case]
def createCase(alert: Alert, customCaseTemplate: Option[String])(implicit authContext: AuthContext): Future[Case]
def mergeWithCase(alert: Alert, caze: Case)(implicit authContext: AuthContext): Future[Case]
}

Expand Down Expand Up @@ -119,8 +119,9 @@ class AlertSrv(
}
}

def getCaseTemplate(alert: Alert): Future[Option[CaseTemplate]] = {
val templateName = alert.caseTemplate()
def getCaseTemplate(alert: Alert, customCaseTemplate: Option[String]): Future[Option[CaseTemplate]] = {
val templateName = customCaseTemplate
.orElse(alert.caseTemplate())
.orElse(templates.get(alert.tpe()))
.getOrElse(alert.tpe())
caseTemplateSrv.getByName(templateName)
Expand All @@ -130,15 +131,15 @@ class AlertSrv(

private val dataExtractor = "^(.*);(.*);(.*)".r

def createCase(alert: Alert)(implicit authContext: AuthContext): Future[Case] = {
def createCase(alert: Alert, customCaseTemplate: Option[String])(implicit authContext: AuthContext): Future[Case] = {
alert.caze() match {
case Some(id) caseSrv.get(id)
case None
connectors.get(alert.tpe()) match {
case Some(connector: AlertTransformer) connector.createCase(alert)
case Some(connector: AlertTransformer) connector.createCase(alert, customCaseTemplate)
case _
for {
caseTemplate getCaseTemplate(alert)
caseTemplate getCaseTemplate(alert, customCaseTemplate)
caze caseSrv.create(
Fields.empty
.set("title", s"#${alert.sourceRef()} " + alert.title())
Expand Down
4 changes: 2 additions & 2 deletions thehive-misp/app/connectors/misp/MispCtrl.scala
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ class MispCtrl @Inject() (
Ok("")
}

override def createCase(alert: Alert)(implicit authContext: AuthContext): Future[Case] = {
mispSrv.createCase(alert)
override def createCase(alert: Alert, customCaseTemplate: Option[String])(implicit authContext: AuthContext): Future[Case] = {
mispSrv.createCase(alert, customCaseTemplate)
}

override def mergeWithCase(alert: Alert, caze: Case)(implicit authContext: AuthContext): Future[Case] = {
Expand Down
4 changes: 2 additions & 2 deletions thehive-misp/app/connectors/misp/MispSrv.scala
Original file line number Diff line number Diff line change
Expand Up @@ -343,12 +343,12 @@ class MispSrv @Inject() (
}
}

def createCase(alert: Alert)(implicit authContext: AuthContext): Future[Case] = {
def createCase(alert: Alert, customCaseTemplate: Option[String])(implicit authContext: AuthContext): Future[Case] = {
alert.caze() match {
case Some(id) caseSrv.get(id)
case None
for {
caseTemplate alertSrv.getCaseTemplate(alert)
caseTemplate alertSrv.getCaseTemplate(alert, customCaseTemplate)
caze caseSrv.create(Fields(alert.toCaseJson), caseTemplate)
_ mergeWithCase(alert, caze)
} yield caze
Expand Down

0 comments on commit def8ff7

Please sign in to comment.