github.com/lukasheimann/cloudfoundrycli@v7.1.0+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  }