From d4d85e7e63a668bb7d357c4002f85851bb65b6dd Mon Sep 17 00:00:00 2001 From: To-om Date: Wed, 13 Sep 2017 17:25:59 +0200 Subject: [PATCH] #38 Include input element from analyzer output --- app/models/Job.scala | 2 +- app/models/JsonFormat.scala | 9 ++++++--- app/models/Report.scala | 4 ++-- app/services/ExternalAnalyzerSrv.scala | 22 +++++++++++----------- app/services/MispSrv.scala | 4 ++-- 5 files changed, 22 insertions(+), 19 deletions(-) diff --git a/app/models/Job.scala b/app/models/Job.scala index bdc90644d..70e212aa2 100644 --- a/app/models/Job.scala +++ b/app/models/Job.scala @@ -15,7 +15,7 @@ case class Job(id: String, analyzer: Analyzer, artifact: Artifact, report: Futur def status: JobStatus.Type = report.value match { case Some(Success(SuccessReport(_, _, _))) ⇒ JobStatus.Success - case Some(Success(FailureReport(_))) ⇒ JobStatus.Failure + case Some(Success(FailureReport(_, _))) ⇒ JobStatus.Failure case Some(Failure(_)) ⇒ JobStatus.Failure case None ⇒ JobStatus.InProgress } diff --git a/app/models/JsonFormat.scala b/app/models/JsonFormat.scala index 7d5f33b76..5e95288ce 100644 --- a/app/models/JsonFormat.scala +++ b/app/models/JsonFormat.scala @@ -50,9 +50,11 @@ object JsonFormat { full ← (json \ "full").asOpt[JsObject] summary ← (json \ "summary").asOpt[JsObject] } yield SuccessReport(artifacts, full, summary)) - .getOrElse(FailureReport(s"Invalid analyzer output format : $json")) + .getOrElse(FailureReport(s"Invalid analyzer output format : $json", JsNull)) else - FailureReport((json \ "errorMessage").asOpt[String].getOrElse(json.toString)) + FailureReport( + (json \ "errorMessage").asOpt[String].getOrElse(json.toString), + (json \ "input").asOpt[JsObject].getOrElse(JsNull)) } } @@ -62,8 +64,9 @@ object JsonFormat { "full" → full, "summary" → summary, "success" → true) - case FailureReport(message) ⇒ Json.obj( + case FailureReport(message, input) ⇒ Json.obj( "errorMessage" → message, + "input" → input, "success" → false) } diff --git a/app/models/Report.scala b/app/models/Report.scala index 296466413..52fb066b8 100644 --- a/app/models/Report.scala +++ b/app/models/Report.scala @@ -1,9 +1,9 @@ package models -import play.api.libs.json.JsObject +import play.api.libs.json.{ JsObject, JsValue } sealed abstract class Report(success: Boolean) case class SuccessReport(artifacts: Seq[Artifact], full: JsObject, summary: JsObject) extends Report(true) -case class FailureReport(message: String) extends Report(false) \ No newline at end of file +case class FailureReport(message: String, input: JsValue) extends Report(false) \ No newline at end of file diff --git a/app/services/ExternalAnalyzerSrv.scala b/app/services/ExternalAnalyzerSrv.scala index ab313bbe8..790e0a5fd 100644 --- a/app/services/ExternalAnalyzerSrv.scala +++ b/app/services/ExternalAnalyzerSrv.scala @@ -55,14 +55,14 @@ class ExternalAnalyzerSrv( Failure(error) } .toOption - .flatMap { - case a if disabledAnalyzers.contains(a.id) => - logger.info(s"Analyzer ${a.name} ${a.version} (${a.id}) is disabled") - None - case a => - logger.info(s"Register analyzer ${a.name} ${a.version} (${a.id})") - Some(a) - } + .flatMap { + case a if disabledAnalyzers.contains(a.id) ⇒ + logger.info(s"Analyzer ${a.name} ${a.version} (${a.id}) is disabled") + None + case a ⇒ + logger.info(s"Register analyzer ${a.name} ${a.version} (${a.id})") + Some(a) + } } yield analyzer } @@ -109,12 +109,12 @@ class ExternalAnalyzerSrv( catch { case _: JsonMappingException ⇒ error.append(output) - FailureReport(s"Error: Invalid output\n$error") + FailureReport(s"Error: Invalid output\n$error", JsNull) case _: JsonParseException ⇒ error.append(output) - FailureReport(s"Error: Invalid output\n$error") + FailureReport(s"Error: Invalid output\n$error", JsNull) case t: Throwable ⇒ - FailureReport(t.getMessage + ":" + t.getStackTrace.mkString("", "\n\t", "\n")) + FailureReport(t.getMessage + ":" + t.getStackTrace.mkString("", "\n\t", "\n"), JsNull) } }(analyzeExecutionContext) } diff --git a/app/services/MispSrv.scala b/app/services/MispSrv.scala index c2b9af3ad..636cda8fd 100644 --- a/app/services/MispSrv.scala +++ b/app/services/MispSrv.scala @@ -186,7 +186,7 @@ class MispSrv( } .getOrElse { val message = (mispOutput \ "error").asOpt[String].getOrElse(mispOutput.toString) - FailureReport(message) + FailureReport(message, JsNull) } } @@ -205,7 +205,7 @@ class MispSrv( "values" → Json.arr(Json.toJson(report).toString)) Json.obj("results" → (attributes :+ cortexAttribute)) - case FailureReport(message) ⇒ + case FailureReport(message, _) ⇒ Json.obj("error" → message) } }