def previewAuthCallback()

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)
        }
      }
    }
  }