app/com/gu/viewer/proxy/ProxyRequest.scala (32 lines of code) (raw):
package com.gu.viewer.proxy
import play.api.mvc.{Cookie, RequestHeader}
sealed trait ProxyRequest
object ProxyRequest {
def apply(service: String, servicePath: String, request: RequestHeader, body: Option[Map[String, Seq[String]]] = None): ProxyRequest = {
val queryString = if (request.rawQueryString.nonEmpty) s"?${request.rawQueryString}" else ""
service match {
case "live" => LiveProxyRequest(servicePath + queryString, body)
case "preview" => PreviewProxyRequest(servicePath + queryString, request, body)
case _ => UnknownProxyRequest
}
}
}
case class LiveProxyRequest(servicePath: String, body: Option[Map[String, Seq[String]]] = None) extends ProxyRequest
case class PreviewProxyRequest(
servicePath: String,
requestHost: String,
requestUri: String,
requestQueryString: Map[String, Seq[String]],
session: PreviewSession,
body: Option[Map[String, Seq[String]]] = None,
maybePandaCookieToForward: Option[Cookie] = None
) extends ProxyRequest
object PreviewProxyRequest {
def apply(servicePath: String, request: RequestHeader, body: Option[Map[String, Seq[String]]]): PreviewProxyRequest =
PreviewProxyRequest(servicePath, request.host, request.uri, request.queryString, PreviewSession(request.session), body)
def authCallbackRequest(request: RequestHeader) =
PreviewProxyRequest("/oauth2callback", request, None)
}
case object UnknownProxyRequest extends ProxyRequest {
val isSecure = false
}