Files
imgproxy/handlers/errors.go
2025-09-08 08:38:29 +02:00

72 lines
1.9 KiB
Go

package handlers
import (
"fmt"
"net/http"
"github.com/imgproxy/imgproxy/v3/ierrors"
"github.com/imgproxy/imgproxy/v3/imagetype"
)
// Monitoring error categories
const (
CategoryTimeout = "timeout"
CategoryImageDataSize = "image_data_size"
CategoryPathParsing = "path_parsing"
CategorySecurity = "security"
CategoryQueue = "queue"
CategoryDownload = "download"
CategoryProcessing = "processing"
CategoryIO = "IO"
CategoryConfig = "config(tmp)" // NOTE: THIS IS TEMPORARY
)
type (
ResponseWriteError struct{ error }
InvalidURLError string
)
func NewResponseWriteError(cause error) *ierrors.Error {
return ierrors.Wrap(
ResponseWriteError{cause},
1,
ierrors.WithPublicMessage("Failed to write response"),
)
}
func (e ResponseWriteError) Error() string {
return fmt.Sprintf("Failed to write response: %s", e.error)
}
func (e ResponseWriteError) Unwrap() error {
return e.error
}
func NewInvalidURLErrorf(status int, format string, args ...interface{}) error {
return ierrors.Wrap(
InvalidURLError(fmt.Sprintf(format, args...)),
1,
ierrors.WithStatusCode(status),
ierrors.WithPublicMessage("Invalid URL"),
ierrors.WithShouldReport(false),
)
}
func (e InvalidURLError) Error() string { return string(e) }
// newCantSaveError creates "resulting image not supported" error
func NewCantSaveError(format imagetype.Type) error {
return ierrors.Wrap(NewInvalidURLErrorf(
http.StatusUnprocessableEntity,
"Resulting image format is not supported: %s", format,
), 1, ierrors.WithCategory(CategoryPathParsing))
}
// newCantLoadError creates "source image not supported" error
func NewCantLoadError(format imagetype.Type) error {
return ierrors.Wrap(NewInvalidURLErrorf(
http.StatusUnprocessableEntity,
"Source image format is not supported: %s", format,
), 1, ierrors.WithCategory(CategoryProcessing))
}