func buildRouteServiceArgs(routeServiceConfig *route_service.RouteServiceConfig, routeServiceUrl, forwardedUrlRaw string) (route_service.RouteServiceArgs, error) { var routeServiceArgs route_service.RouteServiceArgs sig, metadata, err := routeServiceConfig.GenerateSignatureAndMetadata(forwardedUrlRaw) if err != nil { return routeServiceArgs, err } routeServiceArgs.UrlString = routeServiceUrl routeServiceArgs.Signature = sig routeServiceArgs.Metadata = metadata routeServiceArgs.ForwardedUrlRaw = forwardedUrlRaw rsURL, err := url.Parse(routeServiceUrl) if err != nil { return routeServiceArgs, err } routeServiceArgs.ParsedUrl = rsURL return routeServiceArgs, nil }
func SetupProxyRequest(source *http.Request, target *http.Request, routeServiceArgs route_service.RouteServiceArgs, routeServiceConfig *route_service.RouteServiceConfig) { target.URL.Scheme = "http" target.URL.Host = source.Host target.URL.Opaque = source.RequestURI target.URL.RawQuery = "" setRequestXRequestStart(source) setRequestXVcapRequestId(source, nil) sig := target.Header.Get(route_service.RouteServiceSignature) if forwardingToRouteService(routeServiceArgs.UrlString, sig) { // An endpoint has a route service and this request did not come from the service routeServiceConfig.SetupRouteServiceRequest(target, routeServiceArgs) } else if hasBeenToRouteService(routeServiceArgs.UrlString, sig) { // Remove the headers since the backend should not see it target.Header.Del(route_service.RouteServiceSignature) target.Header.Del(route_service.RouteServiceMetadata) } }
import ( "net/http" "net/url" "time" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "vulcan/router/common/secure" "vulcan/router/route_service" "vulcan/router/test_util" ) var _ = Describe("Route Service Config", func() { var ( config *route_service.RouteServiceConfig crypto secure.Crypto cryptoPrev secure.Crypto cryptoKey = "ABCDEFGHIJKLMNOP" ) BeforeEach(func() { var err error crypto, err = secure.NewAesGCM([]byte(cryptoKey)) Expect(err).ToNot(HaveOccurred()) config = route_service.NewRouteServiceConfig(true, 1*time.Hour, crypto, cryptoPrev) }) AfterEach(func() { crypto = nil cryptoPrev = nil config = nil })