diff --git a/app/models/CerebroRequest.scala b/app/models/CerebroRequest.scala index d710823d6456fe601d4441ca239a6533e0c95d26..829cc2207b0292b5f2a379d98a5f5177effa48a3 100644 --- a/app/models/CerebroRequest.scala +++ b/app/models/CerebroRequest.scala @@ -4,7 +4,7 @@ import controllers.auth.AuthRequest import exceptions.{MissingRequiredParamException, MissingTargetHostException} import play.api.libs.json.{JsArray, JsObject, JsValue} -class CerebroRequest(val target: ElasticServer, body: JsValue, val user: Option[User]) { +case class CerebroRequest(val target: ElasticServer, body: JsValue, val user: Option[User]) { def get(name: String) = (body \ name).asOpt[String].getOrElse(throw MissingRequiredParamException(name)) @@ -36,22 +36,23 @@ class CerebroRequest(val target: ElasticServer, body: JsValue, val user: Option[ object CerebroRequest { - def apply(request: AuthRequest[JsValue], hosts: Hosts) = { + def apply(request: AuthRequest[JsValue], hosts: Hosts): CerebroRequest = { val body = request.body val host = (body \ "host").asOpt[String].getOrElse(throw MissingTargetHostException) - val knownHost = hosts.getServer(host) - val cluster = knownHost.getOrElse { - val username = (body \ "username").asOpt[String] - val password = (body \ "password").asOpt[String] - if (username.isDefined && password.isDefined) { - val auth = ESAuth(username.get, password.get) - ElasticServer(host, Some(auth)) - } else { - ElasticServer(host, None) - } + val username = (body \ "username").asOpt[String] + val password = (body \ "password").asOpt[String] + + val requestAuth = (username, password) match { + case (Some(u), Some(p)) => Some(ESAuth(u, p)) + case _ => None + } + + val server = hosts.getServer(host) match { + case Some(ElasticServer(h, a)) => ElasticServer(h, a.orElse(requestAuth)) + case None => ElasticServer(host, requestAuth) } - new CerebroRequest(cluster, body, request.user) + CerebroRequest(server, body, request.user) } }