private def doPreviewAuth()

in app/com/gu/viewer/proxy/PreviewProxy.scala [34:65]


  private def doPreviewAuth(request: PreviewProxyRequest) = {
    val proxyRequestUrl = previewLoginUrl

    log.info(s"Proxy Preview auth to: $proxyRequestUrl")

    def handleResponse(response: ProxyResponse) = {

      val returnUrl = proxyUriToViewerUri(request.requestUri).getOrElse(request.requestUri)

      // Store new preview session from response
      //  - should we also remove auth cookie from session to ensure its recreated?
      val session = PreviewSession.fromResponseHeaders(response)
        .withPlaySessionFrom(request.session)
        .withReturnUrl(Some(returnUrl))

      val locHeader = response.header("Location")

      (session.sessionCookie, locHeader) match {
        case (Some(_), Some(location)) => Future.successful {
          PreviewAuthRedirectProxyResult(location, session)
        }

        case (None, _) => error("Unexpected response session from preview login request", response)
        case (_, None) => error("Invalid response from preview login request", response)
      }
    }

    proxyClient.post(proxyRequestUrl, queryString = Seq(PREVIEW_AUTH_REDIRECT_PARAM -> loginCallbackUrl(request))) {
      case response if response.status == 303 => handleResponse(response)
      case response => error("Unexpected response from preview authentication request", response)
    }
  }