proxy

package
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Mar 5, 2021 License: MIT Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const RawQueryContextKey contextKey = "RAW_QUERY"

RawQueryContextKey is the context key the jq query is stored under on requests.

View Source
const RawQueryHTTPHeader string = "JQ"

RawQueryHTTPHeader is the HTTP request header where the jq query is read from.

Variables

View Source
var (
	// ErrInvalidResponseBody signals that an upstream response contained invalid
	// JSON.
	ErrInvalidResponseBody = errors.New("upstream response is invalid JSON")

	// ErrIllegalResponseType signals that an upstream response's Content-Type was
	// not application/json.
	ErrIllegalResponseType = errors.New("upstream response is not application/json")

	// ErrIllegalQueryResult signals that a query resulted in a result type that
	// has no JSON representation on its own.
	ErrIllegalQueryResult = errors.New("query resulted in primitive type")
)

Upstream errors.

View Source
var HeaderParser = func(f http.HandlerFunc, logger *log.Logger) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		mediaType, _, err := mime.ParseMediaType(r.Header.Get("Accept"))
		if err != nil || mediaType != "application/json" {
			f(w, r)
			return
		}

		rawQuery := r.Header.Get(string(RawQueryHTTPHeader))
		if rawQuery == "" {
			f(w, r)
			return
		}
		log.Query(logger, r, rawQuery)
		f(w, r.WithContext(context.WithValue(r.Context(), RawQueryContextKey, rawQuery)))
	}
}

HeaderParser attaches the JQ request header value as a context key on client requests.

View Source
var RequestID = func(f http.HandlerFunc) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		if r.Header.Get("X-Request-ID") == "" {
			r.Header.Set("X-Request-ID", uuid.NewString())
		}
		f(w, r)
	}
}

RequestID sets the X-Request-ID header to a UUID if not already set.

Functions

func Director

func Director(super func(*http.Request), logger *log.Logger) func(*http.Request)

Director modifies incoming client requests.

func ErrorHandler

func ErrorHandler(logger *log.Logger) func(http.ResponseWriter, *http.Request, error)

ErrorHandler writes the response status code in case of errors.

func Rewriter

func Rewriter(logger *log.Logger) rewriter

Rewriter rewrites response bodies depending on query results.

Types

type Config

type Config struct {
	Port                  int
	CacheSize             int
	EvaluationTimeout     time.Duration
	ReadTimeout           time.Duration
	WriteTimeout          time.Duration
	DialTimeout           time.Duration
	DialKeepAlive         time.Duration
	TLSHandshakeTimeout   time.Duration
	ResponseHeaderTimeout time.Duration
	ExpectContinueTimeout time.Duration
	Level                 log.Level
}

Config is the runtime configuration of jqrp.

func NewConfig

func NewConfig() *Config

NewConfig returns a configuration read from environment variables.

func (*Config) Evaluator

func (c *Config) Evaluator() (jq.Evaluator, error)

Evaluator returns a configured evaluator.

func (*Config) Logger

func (c *Config) Logger() *log.Logger

Logger returns a logger with level set.

func (*Config) Transport

func (c *Config) Transport() *http.Transport

Transport returns an HTTP transport with timeouts set.

type Proxy

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

Proxy is a mutating reverse proxy.

func NewProxy

func NewProxy(url *url.URL, transport http.RoundTripper, evaluator jq.Evaluator, logger *log.Logger) *Proxy

NewProxy returns a new proxy that mutates upstream responses by using the given compiler

func (*Proxy) ServeHTTP

func (p *Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request)

ServeHTTP serves the proxy.

type Transformer

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

Transformer transforms some upstream responses.

func NewTransformer

func NewTransformer(evaluator jq.Evaluator, rewriter rewriter) *Transformer

NewTransformer returns a new Transformer.

func (*Transformer) ModifyResponse

func (t *Transformer) ModifyResponse(r *http.Response) error

ModifyResponse transforms responses to JSON requests that have the jq query header set.

Jump to

Keyboard shortcuts

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