github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/api/cloudcontroller/ccv2/request.go (about) 1 package ccv2 2 3 import ( 4 "io" 5 "net/http" 6 "net/url" 7 8 "code.cloudfoundry.org/cli/api/cloudcontroller" 9 ) 10 11 // Params represents URI parameters for a request. 12 type Params map[string]string 13 14 // requestOptions contains all the options to create an HTTP request. 15 type requestOptions struct { 16 // Body is the request body 17 Body io.ReadSeeker 18 19 // Method is the HTTP method of the request. 20 Method string 21 22 // Query is a list of HTTP query parameters 23 Query url.Values 24 25 // RequestName is the name of the request (see routes) 26 RequestName string 27 28 // URI is the URI of the request. 29 URI string 30 31 // URIParams are the list URI route parameters 32 URIParams Params 33 } 34 35 // newHTTPRequest returns a constructed HTTP.Request with some defaults. 36 // Defaults are applied when Request fields are not filled in. 37 func (client Client) newHTTPRequest(passedRequest requestOptions) (*cloudcontroller.Request, error) { 38 var request *http.Request 39 var err error 40 if passedRequest.URI != "" { 41 var ( 42 path *url.URL 43 base *url.URL 44 ) 45 46 path, err = url.Parse(passedRequest.URI) 47 if err != nil { 48 return nil, err 49 } 50 51 base, err = url.Parse(client.API()) 52 if err != nil { 53 return nil, err 54 } 55 56 request, err = http.NewRequest( 57 passedRequest.Method, 58 base.ResolveReference(path).String(), 59 passedRequest.Body, 60 ) 61 } else { 62 request, err = client.router.CreateRequest( 63 passedRequest.RequestName, 64 map[string]string(passedRequest.URIParams), 65 passedRequest.Body, 66 ) 67 if err == nil { 68 request.URL.RawQuery = passedRequest.Query.Encode() 69 } 70 } 71 if err != nil { 72 return nil, err 73 } 74 75 request.Header = http.Header{} 76 request.Header.Set("Accept", "application/json") 77 request.Header.Set("User-Agent", client.userAgent) 78 79 if passedRequest.Body != nil { 80 request.Header.Set("Content-Type", "application/json") 81 } 82 83 // Make sure the body is the same as the one in the request 84 return cloudcontroller.NewRequest(request, passedRequest.Body), nil 85 }