From d8d5818b47009f28433a7e96bcce8d116c8a9769 Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Mon, 6 Mar 2023 09:38:43 +0000 Subject: [bugfix] internal server error on search not found (#1590) * add error value wrapping, include status code / not found flags from transport errors, update error usages Signed-off-by: kim * add code commenting for gtserror functions Signed-off-by: kim --------- Signed-off-by: kim --- internal/federation/dereferencing/error.go | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'internal/federation/dereferencing/error.go') diff --git a/internal/federation/dereferencing/error.go b/internal/federation/dereferencing/error.go index 3ba357f7a..530c72b32 100644 --- a/internal/federation/dereferencing/error.go +++ b/internal/federation/dereferencing/error.go @@ -19,10 +19,10 @@ package dereferencing import ( - "errors" "fmt" + "net/http" - "github.com/superseriousbusiness/gotosocial/internal/transport" + "github.com/superseriousbusiness/gotosocial/internal/gtserror" ) // ErrDB denotes that a proper error has occurred when doing @@ -96,22 +96,21 @@ func newErrOther(err error) error { } func wrapDerefError(derefErr error, fluff string) error { - var ( - err error - errWrongType *ErrWrongType - ) - + // Wrap with fluff. + err := derefErr if fluff != "" { err = fmt.Errorf("%s: %w", fluff, derefErr) } - switch { - case errors.Is(derefErr, transport.ErrGone): - err = NewErrNotRetrievable(err) - case errors.As(derefErr, &errWrongType): - err = newErrWrongType(err) - default: - err = newErrTransportError(err) + // Check for unretrievable HTTP status code errors. + if code := gtserror.StatusCode(derefErr); // nocollapse + code == http.StatusGone || code == http.StatusNotFound { + return NewErrNotRetrievable(err) + } + + // Check for other untrievable errors. + if gtserror.NotFound(derefErr) { + return NewErrNotRetrievable(err) } return err -- cgit v1.2.3