private def proxyRequest()

in app/controllers/PreferencesProxy.scala [22:54]


  private def proxyRequest(relativePath: String) = APIAuthAction(parse.byteString).async { request =>
    val url = s"${config.preferencesUrl}/$relativePath"
    val requestHeaders = request.headers.toSimpleMap + (
      "Host" -> config.preferencesHost
    )
    val requestBody = if (request.hasBody) {
      InMemoryBody(request.body)
    } else {
      EmptyBody
    }
    wsClient.url(url)
      .withHttpHeaders(requestHeaders.toSeq: _*)
      .withBody(requestBody)
      .withFollowRedirects(false) // ensure browser handles all redirects NOT this proxy
      .execute(request.method)
      .map { response =>
        val responseHeaders = response.headers.view.mapValues(_.head).toMap + (
          "Cache-Control" -> "private, no-cache, no-store, must-revalidate, max-age=0", // do not cache whatsoever
        )
        new Status(response.status)(response.bodyAsBytes)
          .withHeaders(responseHeaders.removed("Content-Type").toSeq: _*)
          .as(responseHeaders.getOrElse("Content-Type", "application/octet-stream"))
      }
      .recover {
        case _ if config.isDev =>
          TemporaryRedirect( // this ensures PUT doesn't get transformed to GET, see https://developer.mozilla.org/en-US/docs/Web/HTTP/Redirections#temporary_redirections
            url.replaceAll(Dev.appDomain, Code.appDomain)
          )
        case e =>
          logger.error(s"Error proxying request to $url", e)
          InternalServerError
      }
  }