in app/com/gu/viewer/proxy/PreviewProxy.scala [124:159]
def previewAuthCallback(request: PreviewProxyRequest): Future[Result] = ProxyResult.resultFrom {
val redirectUrlParam = PREVIEW_AUTH_REDIRECT_PARAM -> loginCallbackUrl(request)
val queryParams = request.requestQueryString.view.mapValues(_.head).toSeq :+ redirectUrlParam
def handleResponse(response: ProxyResponse) = {
val session = PreviewSession.fromResponseHeaders(response)
.withPlaySessionFrom(request.session)
(session.sessionCookie, session.authCookie) match {
case (Some(_), Some(_)) => Future.successful {
val returnUrl = request.session.returnUrl.getOrElse("/proxy/preview/uk")
RedirectProxyResultWithSession(returnUrl, session.withoutReturnUrl)
}
case (None, None) => error("Bad response from preview auth callback", response)
case (None, _) => error("Preview Session cookie not returned", response)
case (_, None) => error("Preview Auth cookie not returned", response)
}
}
request.session.sessionCookie match {
case None => error("Preview session not established")
case Some(_) => {
val proxyUrl = s"http://${config.previewHost}/oauth2callback"
log.info(s"Proxy preview auth callback to: $proxyUrl")
val cookies = request.session.asCookies
proxyClient.get(proxyUrl, queryString = queryParams, cookies = cookies) {
case r => handleResponse(r)
}
}
}
}