From 1ede54ddf6dfd2d4ba039eb7e23b74bcac65b643 Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Wed, 8 Jun 2022 20:38:03 +0200 Subject: [feature] More consistent API error handling (#637) * update templates * start reworking api error handling * update template * return AP status at web endpoint if negotiated * start making api error handling much more consistent * update account endpoints to new error handling * use new api error handling in admin endpoints * go fmt ./... * use api error logic in app * use generic error handling in auth * don't export generic error handler * don't defer clearing session * user nicer error handling on oidc callback handler * tidy up the sign in handler * tidy up the token handler * use nicer error handling in blocksget * auth emojis endpoint * fix up remaining api endpoints * fix whoopsie during login flow * regenerate swagger docs * change http error logging to debug --- internal/gtserror/unauthorized.go | 19 ------------------ internal/gtserror/withcode.go | 42 +++++++++++++++++++++++++++++++-------- 2 files changed, 34 insertions(+), 27 deletions(-) delete mode 100644 internal/gtserror/unauthorized.go (limited to 'internal/gtserror') diff --git a/internal/gtserror/unauthorized.go b/internal/gtserror/unauthorized.go deleted file mode 100644 index fb10f748f..000000000 --- a/internal/gtserror/unauthorized.go +++ /dev/null @@ -1,19 +0,0 @@ -/* - GoToSocial - Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -package gtserror diff --git a/internal/gtserror/withcode.go b/internal/gtserror/withcode.go index 34889b961..6672000dc 100644 --- a/internal/gtserror/withcode.go +++ b/internal/gtserror/withcode.go @@ -60,7 +60,7 @@ func (e withCode) Code() int { // NewErrorBadRequest returns an ErrorWithCode 400 with the given original error and optional help text. func NewErrorBadRequest(original error, helpText ...string) WithCode { - safe := "bad request" + safe := http.StatusText(http.StatusBadRequest) if helpText != nil { safe = safe + ": " + strings.Join(helpText, ": ") } @@ -71,9 +71,9 @@ func NewErrorBadRequest(original error, helpText ...string) WithCode { } } -// NewErrorNotAuthorized returns an ErrorWithCode 401 with the given original error and optional help text. -func NewErrorNotAuthorized(original error, helpText ...string) WithCode { - safe := "not authorized" +// NewErrorUnauthorized returns an ErrorWithCode 401 with the given original error and optional help text. +func NewErrorUnauthorized(original error, helpText ...string) WithCode { + safe := http.StatusText(http.StatusUnauthorized) if helpText != nil { safe = safe + ": " + strings.Join(helpText, ": ") } @@ -86,7 +86,7 @@ func NewErrorNotAuthorized(original error, helpText ...string) WithCode { // NewErrorForbidden returns an ErrorWithCode 403 with the given original error and optional help text. func NewErrorForbidden(original error, helpText ...string) WithCode { - safe := "forbidden" + safe := http.StatusText(http.StatusForbidden) if helpText != nil { safe = safe + ": " + strings.Join(helpText, ": ") } @@ -99,7 +99,7 @@ func NewErrorForbidden(original error, helpText ...string) WithCode { // NewErrorNotFound returns an ErrorWithCode 404 with the given original error and optional help text. func NewErrorNotFound(original error, helpText ...string) WithCode { - safe := "404 not found" + safe := http.StatusText(http.StatusNotFound) if helpText != nil { safe = safe + ": " + strings.Join(helpText, ": ") } @@ -112,7 +112,7 @@ func NewErrorNotFound(original error, helpText ...string) WithCode { // NewErrorInternalError returns an ErrorWithCode 500 with the given original error and optional help text. func NewErrorInternalError(original error, helpText ...string) WithCode { - safe := "internal server error" + safe := http.StatusText(http.StatusInternalServerError) if helpText != nil { safe = safe + ": " + strings.Join(helpText, ": ") } @@ -125,7 +125,7 @@ func NewErrorInternalError(original error, helpText ...string) WithCode { // NewErrorConflict returns an ErrorWithCode 409 with the given original error and optional help text. func NewErrorConflict(original error, helpText ...string) WithCode { - safe := "conflict" + safe := http.StatusText(http.StatusConflict) if helpText != nil { safe = safe + ": " + strings.Join(helpText, ": ") } @@ -135,3 +135,29 @@ func NewErrorConflict(original error, helpText ...string) WithCode { code: http.StatusConflict, } } + +// NewErrorNotAcceptable returns an ErrorWithCode 406 with the given original error and optional help text. +func NewErrorNotAcceptable(original error, helpText ...string) WithCode { + safe := http.StatusText(http.StatusNotAcceptable) + if helpText != nil { + safe = safe + ": " + strings.Join(helpText, ": ") + } + return withCode{ + original: original, + safe: errors.New(safe), + code: http.StatusNotAcceptable, + } +} + +// NewErrorUnprocessableEntity returns an ErrorWithCode 422 with the given original error and optional help text. +func NewErrorUnprocessableEntity(original error, helpText ...string) WithCode { + safe := http.StatusText(http.StatusUnprocessableEntity) + if helpText != nil { + safe = safe + ": " + strings.Join(helpText, ": ") + } + return withCode{ + original: original, + safe: errors.New(safe), + code: http.StatusUnprocessableEntity, + } +} -- cgit v1.2.3