Skip to content

Commit

Permalink
Update endpoint.go
Browse files Browse the repository at this point in the history
  • Loading branch information
kristosiisusov committed May 23, 2021
1 parent 4000840 commit dde3341
Showing 1 changed file with 57 additions and 2 deletions.
59 changes: 57 additions & 2 deletions router/gin/endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func EndpointHandler(configuration *config.EndpointConfig, proxy proxy.Proxy) gi
func CustomErrorEndpointHandler(configuration *config.EndpointConfig, prxy proxy.Proxy, errF router.ToHTTPError) gin.HandlerFunc {
cacheControlHeaderValue := fmt.Sprintf("public, max-age=%d", int(configuration.CacheTTL.Seconds()))
isCacheEnabled := configuration.CacheTTL.Seconds() != 0
requestGenerator := NewRequest(configuration)
requestGenerator := NewRequestNew(configuration)
render := getRender(configuration)

return func(c *gin.Context) {
Expand Down Expand Up @@ -85,7 +85,62 @@ func CustomErrorEndpointHandler(configuration *config.EndpointConfig, prxy proxy
}

// NewRequest gets a request from the current gin context and the received query string
func NewRequest(configuration *config.EndpointConfig) func(*gin.Context, []string) *proxy.Request {
func NewRequest(headersToSend []string) func(*gin.Context, []string) *proxy.Request {
if len(headersToSend) == 0 {
headersToSend = router.HeadersToSend
}

return func(c *gin.Context, queryString []string) *proxy.Request {
params := make(map[string]string, len(c.Params))
for _, param := range c.Params {
params[strings.Title(param.Key[:1])+param.Key[1:]] = param.Value
}

headers := make(map[string][]string, 3+len(headersToSend))

for _, k := range headersToSend {
if k == requestParamsAsterisk {
headers = c.Request.Header

break
}

if h, ok := c.Request.Header[textproto.CanonicalMIMEHeaderKey(k)]; ok {
headers[k] = h
}
}

headers["X-Forwarded-For"] = []string{c.ClientIP()}
headers["X-Forwarded-Host"] = []string{c.Request.Host}
// if User-Agent is not forwarded using headersToSend, we set
// the KrakenD router User Agent value
if _, ok := headers["User-Agent"]; !ok {
headers["User-Agent"] = router.UserAgentHeaderValue
} else {
headers["X-Forwarded-Via"] = router.UserAgentHeaderValue
}

var query map[string][]string
query = make(map[string][]string, len(queryString))
for i := range queryString {
if v := c.Request.URL.Query().Get(queryString[i]); v != "" {
query[queryString[i]] = []string{v}
}
}

return &proxy.Request{
Method: c.Request.Method,
URL: c.Request.URL,
Query: query,
Path: c.Request.URL.Path,
Body: c.Request.Body,
Params: params,
Headers: headers,
}
}
}

func NewRequestNew(configuration *config.EndpointConfig) func(*gin.Context, []string) *proxy.Request {
var headersToSend = configuration.HeadersToPass
if len(headersToSend) == 0 {
headersToSend = router.HeadersToSend
Expand Down

0 comments on commit dde3341

Please sign in to comment.