in core/requestv2.go [114:176]
func (r *RequestAccessorV2) EventToRequest(req events.APIGatewayV2HTTPRequest) (*http.Request, error) {
decodedBody := []byte(req.Body)
if req.IsBase64Encoded {
base64Body, err := base64.StdEncoding.DecodeString(req.Body)
if err != nil {
return nil, err
}
decodedBody = base64Body
}
path := req.RawPath
//if RawPath empty is, populate from request context
if len(path) == 0 {
path = req.RequestContext.HTTP.Path
}
if r.stripBasePath != "" && len(r.stripBasePath) > 1 {
if strings.HasPrefix(path, r.stripBasePath) {
path = strings.Replace(path, r.stripBasePath, "", 1)
}
}
if !strings.HasPrefix(path, "/") {
path = "/" + path
}
serverAddress := "https://" + req.RequestContext.DomainName
if customAddress, ok := os.LookupEnv(CustomHostVariable); ok {
serverAddress = customAddress
}
path = serverAddress + path
if len(req.RawQueryString) > 0 {
path += "?" + req.RawQueryString
} else if len(req.QueryStringParameters) > 0 {
values := url.Values{}
for key, value := range req.QueryStringParameters {
values.Add(key, value)
}
path += "?" + values.Encode()
}
httpRequest, err := http.NewRequest(
strings.ToUpper(req.RequestContext.HTTP.Method),
path,
bytes.NewReader(decodedBody),
)
if err != nil {
fmt.Printf("Could not convert request %s:%s to http.Request\n", req.RequestContext.HTTP.Method, req.RequestContext.HTTP.Path)
log.Println(err)
return nil, err
}
for headerKey, headerValue := range req.Headers {
for _, val := range strings.Split(headerValue, ",") {
httpRequest.Header.Add(headerKey, strings.Trim(val, " "))
}
}
httpRequest.RequestURI = httpRequest.URL.RequestURI()
return httpRequest, nil
}