in riff-raff/app/controllers/api.scala [89:131]
def apply[A](
authenticatedRequest: ApiRequest[A]
)(f: ApiRequest[A] => JsValue): Result = {
val jsonpCallback =
authenticatedRequest.queryString.get("callback").map(_.head)
val response =
try {
f(authenticatedRequest)
} catch {
case t: Throwable =>
toJson(
Map(
"response" -> toJson(
Map(
"status" -> toJson("error"),
"message" -> toJson(t.getMessage),
"stacktrace" -> toJson(t.getStackTrace.map(_.toString))
)
)
)
)
}
val responseObject = response match {
case jso: JsObject => jso
case jsv: JsValue => JsObject(Seq(("value", jsv)))
}
jsonpCallback map { callback =>
Ok(s"$callback(${responseObject.toString})")
.as("application/javascript")
} getOrElse {
response \ "response" \ "status" match {
case JsDefined(JsString("ok")) => Ok(responseObject)
case JsDefined(JsString("error")) => BadRequest(responseObject)
case _ =>
throw new IllegalStateException(
"Response status missing or invalid"
)
}
}
}