aboutsummaryrefslogtreecommitdiff
path: root/core-rest/src/main/scala/xyz/driver/core/rest/ProxyRoute.scala
blob: c0e9f99a3158cfb73979f746b338b0e2682fc6c3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package xyz.driver.core.rest

import akka.http.scaladsl.server.{RequestContext, Route, RouteResult}
import com.typesafe.config.Config
import xyz.driver.core.Name

import scala.concurrent.ExecutionContext

trait ProxyRoute extends DriverRoute {
  implicit val executionContext: ExecutionContext
  val config: Config
  val httpClient: HttpClient

  protected def proxyToService(serviceName: Name[Service]): Route = { ctx: RequestContext =>
    val httpScheme = config.getString(s"services.${serviceName.value}.httpScheme")
    val baseUrl    = config.getString(s"services.${serviceName.value}.baseUrl")

    val originalUri     = ctx.request.uri
    val originalRequest = ctx.request

    val newUri     = originalUri.withScheme(httpScheme).withHost(baseUrl)
    val newRequest = originalRequest.withUri(newUri)

    httpClient.makeRequest(newRequest).map(RouteResult.Complete)
  }
}