v3 – github.com/google/martian/v3 Index | Files | Directories

package martian

import "github.com/google/martian/v3"

Package martian provides an HTTP/1.1 proxy with an API for configurable request and response modifiers.

Index

Functions

func Init

func Init()

Init runs common initialization code for a martian proxy.

Types

type Context

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

Context provides information and storage for a single request/response pair. Contexts are linked to shared session that is used for multiple requests on a single connection.

func NewContext

func NewContext(req *http.Request) *Context

NewContext returns a context for the in-flight HTTP request.

func TestContext

func TestContext(req *http.Request, conn net.Conn, bw *bufio.ReadWriter) (ctx *Context, remove func(), err error)

TestContext builds a new session and associated context and returns the context and a function to remove the associated context. If it fails to generate either a new session or a new context it will return an error. Intended for tests only.

func (*Context) APIRequest

func (ctx *Context) APIRequest()

APIRequest marks the requests as a request to the proxy API.

func (*Context) Get

func (ctx *Context) Get(key string) (interface{}, bool)

Get takes key and returns the associated value from the context.

func (*Context) ID

func (ctx *Context) ID() string

ID returns the context ID.

func (*Context) IsAPIRequest

func (ctx *Context) IsAPIRequest() bool

IsAPIRequest returns true when the request patterns matches a pattern in the proxy mux. The mux is usually defined as a parameter to the api.Forwarder, which uses http.DefaultServeMux by default.

func (*Context) Session

func (ctx *Context) Session() *Session

Session returns the session for the context.

func (*Context) Set

func (ctx *Context) Set(key string, val interface{})

Set takes a key and associates it with val in the context. The value is persisted for the duration of the request and is removed on the following request.

func (*Context) SkipLogging

func (ctx *Context) SkipLogging()

SkipLogging skips logging by Martian loggers for the current request.

func (*Context) SkipRoundTrip

func (ctx *Context) SkipRoundTrip()

SkipRoundTrip skips the round trip for the current request.

func (*Context) SkippingLogging

func (ctx *Context) SkippingLogging() bool

SkippingLogging returns whether the current request / response pair will be logged.

func (*Context) SkippingRoundTrip

func (ctx *Context) SkippingRoundTrip() bool

SkippingRoundTrip returns whether the current round trip will be skipped.

type MultiError

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

MultiError is a collection of errors that implements the error interface.

func NewMultiError

func NewMultiError() *MultiError

NewMultiError returns a new MultiError.

func (*MultiError) Add

func (merr *MultiError) Add(err error)

Add appends an error to the error collection.

func (*MultiError) Empty

func (merr *MultiError) Empty() bool

Empty returns whether the *MultiError contains any errors.

func (*MultiError) Error

func (merr *MultiError) Error() string

Error returns the list of errors separated by newlines.

func (*MultiError) Errors

func (merr *MultiError) Errors() []error

Errors returns the error slice containing the error collection.

type Proxy

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

Proxy is an HTTP proxy with support for TLS MITM and customizable behavior.

func NewProxy

func NewProxy() *Proxy

NewProxy returns a new HTTP proxy.

func (*Proxy) Close

func (p *Proxy) Close()

Close sets the proxy to the closing state so it stops receiving new connections, finishes processing any inflight requests, and closes existing connections without reading anymore requests from them.

func (*Proxy) Closing

func (p *Proxy) Closing() bool

Closing returns whether the proxy is in the closing state.

func (*Proxy) GetRoundTripper

func (p *Proxy) GetRoundTripper() http.RoundTripper

GetRoundTripper gets the http.RoundTripper of the proxy.

func (*Proxy) Serve

func (p *Proxy) Serve(l net.Listener) error

Serve accepts connections from the listener and handles the requests.

func (*Proxy) SetDial

func (p *Proxy) SetDial(dial func(string, string) (net.Conn, error))

SetDial sets the dial func used to establish a connection.

func (*Proxy) SetDownstreamProxy

func (p *Proxy) SetDownstreamProxy(proxyURL *url.URL)

SetDownstreamProxy sets the proxy that receives requests from the upstream proxy.

func (*Proxy) SetMITM

func (p *Proxy) SetMITM(config *mitm.Config)

SetMITM sets the config to use for MITMing of CONNECT requests.

func (*Proxy) SetRequestModifier

func (p *Proxy) SetRequestModifier(reqmod RequestModifier)

SetRequestModifier sets the request modifier.

func (*Proxy) SetResponseModifier

func (p *Proxy) SetResponseModifier(resmod ResponseModifier)

SetResponseModifier sets the response modifier.

func (*Proxy) SetRoundTripper

func (p *Proxy) SetRoundTripper(rt http.RoundTripper)

SetRoundTripper sets the http.RoundTripper of the proxy.

func (*Proxy) SetTimeout

func (p *Proxy) SetTimeout(timeout time.Duration)

SetTimeout sets the request timeout of the proxy.

type RequestModifier

type RequestModifier interface {
	// ModifyRequest modifies the request.
	ModifyRequest(req *http.Request) error
}

RequestModifier is an interface that defines a request modifier that can be used by a proxy.

type RequestModifierFunc

type RequestModifierFunc func(req *http.Request) error

RequestModifierFunc is an adapter for using a function with the given signature as a RequestModifier.

func (RequestModifierFunc) ModifyRequest

func (f RequestModifierFunc) ModifyRequest(req *http.Request) error

ModifyRequest modifies the request using the given function.

type RequestResponseModifier

type RequestResponseModifier interface {
	RequestModifier
	ResponseModifier
}

RequestResponseModifier is an interface that is both a ResponseModifier and a RequestModifier.

func Noop

Noop returns a modifier that does not change the request or the response.

type ResponseModifier

type ResponseModifier interface {
	// ModifyResponse modifies the response.
	ModifyResponse(res *http.Response) error
}

ResponseModifier is an interface that defines a response modifier that can be used by a proxy.

type ResponseModifierFunc

type ResponseModifierFunc func(res *http.Response) error

ResponseModifierFunc is an adapter for using a function with the given signature as a ResponseModifier.

func (ResponseModifierFunc) ModifyResponse

func (f ResponseModifierFunc) ModifyResponse(res *http.Response) error

ModifyResponse modifies the response using the given function.

type Session

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

Session provides information and storage about a connection.

func (*Session) Get

func (s *Session) Get(key string) (interface{}, bool)

Get takes key and returns the associated value from the session.

func (*Session) Hijack

func (s *Session) Hijack() (net.Conn, *bufio.ReadWriter, error)

Hijack takes control of the connection from the proxy. No further action will be taken by the proxy and the connection will be closed following the return of the hijacker.

func (*Session) Hijacked

func (s *Session) Hijacked() bool

Hijacked returns whether the connection has been hijacked.

func (*Session) ID

func (s *Session) ID() string

ID returns the session ID.

func (*Session) IsSecure

func (s *Session) IsSecure() bool

IsSecure returns whether the current session is from a secure connection, such as when receiving requests from a TLS connection that has been MITM'd.

func (*Session) MarkInsecure

func (s *Session) MarkInsecure()

MarkInsecure marks the session as insecure.

func (*Session) MarkSecure

func (s *Session) MarkSecure()

MarkSecure marks the session as secure.

func (*Session) Set

func (s *Session) Set(key string, val interface{})

Set takes a key and associates it with val in the session. The value is persisted for the entire session across multiple requests and responses.

Source Files

context.go init.go martian.go multierror.go noop.go proxy.go

Directories

PathSynopsis
apiPackage api contains a forwarder to route system HTTP requests to the local API server.
authPackage auth provides filtering support for a martian.Proxy based on auth ID.
bodyPackage body allows for the replacement of message body on responses.
cmd
cmd/marblCommand-line tool to view .marbl files.
cmd/proxyproxy is an HTTP/S proxy configurable via an HTTP API.
cookiePackage cookie allows for the modification of cookies on http requests and responses.
corsPackage cors provides CORS support for http.Handlers.
cybervillainsPackage cybervillains provides the publically published Selenium project CyberVillains certificate and key.
failurePackage failure provides a verifier that always fails, adding a given message to the multierror log.
fifoPackage fifo provides Group, which is a list of modifiers that are executed consecutively.
filterPackage filter provides a modifier that executes a given set of child modifiers based on the evaluated value of the provided conditional.
h2Package h2 contains basic HTTP/2 handling for Martian.
h2/grpcPackage grpc contains gRPC functionality for Martian proxy.
h2/testingPackage testing contains a test fixture for working with gRPC over HTTP/2.
h2/testservice
harPackage har collects HTTP requests and responses and stores them in HAR format.
headerPackage header provides utilities for modifying, filtering, and verifying headers in martian.Proxy.
httpspecPackage httpspec provides a modifier stack that has been preconfigured to provide spec-compliant HTTP proxy behavior.
ipauthPackage ipauth provides a martian.Modifier that sets auth based on IP.
logPackage log provides a universal logger for martian packages.
marblPackage marbl provides HTTP traffic logs streamed over websockets that can be added to any point within a Martian modifier tree.
martianhttpPackage martianhttp provides HTTP handlers for managing the state of a martian.Proxy.
martianlogPackage martianlog provides a Martian modifier that logs the request and response.
martiantestPackage martiantest provides helper utilities for testing modifiers.
martianurlPackage martianurl provides utilities for modifying, filtering, and verifying URLs in martian.Proxy.
messageviewPackage messageview provides no-op snapshots for HTTP requests and responses.
methodPackage method provides utilities for working with request methods.
mitmPackage mitm provides tooling for MITMing TLS connections.
mobilePackage mobile configures and instantiates a Martian Proxy.
noopPackage noop provides a martian.RequestResponseModifier that does not modify the request or response.
nosigpipe
parsePackage parse constructs martian modifiers from JSON messages.
pingbackPackage pingback provides verification that specific URLs have been seen by the proxy.
portPackage port provides utilities for modifying and filtering based on the port of request URLs.
priorityPackage priority allows grouping modifiers and applying them in priority order.
proxyauthPackage proxyauth provides authentication support via the Proxy-Authorization header.
proxyutilPackage proxyutil provides functionality for building proxies.
querystringPackage querystring contains a modifier to rewrite query strings in a request.
servemuxPackage servemux contains a filter that executes modifiers when there is a pattern match in a mux.
skipPackage skip provides a request modifier to skip the HTTP round-trip.
stashPackage stash provides a modifier that stores the request URL in a specified header.
staticPackage static provides a modifier that allows Martian to return static files local to Martian.
statusPackage status contains a modifier to rewrite the status code on a response.
trafficshapePackage trafficshape provides tools for simulating latency and bandwidth at the network layer.
verifyPackage verify provides support for using martian modifiers for request and response verifications.
Version
v3.3.2
Published
Mar 14, 2022
Platform
windows/amd64
Imports
22 packages
Last checked
now

Tools for package owners.