56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package context
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
const (
|
|
// AuthenticatedUserKey is the key used to store the authenticated user in context.
|
|
AuthenticatedUserKey = "auth_user"
|
|
|
|
// UserKey is the key used to store a user in context.
|
|
UserKey = "user"
|
|
|
|
// FormKey is the key used to store a form in context.
|
|
FormKey = "form"
|
|
|
|
// PasswordTokenKey is the key used to store a password token in context.
|
|
PasswordTokenKey = "password_token"
|
|
|
|
// LoggerKey is the key used to store a structured logger in context.
|
|
LoggerKey = "logger"
|
|
|
|
// SessionKey is the key used to store the session data in context.
|
|
SessionKey = "session"
|
|
|
|
// HTMXRequestKey is the key used to store the HTMX request data in context.
|
|
HTMXRequestKey = "htmx"
|
|
|
|
// CSRFKey is the key used to store the CSRF token in context.
|
|
CSRFKey = "csrf"
|
|
|
|
// ConfigKey is the key used to store the configuration in context.
|
|
ConfigKey = "config"
|
|
)
|
|
|
|
// IsCanceledError determines if an error is due to a context cancellation.
|
|
func IsCanceledError(err error) bool {
|
|
return errors.Is(err, context.Canceled)
|
|
}
|
|
|
|
// Cache checks if a value of a given type exists in the Echo context for a given key and returns that, otherwise
|
|
// it will use a callback to generate a value, which is stored in the context then returned. This allows you to
|
|
// only generate items only once for a given request.
|
|
func Cache[T any](ctx echo.Context, key string, gen func(echo.Context) T) T {
|
|
if val := ctx.Get(key); val != nil {
|
|
if v, ok := val.(T); ok {
|
|
return v
|
|
}
|
|
}
|
|
val := gen(ctx)
|
|
ctx.Set(key, val)
|
|
return val
|
|
}
|