catch

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Feb 13, 2024 License: MIT Imports: 17 Imported by: 0

README

catch

some middlewares

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BytesToPrivateKey

func BytesToPrivateKey(priv []byte) (*rsa.PrivateKey, error)

Convert bytes (pem) to private key

func BytesToPublicKey

func BytesToPublicKey(pub []byte) (*rsa.PublicKey, error)

Convert bytes (pem) to public key

func DecryptWithPrivateKey

func DecryptWithPrivateKey(ciphertext []byte, priv *rsa.PrivateKey) ([]byte, error)

Decrypt message using private key

func EncryptWithPublicKey

func EncryptWithPublicKey(msg []byte, pub *rsa.PublicKey) ([]byte, error)

Encrypt message using public key

func GenerateKeyPair

func GenerateKeyPair(bits int) (*rsa.PrivateKey, *rsa.PublicKey, error)

Generates private and public key

func GetLogEntry

func GetLogEntry(r *http.Request) *slog.Logger

func GetRequestIdLogger

func GetRequestIdLogger(r *http.Request) *slog.Logger

func Identify

func Identify() string

Identify returns name of package, file name and line number of place where panic occurs

func LimitIPMiddleware

func LimitIPMiddleware(limiter *KeyRateLimiter) func(next http.Handler) http.Handler

func LogAllStatuses

func LogAllStatuses(r *http.Request)

func LogEntrySetAttrs

func LogEntrySetAttrs(r *http.Request, attrs ...any)

func LogEntrySetField

func LogEntrySetField(r *http.Request, key string, value interface{})

func LogEntrySetFields

func LogEntrySetFields(r *http.Request, fields map[string]interface{})

func LogHeaders

func LogHeaders(r *http.Request)

func NewStructuredLogger

func NewStructuredLogger(handler slog.Handler, onlyErrs bool) func(next http.Handler) http.Handler

StructuredLogger is a simple, but powerful implementation of a custom structured logger backed on log/slog. I encourage users to copy it, adapt it and make it their own. Also take a look at https://github.com/go-chi/httplog for a dedicated pkg based on this work, designed for context-based http routers. Example: logger := slog.New(slog.NewJSONHandler(os.Stdout, nil)) slog.SetDefault(logger) hlog := NewStructuredLogger(slog.Default().Handler(), true)

func PrivateKeyToBytes

func PrivateKeyToBytes(priv *rsa.PrivateKey) []byte

Convert private key to bytes (pem)

func Protection

func Protection(next http.Handler) http.Handler

func PublicKeyToBytes

func PublicKeyToBytes(pub *rsa.PublicKey) ([]byte, error)

Convert public key to bytes (pem)

func RealIPFromRequest

func RealIPFromRequest(r *http.Request) string

func Recoverer

func Recoverer(next http.Handler) http.Handler

func RequestForwardedHostProtoMiddleware

func RequestForwardedHostProtoMiddleware(next http.Handler) http.Handler

func RequestHost

func RequestHost(r *http.Request) (host string)

func RequestProto

func RequestProto(r *http.Request) (proto string)

Types

type ErrResponse

type ErrResponse struct {
	Err            error `json:"-"` // low-level runtime error
	HTTPStatusCode int   `json:"-"` // http response status code

	StatusText string `json:"status"`          // user-level status message
	AppCode    int64  `json:"code,omitempty"`  // application-specific error code
	ErrorText  string `json:"error,omitempty"` // application-level error message, for debugging
}

func (*ErrResponse) Error

func (e *ErrResponse) Error() string

func (*ErrResponse) Render

func (e *ErrResponse) Render(w http.ResponseWriter, r *http.Request) error

type KeyCountLimiter

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

func NewKeyCountLimiter

func NewKeyCountLimiter(b int) *KeyCountLimiter

func (*KeyCountLimiter) Allow

func (i *KeyCountLimiter) Allow(key, countKey string) bool

type KeyRateLimiter

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

func NewKeyRateLimiter

func NewKeyRateLimiter(r rate.Limit, b int) *KeyRateLimiter

func (*KeyRateLimiter) GetKeyLimiter

func (i *KeyRateLimiter) GetKeyLimiter(key string) *rate.Limiter

type StringLimiter

type StringLimiter struct {
	Key     string
	Limiter *rate.Limiter
}

type StructuredLogger

type StructuredLogger struct {
	Logger     slog.Handler
	OnlyErrors bool
}

func (*StructuredLogger) NewLogEntry

func (l *StructuredLogger) NewLogEntry(r *http.Request) middleware.LogEntry

type StructuredLoggerEntry

type StructuredLoggerEntry struct {
	Ctx        context.Context
	OnlyErrors bool
	Logger     *slog.Logger
}

func (*StructuredLoggerEntry) Panic

func (l *StructuredLoggerEntry) Panic(v interface{}, stack []byte)

func (*StructuredLoggerEntry) Write

func (l *StructuredLoggerEntry) Write(status, bytes int, header http.Header, elapsed time.Duration, extra interface{})

type UniqueKeyLimiter

type UniqueKeyLimiter struct {
	Key   string
	Count []string // unique keys for counting
}

Jump to

Keyboard shortcuts

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