Skip to content

Commit

Permalink
#53 Add report template APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
To-om committed Dec 2, 2016
1 parent 584d6d4 commit 7d56bb1
Show file tree
Hide file tree
Showing 3 changed files with 128 additions and 0 deletions.
64 changes: 64 additions & 0 deletions thehive-backend/app/controllers/ReportTemplate.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package controllers

import javax.inject.{ Inject, Singleton }

import scala.concurrent.ExecutionContext

import play.api.http.Status
import play.api.mvc.Controller

import org.elastic4play.Timed
import org.elastic4play.controllers.{ Authenticated, FieldsBodyParser, Renderer }
import org.elastic4play.models.JsonFormat.baseModelEntityWrites
import org.elastic4play.services.{ QueryDSL, QueryDef, Role }
import org.elastic4play.services.AuxSrv
import org.elastic4play.services.JsonFormat.queryReads

import services.ReportTemplateSrv

@Singleton
class ReportTemplateCtrl @Inject() (
reportTemplateSrv: ReportTemplateSrv,
auxSrv: AuxSrv,
authenticated: Authenticated,
renderer: Renderer,
fieldsBodyParser: FieldsBodyParser,
implicit val ec: ExecutionContext) extends Controller with Status {

@Timed
def create = authenticated(Role.admin).async(fieldsBodyParser) { implicit request
reportTemplateSrv.create(request.body)
.map(reportTemplate renderer.toOutput(CREATED, reportTemplate))
}

@Timed
def get(id: String) = authenticated(Role.read).async { implicit request
reportTemplateSrv.get(id)
.map(reportTemplate renderer.toOutput(OK, reportTemplate))
}

@Timed
def update(id: String) = authenticated(Role.admin).async(fieldsBodyParser) { implicit request
reportTemplateSrv.update(id, request.body)
.map(reportTemplate renderer.toOutput(OK, reportTemplate))
}

@Timed
def delete(id: String) = authenticated(Role.admin).async { implicit request
reportTemplateSrv.delete(id)
.map(_ NoContent)
}

@Timed
def find = authenticated(Role.read).async(fieldsBodyParser) { implicit request
val query = request.body.getValue("query").fold[QueryDef](QueryDSL.any)(_.as[QueryDef])
val range = request.body.getString("range")
val sort = request.body.getStrings("sort").getOrElse(Nil)
val nparent = request.body.getLong("nparent").getOrElse(0L).toInt
val withStats = request.body.getBoolean("nstats").getOrElse(false)

val (reportTemplates, total) = reportTemplateSrv.find(query, range, sort)
val reportTemplatesWithStats = auxSrv(reportTemplates, nparent, withStats)
renderer.toOutput(OK, reportTemplatesWithStats, total)
}
}
58 changes: 58 additions & 0 deletions thehive-backend/app/services/ReportTemplateSrv.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package services

import javax.inject.{ Inject, Singleton }

import scala.concurrent.{ ExecutionContext, Future }
import scala.util.Try

import akka.NotUsed
import akka.stream.scaladsl.Source

import play.api.Logger
import play.api.libs.json.JsObject

import org.elastic4play.controllers.Fields
import org.elastic4play.services.{ Agg, AuthContext, CreateSrv, DeleteSrv, FindSrv, GetSrv, QueryDef, UpdateSrv }

import models.{ ReportTemplate, ReportTemplateModel }

@Singleton
class ReportTemplateSrv @Inject() (
reportTemplateModel: ReportTemplateModel,
createSrv: CreateSrv,
artifactSrv: ArtifactSrv,
getSrv: GetSrv,
updateSrv: UpdateSrv,
deleteSrv: DeleteSrv,
findSrv: FindSrv,
implicit val ec: ExecutionContext) {

lazy val log = Logger(getClass)

def create(fields: Fields)(implicit authContext: AuthContext): Future[ReportTemplate] = {
createSrv[ReportTemplateModel, ReportTemplate](reportTemplateModel, fields)
}

def get(id: String): Future[ReportTemplate] =
getSrv[ReportTemplateModel, ReportTemplate](reportTemplateModel, id)

def update(id: String, fields: Fields)(implicit authContext: AuthContext): Future[ReportTemplate] =
updateSrv[ReportTemplateModel, ReportTemplate](reportTemplateModel, id, fields)

def bulkUpdate(ids: Seq[String], fields: Fields)(implicit authContext: AuthContext): Future[Seq[Try[ReportTemplate]]] = {
updateSrv[ReportTemplateModel, ReportTemplate](reportTemplateModel, ids, fields)
}

def delete(id: String)(implicit Context: AuthContext): Future[ReportTemplate] =
deleteSrv[ReportTemplateModel, ReportTemplate](reportTemplateModel, id)

def find(queryDef: QueryDef, range: Option[String], sortBy: Seq[String]): (Source[ReportTemplate, NotUsed], Future[Long]) = {
findSrv[ReportTemplateModel, ReportTemplate](reportTemplateModel, queryDef, range, sortBy)
}

def stats(queryDef: QueryDef, aggs: Seq[Agg]): Future[JsObject] = findSrv(reportTemplateModel, queryDef, aggs: _*)

def getStats(id: String): Future[JsObject] = {
Future.successful(JsObject(Nil))
}
}
6 changes: 6 additions & 0 deletions thehive-backend/conf/routes
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ GET /api/case/template/:caseTemplateId controllers.CaseTemplateCtrl.g
PATCH /api/case/template/:caseTemplateId controllers.CaseTemplateCtrl.update(caseTemplateId)
DELETE /api/case/template/:caseTemplateId controllers.CaseTemplateCtrl.delete(caseTemplateId)

POST /api/report/template/_search controllers.ReportTemplateCtrl.find()
POST /api/report/template controllers.ReportTemplateCtrl.create()
GET /api/report/template/:caseTemplateId controllers.ReportTemplateCtrl.get(caseTemplateId)
PATCH /api/report/template/:caseTemplateId controllers.ReportTemplateCtrl.update(caseTemplateId)
DELETE /api/report/template/:caseTemplateId controllers.ReportTemplateCtrl.delete(caseTemplateId)

POST /api/case/artifact/_search controllers.ArtifactCtrl.find()
POST /api/case/:caseId/artifact/_search controllers.ArtifactCtrl.findInCase(caseId)
POST /api/case/artifact/_stats controllers.ArtifactCtrl.stats()
Expand Down

0 comments on commit 7d56bb1

Please sign in to comment.