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
}