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