Skip to content
Snippets Groups Projects
Commit 37907772 authored by Leonardo Menezes's avatar Leonardo Menezes
Browse files

allow providing known host auth through request

parent 922a161d
No related branches found
No related tags found
No related merge requests found
...@@ -4,7 +4,7 @@ import controllers.auth.AuthRequest ...@@ -4,7 +4,7 @@ import controllers.auth.AuthRequest
import exceptions.{MissingRequiredParamException, MissingTargetHostException} import exceptions.{MissingRequiredParamException, MissingTargetHostException}
import play.api.libs.json.{JsArray, JsObject, JsValue} 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) = def get(name: String) =
(body \ name).asOpt[String].getOrElse(throw MissingRequiredParamException(name)) (body \ name).asOpt[String].getOrElse(throw MissingRequiredParamException(name))
...@@ -36,22 +36,23 @@ class CerebroRequest(val target: ElasticServer, body: JsValue, val user: Option[ ...@@ -36,22 +36,23 @@ class CerebroRequest(val target: ElasticServer, body: JsValue, val user: Option[
object CerebroRequest { object CerebroRequest {
def apply(request: AuthRequest[JsValue], hosts: Hosts) = { def apply(request: AuthRequest[JsValue], hosts: Hosts): CerebroRequest = {
val body = request.body val body = request.body
val host = (body \ "host").asOpt[String].getOrElse(throw MissingTargetHostException) 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 username = (body \ "username").asOpt[String]
val password = (body \ "password").asOpt[String] val password = (body \ "password").asOpt[String]
if (username.isDefined && password.isDefined) {
val auth = ESAuth(username.get, password.get) val requestAuth = (username, password) match {
ElasticServer(host, Some(auth)) case (Some(u), Some(p)) => Some(ESAuth(u, p))
} else { case _ => None
ElasticServer(host, 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)
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment