in agent/stats/envoy_prometheus_stats.go [228:275]
func validateGetStatsRequest(request *http.Request) (*url.Values, error) {
// Verify that the request is a GET request
if request.Method != http.MethodGet {
errorMsg := fmt.Sprintf("invalid method [%s] in request", request.Method)
log.Debug(errorMsg)
return nil, fmt.Errorf(errorMsg)
}
// Verify that no message body is present
if request.ContentLength > 0 {
errorMsg := fmt.Sprintf("unexpected content in request. Body size [%d]", request.ContentLength)
log.Debug(errorMsg)
return nil, fmt.Errorf(errorMsg)
}
// Verify the parameters supplied
queryParameters, err := url.ParseQuery(request.URL.RawQuery)
if err != nil {
errorMsg := fmt.Sprintf("unable to parse queries in URL: %s", err)
log.Debug(errorMsg)
return nil, fmt.Errorf(errorMsg)
}
for queryParam, _ := range queryParameters {
if allowedVal, ok := QuerySet[queryParam]; !ok {
errorMsg := fmt.Sprintf("unsupported query parameter: %s", queryParam)
log.Debug(errorMsg)
return nil, fmt.Errorf(errorMsg)
} else {
queryVal := queryParameters.Get(queryParam)
if allowedVal != nil && allowedVal.(string) != queryVal {
errorMsg := fmt.Sprintf("unsupported query value for parameter %s: %s, usage: %s", queryParam, queryVal, filterQueryUsage)
log.Debug(errorMsg)
return nil, fmt.Errorf(errorMsg)
}
}
}
// validate for delta
if queryParameters.Has(deltaQueryKey) {
if !queryParameters.Has(usedOnlyQueryKey) || !queryParameters.Has(filterQueryKey) {
errorMsg := fmt.Sprintf("when delta is enabled, both %s and %s query parameters are required", usedOnlyQueryKey, filterQueryKey)
log.Debug(errorMsg)
return nil, fmt.Errorf(errorMsg)
}
}
return &queryParameters, nil
}