1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package imagedata
- import (
- "context"
- "errors"
- "fmt"
- "net/http"
- "github.com/imgproxy/imgproxy/v3/ierrors"
- "github.com/imgproxy/imgproxy/v3/security"
- )
- type httpError interface {
- Timeout() bool
- }
- func wrapError(err error) error {
- isTimeout := false
- switch {
- case errors.Is(err, context.DeadlineExceeded):
- isTimeout = true
- case errors.Is(err, context.Canceled):
- return ierrors.New(
- 499,
- fmt.Sprintf("The image request is cancelled: %s", err),
- msgSourceImageIsUnreachable,
- )
- case errors.Is(err, security.ErrSourceAddressNotAllowed), errors.Is(err, security.ErrInvalidSourceAddress):
- return ierrors.New(
- 404,
- err.Error(),
- msgSourceImageIsUnreachable,
- )
- default:
- if httpErr, ok := err.(httpError); ok {
- isTimeout = httpErr.Timeout()
- }
- }
- if !isTimeout {
- return err
- }
- ierr := ierrors.New(
- http.StatusGatewayTimeout,
- fmt.Sprintf("The image request timed out: %s", err),
- msgSourceImageIsUnreachable,
- )
- ierr.Unexpected = true
- return ierr
- }
|