membership-attribute-service/app/filters/CheckCacheHeadersFilter.scala (19 lines of code) (raw):
package filters
import org.apache.pekko.stream.Materializer
import controllers.Cached.suitableForCaching
import play.api.mvc._
import scala.concurrent.{ExecutionContext, Future}
class CheckCacheHeadersFilter(implicit val mat: Materializer, ex: ExecutionContext) extends Filter {
def apply(nextFilter: RequestHeader => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
nextFilter(requestHeader).map { result =>
if (requestHeader.method.toUpperCase != "OPTIONS" && suitableForCaching(result)) {
val hasCacheControl = result.header.headers.contains("Cache-Control")
assert(
hasCacheControl,
s"Cache-Control not set. Ensure controller response has Cache-Control header set for ${requestHeader.path}. Throwing exception... ",
)
}
result
}
}
}