github.com/orange-cloudfoundry/cli@v7.1.0+incompatible/api/cloudcontroller/ccv3/request.go (about)

     1  package ccv3
     2  
     3  import (
     4  	"io"
     5  	"net/http"
     6  
     7  	"code.cloudfoundry.org/cli/api/cloudcontroller"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/internal"
     9  )
    10  
    11  // requestOptions contains all the options to create an HTTP request.
    12  type requestOptions struct {
    13  	// URIParams are the list URI route parameters
    14  	URIParams internal.Params
    15  
    16  	// Query is a list of HTTP query parameters. Query will overwrite any
    17  	// existing query string in the URI. If you want to preserve the query
    18  	// string in URI make sure Query is nil.
    19  	Query []Query
    20  
    21  	// RequestName is the name of the request (see routes)
    22  	RequestName string
    23  
    24  	// Method is the HTTP method.
    25  	Method string
    26  	// URL is the request path.
    27  	URL string
    28  	// Body is the content of the request.
    29  	Body io.ReadSeeker
    30  }
    31  
    32  // newHTTPRequest returns a constructed HTTP.Request with some defaults.
    33  // Defaults are applied when Request options are not filled in.
    34  func (requester *RealRequester) newHTTPRequest(passedRequest requestOptions) (*cloudcontroller.Request, error) {
    35  	var request *http.Request
    36  	var err error
    37  	if passedRequest.URL != "" {
    38  		request, err = http.NewRequest(
    39  			passedRequest.Method,
    40  			passedRequest.URL,
    41  			passedRequest.Body,
    42  		)
    43  	} else {
    44  		request, err = requester.router.CreateRequest(
    45  			passedRequest.RequestName,
    46  			map[string]string(passedRequest.URIParams),
    47  			passedRequest.Body,
    48  		)
    49  	}
    50  	if err != nil {
    51  		return nil, err
    52  	}
    53  	if passedRequest.Query != nil {
    54  		request.URL.RawQuery = FormatQueryParameters(passedRequest.Query).Encode()
    55  	}
    56  
    57  	request.Header = http.Header{}
    58  	request.Header.Set("Accept", "application/json")
    59  	request.Header.Set("User-Agent", requester.userAgent)
    60  
    61  	if passedRequest.Body != nil {
    62  		request.Header.Set("Content-Type", "application/json")
    63  	}
    64  
    65  	return cloudcontroller.NewRequest(request, passedRequest.Body), nil
    66  }