1
0
mirror of https://github.com/imgproxy/imgproxy.git synced 2026-04-08 02:22:48 +02:00
Files
imgproxy/security/errors.go
2026-01-14 18:10:46 +01:00

62 lines
1.7 KiB
Go

package security
import (
"context"
"fmt"
"net/http"
"github.com/imgproxy/imgproxy/v3/errctx"
)
type (
SignatureError struct{ *errctx.TextError }
ImageResolutionError struct{ *errctx.TextError }
SourceURLError struct{ *errctx.TextError }
)
func newSignatureError(msg string) error {
return SignatureError{errctx.NewTextError(
msg,
1,
errctx.WithStatusCode(http.StatusForbidden),
errctx.WithPublicMessage("Forbidden"),
errctx.WithShouldReport(false),
errctx.WithDocsURL("https://docs.imgproxy.net/usage/signing_url"),
)}
}
func newMalformedSignatureError(ctx context.Context) error {
msg := "The signature appears to be a processing option. The signature section should always be present in the URL."
return SignatureError{errctx.NewTextError(
msg,
1,
errctx.WithStatusCode(http.StatusForbidden),
errctx.WithPublicMessage(msg),
errctx.WithShouldReport(false),
errctx.WithDocsURL(errctx.DocsBaseURL(ctx, "https://docs.imgproxy.net/usage/processing")),
)}
}
func newImageResolutionError(msg string) error {
return ImageResolutionError{errctx.NewTextError(
msg,
1,
errctx.WithStatusCode(http.StatusUnprocessableEntity),
errctx.WithPublicMessage("Invalid source image"),
errctx.WithShouldReport(false),
errctx.WithDocsURL("https://docs.imgproxy.net/configuration/options#security"),
)}
}
func newSourceURLError(imageURL string) error {
return SourceURLError{errctx.NewTextError(
fmt.Sprintf("Source URL is not allowed: %s", imageURL),
1,
errctx.WithStatusCode(http.StatusNotFound),
errctx.WithPublicMessage("Invalid source URL"),
errctx.WithShouldReport(false),
errctx.WithDocsURL("https://docs.imgproxy.net/configuration/options#IMGPROXY_ALLOWED_SOURCES"),
)}
}