func validateGetStatsRequest()

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
}