From 3c1ad94d172bceb3b63b7d1e5c03e72afaeb8896 Mon Sep 17 00:00:00 2001 From: To-om Date: Fri, 23 Jul 2021 11:59:38 +0200 Subject: [PATCH] #2144 Add API for index rebuild --- .../app/org/thp/thehive/controllers/v1/AdminCtrl.scala | 9 +++++++++ thehive/app/org/thp/thehive/controllers/v1/Router.scala | 1 + 2 files changed, 10 insertions(+) diff --git a/thehive/app/org/thp/thehive/controllers/v1/AdminCtrl.scala b/thehive/app/org/thp/thehive/controllers/v1/AdminCtrl.scala index f91a146d3e..8ab98e950e 100644 --- a/thehive/app/org/thp/thehive/controllers/v1/AdminCtrl.scala +++ b/thehive/app/org/thp/thehive/controllers/v1/AdminCtrl.scala @@ -140,6 +140,15 @@ class AdminCtrl @Inject() ( Success(Results.NoContent) } + def rebuild(name: String): Action[AnyContent] = + entrypoint("Rebuild index") + .authPermitted(Permissions.managePlatform) { _ => + db + .removeIndex(name, IndexType.fulltext, Nil) + .flatMap(_ => schemas.toTry(db.addSchemaIndexes)) + .map(_ => Results.NoContent) + } + private val rangeRegex = "(\\d+)-(\\d+)".r private def getOperations(schemaName: String, select: Option[String], filter: Option[String]): Seq[(Operation, Int)] = { val ranges = select.fold(Seq(0 until Int.MaxValue))(_.split(',').toSeq.map { diff --git a/thehive/app/org/thp/thehive/controllers/v1/Router.scala b/thehive/app/org/thp/thehive/controllers/v1/Router.scala index 622167041a..acfec720e2 100644 --- a/thehive/app/org/thp/thehive/controllers/v1/Router.scala +++ b/thehive/app/org/thp/thehive/controllers/v1/Router.scala @@ -47,6 +47,7 @@ class Router @Inject() ( case GET(p"/admin/check/$name/trigger") => adminCtrl.triggerCheck(name) case GET(p"/admin/index/status") => adminCtrl.indexStatus case GET(p"/admin/index/$name/reindex") => adminCtrl.reindex(name) + case POST(p"/admin/index/$name/rebuild") => adminCtrl.rebuild(name) case GET(p"/admin/log/set/$packageName/$level") => adminCtrl.setLogLevel(packageName, level) case POST(p"/admin/schema/repair/$schemaName" ? q_o"select=$select" ? q_o"filter=$filter") => adminCtrl.schemaRepair(schemaName, select, filter) case POST(p"/admin/schema/info/$schemaName" ? q_o"select=$select" ? q_o"filter=$filter") => adminCtrl.schemaInfo(schemaName, select, filter)