middlewares

package
v1.2.1 Latest Latest
Warning

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

Go to latest
Published: May 14, 2026 License: GPL-3.0 Imports: 18 Imported by: 0

README

server/webserver/middlewares

Import path: github.com/InsideGallery/core/server/webserver/middlewares

This package contains HTTP and Fiber middleware for CORS preflight responses, panic recovery, JWE request/response handling, metrics, OpenTelemetry tracing, timing, and URL normalization.

Main APIs

  • CORSMiddleware(methods...): net/http preflight handler with wildcard CORS.
  • Recover(next) and RecoverFiber(next): panic recovery for net/http and Fiber.
  • NewJWE(keyGetter) and JWE.DecryptMiddleware: decrypt compact JWE request bodies, store plaintext in DecryptValueKey, and optionally encrypt ResponseValueKey as a compact JWE response.
  • EncryptResponse and GetSessionKey: JWE response encryption and HKDF-derived session keys.
  • Metrics(client): Fiber middleware that records request duration, count, and server error metrics.
  • Telemetry(): Fiber middleware backed by OpenTelemetry otelhttp; it sets X-Trace-ID when a span context is available.
  • Timing, TimingStats, and StartTimingReporter: request timing collection and periodic logging.
  • URLWithoutQuery(r): returns an opaque or escaped path without query values.

Usage

app := fiber.New()
app.Use(middlewares.RecoverFiber)
app.Use(middlewares.Metrics(metricsClient))
app.Use(middlewares.Telemetry())

For encrypted requests, handlers read decrypted bytes from c.Locals(middlewares.DecryptValueKey) and set encrypted response bytes with c.Locals(middlewares.ResponseValueKey, payload).

Operational Notes

The package depends on Fiber, go-jose, and OpenTelemetry HTTP instrumentation. Metrics clients only need Count and Distribution methods; recorder errors are logged and do not fail the request.

Documentation

Index

Constants

View Source
const (
	DecryptValueKey  = "decrypted_body"
	ResponseValueKey = "response_body"

	HeaderJOSE = "application/jose"
)
View Source
const HeaderXTraceID = "X-Trace-ID"

Variables

View Source
var (
	DefaultSpanNameFormatter = func(_ string, r *http.Request) string {
		var b strings.Builder

		b.WriteString(r.Method)
		b.WriteString(":")
		b.WriteString(decreasePathCardinality(r.URL.Path))

		return b.String()
	}

	DefaultFilter = func(r *http.Request) bool {
		if k, ok := r.Header["Upgrade"]; ok {
			for _, v := range k {
				if v == "websocket" {
					return false
				}
			}
		}

		return r.Method != http.MethodGet || !strings.HasPrefix(r.URL.RequestURI(), "/health")
	}
)

Functions

func CORSMiddleware

func CORSMiddleware(methods ...string) http.HandlerFunc

CORSMiddleware implement cors request

func EncryptResponse added in v1.0.8

func EncryptResponse(sesKey, payload []byte) (string, error)

func GetSessionKey added in v1.0.8

func GetSessionKey(masterSecret []byte, nonce []byte) ([]byte, error)

func Metrics added in v1.1.0

func Metrics(client metricRecorder) fiber.Handler

Metrics returns a Fiber middleware that records HTTP request metrics.

func Recover

func Recover(next http.Handler) http.Handler

func RecoverFiber

func RecoverFiber(next fiber.Handler) fiber.Handler

func StartTimingReporter added in v1.1.0

func StartTimingReporter(ctx context.Context)

StartTimingReporter starts a goroutine that logs average response time every interval. Cancel the context to stop it.

func Telemetry

func Telemetry() func(next fiber.Handler) fiber.Handler

func Timing

func Timing(next fiber.Handler) fiber.Handler

Timing calculate time of request

func TimingStats added in v1.1.0

func TimingStats() (time.Duration, int)

TimingStats returns current average response duration and resets counters.

func URLWithoutQuery

func URLWithoutQuery(r *http.Request) string

Types

type JWE added in v1.0.8

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

func NewJWE added in v1.0.8

func NewJWE(decryptionKeyGetter func(c fiber.Ctx) ([]byte, error)) *JWE

func (*JWE) DecryptMiddleware added in v1.0.8

func (j *JWE) DecryptMiddleware(c fiber.Ctx) error

Jump to

Keyboard shortcuts

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