mware

package
v0.0.0-...-4733969 Latest Latest
Warning

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

Go to latest
Published: Apr 23, 2026 License: MIT Imports: 13 Imported by: 2

Documentation

Overview

Package mware contains HTTP middlewares.

See e.g. chi for some additional middlewares.

Index

Constants

This section is empty.

Variables

View Source
var DefaultHeaders = http.Header{
	"Strict-Transport-Security": []string{"max-age=7776000"},
	"X-Frame-Options":           []string{"deny"},
	"X-Content-Type-Options":    []string{"nosniff"},
}

DefaultHeaders will be set by default.

Functions

func Delay

func Delay(d time.Duration) func(http.Handler) http.Handler

Delay adds a delay before every request.

The default delay is taken from the paramters (which may be 0), and can also be overriden by setting a "debug-delay" cookie, which is in seconds.

This is intended for debugging frontend timing issues.

func Headers

func Headers(h http.Header) func(next http.Handler) http.Handler

Headers sets the given headers.

DefaultHeaders will always be set. Headers passed to this function overrides them. Use a nil value to remove a header.

func NoCache

func NoCache() func(http.Handler) http.Handler

NoCache sets the Cache-Control header to "no-cache".

Browsers will always validate a cache (with e.g. If-Match or If-None-Match). It does NOT tell browsers to never store a cache (use NoStore for that).

func NoStore

func NoStore() func(http.Handler) http.Handler

NoStore sets the Cache-Control header to "no-store, no-cache"

Browsers will never store a local copy (the no-cache is there to be sure previously stored copies from before this header are revalidated).

func RealIP

func RealIP(never ...string) func(http.Handler) http.Handler

RealIP sets the RemoteAddr to CF-Connecting-IP, Fly-Client-IP, X-Azure-SocketIP, X-Real-IP, X-Forwarded-For, or the RemoteAddr without a port.

The end result willl never have a source port set. It will ignore local and private addresses such as 127.0.0.1, 192.168.1.1, etc.

TODO: allow configuring which headers to look at, as this is very much dependent on the specific configuration; preferring e.g. Fly-Client-Ip means its trivial to spoof the "real IP".

func RequestLog

func RequestLog(opt *RequestLogOptions, printer RequestLogPrinter, ignore ...string) func(http.Handler) http.Handler

RequestLog logs all requests to stdout.

Any paths matching ignore will not be printed.

func Unpanic

func Unpanic(filterStack ...string) func(http.Handler) http.Handler

Unpanic recovers from panics in handlers and calls ErrPage().

func With

func With(handler http.Handler, wares ...func(http.Handler) http.Handler) http.Handler

TODO: put in zhttp

func WrapWriter

func WrapWriter() func(http.Handler) http.Handler

WrapWriter replaces the http.ResponseWriter with our version of http.ResponseWriter for some additional functionality.

Types

type RequestLogOptions

type RequestLogOptions struct {
	Host    bool   // Print Host: as well
	TimeFmt string // Time format; default is just the time.
}

type RequestLogPrinter

type RequestLogPrinter func(r *http.Request, url string, status int, start time.Time, opt *RequestLogOptions)

Jump to

Keyboard shortcuts

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