All Downloads are FREE. Search and download functionalities are using the official Maven repository.

skinny.engine.ContentEncodingSupport.scala Maven / Gradle / Ivy

The newest version!
package skinny.engine

import javax.servlet.http.{ HttpServletRequest, HttpServletResponse }

/**
 * SkinnyEngine handler for gzipped responses.
 */
trait ContentEncodingSupport extends Handler { self: SkinnyEngineBase =>

  abstract override def handle(req: HttpServletRequest, res: HttpServletResponse): Unit = {
    withRequestResponse(req, res) {
      super.handle(decodedRequest(req), encodedResponse(req, res))
    }
  }

  /** Encodes the response if necessary. */
  private def encodedResponse(req: HttpServletRequest, res: HttpServletResponse): HttpServletResponse = {
    ContentNegotiation.preferredEncoding(req).map { encoding =>
      val encoded = encoding(res)
      SkinnyEngineBase.onRenderedCompleted { _ => encoded.end() }(context)
      encoded
    }.getOrElse(res)
  }

  /** Decodes the request if necessary. */
  private def decodedRequest(req: HttpServletRequest): HttpServletRequest = {
    (for {
      name <- Option(req.getHeader("Content-Encoding"))
      enc <- ContentEncoding.forName(name)
    } yield enc(req)).getOrElse(req)
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy