ftwhttp

package
v0.6.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 8, 2024 License: Apache-2.0 Imports: 19 Imported by: 1

Documentation

Overview

Package ftwhttp provides low level abstractions for sending/receiving raw http messages

Index

Constants

View Source
const (
	// ContentTypeHeader gives you the string for content type
	ContentTypeHeader string = "Content-Type"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	Transport *Connection
	Jar       http.CookieJar
	// contains filtered or unexported fields
}

Client is the top level abstraction in http

func NewClient

func NewClient(config ClientConfig) (*Client, error)

NewClient initializes the http client, creating the cookiejar

func (*Client) Do

func (c *Client) Do(req Request) (*Response, error)

Do perform the http request round trip.

func (*Client) GetRoundTripTime

func (c *Client) GetRoundTripTime() *RoundTripTime

GetRoundTripTime returns the time taken from the initial send till receiving the full response

func (*Client) NewConnection

func (c *Client) NewConnection(d Destination) error

NewConnection creates a new Connection based on a Destination

func (*Client) NewOrReusedConnection

func (c *Client) NewOrReusedConnection(d Destination) error

NewOrReusedConnection reuses an existing connection, or creates a new one if no connection has been set up yet

func (*Client) SetRootCAs added in v0.5.0

func (c *Client) SetRootCAs(cas *x509.CertPool)

SetRootCAs sets the root CAs for the client. This can be used if you are using internal certificates and for testing purposes.

func (*Client) StartTrackingTime

func (c *Client) StartTrackingTime()

StartTrackingTime sets the timer to start transactions. This will be the starting time in logs.

func (*Client) StopTrackingTime

func (c *Client) StopTrackingTime()

StopTrackingTime stops the timer. When looking at logs, we will read up to this one.

type ClientConfig

type ClientConfig struct {
	// ConnectTimeout is the timeout for connecting to a server.
	ConnectTimeout time.Duration
	// ReadTimeout is the timeout for reading a response.
	ReadTimeout time.Duration
	// RootCAs is the set of root CA certificates that is used to verify server
	RootCAs *x509.CertPool
}

ClientConfig provides configuration options for the HTTP client.

func NewClientConfig

func NewClientConfig() ClientConfig

NewClientConfig returns a new ClientConfig with reasonable defaults.

type Connection

type Connection struct {
	// contains filtered or unexported fields
}

Connection is the type used for sending/receiving data

func (*Connection) GetTrackedTime

func (c *Connection) GetTrackedTime() *RoundTripTime

GetTrackedTime will return the time since the request started and the response was parsed

func (*Connection) Request

func (c *Connection) Request(request *Request) error

Request will use all the inputs and send a raw http request to the destination

func (*Connection) Response

func (c *Connection) Response() (*Response, error)

Response reads the response sent by the WAF and return the corresponding struct It leverages the go stdlib for reading and parsing the response

func (*Connection) StartTrackingTime

func (c *Connection) StartTrackingTime()

StartTrackingTime initializes timer

func (*Connection) StopTrackingTime

func (c *Connection) StopTrackingTime()

StopTrackingTime stops timer

type Destination

type Destination struct {
	DestAddr string `default:"localhost"`
	Port     int    `default:"80"`
	Protocol string `default:"http"`
}

Destination is the host, port and protocol to be used when connecting to a remote host

func DestinationFromString

func DestinationFromString(urlString string) (*Destination, error)

DestinationFromString create a Destination from String

type FTWConnection

type FTWConnection interface {
	Request(*Request)
	Response(*Response)
	GetTrackedTime() *RoundTripTime
	// contains filtered or unexported methods
}

FTWConnection is the interface method implement to send and receive data

type Header map[string]string

Header is a simplified version of headers, where there is only one header per key. The original golang stdlib uses a proper string slice to map this.

func (Header) Add

func (h Header) Add(key, value string)

Add adds the key, value pair to the header. It appends to any existing values associated with key.

func (Header) Clone

func (h Header) Clone() Header

Clone returns a copy of h or nil if h is nil.

func (Header) Del

func (h Header) Del(key string)

Del deletes the value associated with key.

func (Header) Get

func (h Header) Get(key string) string

Get gets the first value associated with the given key. It is case insensitive; If there are no values associated with the key, Get returns "".

func (Header) Set

func (h Header) Set(key, value string)

Set sets the header entries associated with key to the single element value. It replaces any existing values associated with key.

func (Header) Value

func (h Header) Value(key string) string

Value returns the value associated with the given key. It is case insensitive;

func (Header) Write

func (h Header) Write(w io.Writer) error

Write writes a header in wire format.

func (Header) WriteBytes

func (h Header) WriteBytes(b *bytes.Buffer) (int, error)

WriteBytes writes a header in a ByteWriter.

type Request

type Request struct {
	// contains filtered or unexported fields
}

Request represents a request This struct without defaults represents the previous "autocomplete headers" behavior

func NewRawRequest

func NewRawRequest(raw []byte, b bool) *Request

NewRawRequest creates a new request, an initial request line, and headers

func NewRequest

func NewRequest(reqLine *RequestLine, h Header, data []byte, autocompleteHeaders bool) *Request

NewRequest creates a new request, an initial request line, and headers

func (*Request) AddHeader

func (r *Request) AddHeader(name string, value string)

AddHeader adds a new header to the request, if doesn't exist

func (*Request) AddStandardHeaders

func (r *Request) AddStandardHeaders()

AddStandardHeaders adds standard headers to the request, if they don't exist

AddStandardHeaders does the following:

  • adds `Connection` header with `close` value (if not set) to improve performance
  • adds `Content-Length` header if payload size > 0 or the request method permits a body (the spec says that the client SHOULD send `Content-Length` in that case)

func (Request) Data

func (r Request) Data() []byte

Data returns the data

func (Request) Headers

func (r Request) Headers() Header

Headers return request headers

func (Request) RawData

func (r Request) RawData() []byte

RawData returns the raw data

func (*Request) SetAutoCompleteHeaders

func (r *Request) SetAutoCompleteHeaders(value bool)

SetAutoCompleteHeaders sets the value to the corresponding bool

func (*Request) SetData

func (r *Request) SetData(data []byte) error

SetData sets the data You can use only one of raw, encoded or data.

func (*Request) SetHeaders

func (r *Request) SetHeaders(h Header)

SetHeaders sets the request headers

func (*Request) SetRawData

func (r *Request) SetRawData(raw []byte) error

SetRawData sets the data using raw bytes

When using raw data, no other checks will be done. You are responsible of creating the request line, all the headers, and body. You can use only one of raw or data.

func (Request) WithAutoCompleteHeaders

func (r Request) WithAutoCompleteHeaders() bool

WithAutoCompleteHeaders returns true when we need to add additional headers to complete the request

type RequestLine

type RequestLine struct {
	Method  string `default:"GET"`
	Version string `default:"HTTP/1.1"`
	URI     string `default:"/"`
}

RequestLine is the first line in the HTTP request dialog

func (RequestLine) ToString

func (rl RequestLine) ToString() string

ToString converts the request line to string for sending it in the wire

type Response

type Response struct {
	RAW    []byte
	Parsed http.Response
}

Response represents the http response received from the server/waf

func (*Response) GetFullResponse added in v0.5.0

func (r *Response) GetFullResponse() string

GetFullResponse gives the full response as string, or nil if there was some error

type RoundTripTime

type RoundTripTime struct {
	// contains filtered or unexported fields
}

RoundTripTime abstracts the time a transaction takes

func NewRoundTripTime

func NewRoundTripTime() *RoundTripTime

NewRoundTripTime initializes a roundtriptime struct

func (*RoundTripTime) RoundTripDuration

func (rtt *RoundTripTime) RoundTripDuration() time.Duration

RoundTripDuration gives the total time spent in this roundtrip

func (*RoundTripTime) StartTime

func (rtt *RoundTripTime) StartTime() time.Time

StartTime returns the time when this round trip started

func (*RoundTripTime) StartTracking

func (rtt *RoundTripTime) StartTracking()

StartTracking sets the initial time to Now

func (*RoundTripTime) StopTime

func (rtt *RoundTripTime) StopTime() time.Time

StopTime returns the time when this round trip was stopped

func (*RoundTripTime) StopTracking

func (rtt *RoundTripTime) StopTracking()

StopTracking sets the finish time to Now

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL