func validateDrainingRequest()

in agent/listenerdraining/listener_draining.go [111:149]


func validateDrainingRequest(request *http.Request) (*url.Values, error) {
	// Verify that the request is a POST request
	if request.Method != http.MethodPost {
		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)
	}
	log.Debugf("Query Values: %v", queryParameters)

	queryParameterCount := len(queryParameters)
	if queryParameterCount != 1 {
		errorMsg := fmt.Sprintf("Unexpected number of query parameters specified in request: [%d]", queryParameterCount)
		log.Debug(errorMsg)
		return nil, fmt.Errorf(errorMsg)
	}

	if _, ok := queryParameters[inboundOnlyQueryKey]; !ok {
		errorMsg := fmt.Sprintf("Unexpected query parameters specified in request [%v]", queryParameters)
		log.Debug(errorMsg)
		return nil, fmt.Errorf(errorMsg)
	}

	return &queryParameters, nil
}