mirror of
https://github.com/ysoftdevs/odc-analyzer.git
synced 2026-01-14 15:53:53 +01:00
31 lines
1.3 KiB
Scala
31 lines
1.3 KiB
Scala
package controllers.api
|
|
|
|
import controllers.AuthenticatedController
|
|
import play.api.mvc.{ActionBuilder, Request, Result}
|
|
import play.twirl.api.Txt
|
|
|
|
import scala.concurrent.Future
|
|
|
|
trait ApiController extends AuthenticatedController with ApiResources {
|
|
|
|
protected def apiConfig: ApiConfig
|
|
|
|
protected def ApiAction(resource: ApiResource) = new ActionBuilder[Request] {
|
|
override def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]): Future[Result] = {
|
|
val appNameOption = request.headers.get("x-app-name").orElse(request.getQueryString("app-name"))
|
|
val appTokenOption = request.headers.get("x-app-token").orElse(request.getQueryString("app-token"))
|
|
(appNameOption, appTokenOption) match {
|
|
case (Some(appName), Some(appToken)) =>
|
|
apiConfig.getApplication(appName, appToken) match {
|
|
case Some(app) =>
|
|
if(app.isAllowed(resource)) block(request)
|
|
else Future.successful(Unauthorized(Txt("The application is not allowed to access "+resource.name)))
|
|
case None => Future.successful(Unauthorized(Txt("Unknown application or bad token")))
|
|
}
|
|
case _ => Future.successful(Unauthorized(Txt("Missing auth headers x-app-name and x-app-token (or similar GET parameters).")))
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|