diff --git a/internal/domain/action.go b/internal/domain/action.go index 5c75c23..de218ed 100644 --- a/internal/domain/action.go +++ b/internal/domain/action.go @@ -25,7 +25,7 @@ var ( ActionTicket = Action{uid: "ticket"} ) -var ErrActionUnknown error = NewError(ErrorCodeInvalidRequest, "unknown action method") +var ErrActionUnknown error = NewError(ErrorCodeInvalidRequest, "unknown action method", "") // ParseAction parse string identifier of action into struct enum. func ParseAction(uid string) (Action, error) { diff --git a/internal/domain/code_challenge_method.go b/internal/domain/code_challenge_method.go index 9c6b371..023a7b7 100644 --- a/internal/domain/code_challenge_method.go +++ b/internal/domain/code_challenge_method.go @@ -54,7 +54,11 @@ var ( } ) -var ErrCodeChallengeMethodUnknown error = NewError(ErrorCodeInvalidRequest, "unknown code_challene_method") +var ErrCodeChallengeMethodUnknown error = NewError( + ErrorCodeInvalidRequest, + "unknown code_challene_method", + "https://indieauth.net/source/#authorization-request", +) //nolint: gochecknoglobals // NOTE(toby3d): maps cannot be constants var slugsMethods = map[string]CodeChallengeMethod{ diff --git a/internal/domain/email.go b/internal/domain/email.go index 0abbae7..4c57861 100644 --- a/internal/domain/email.go +++ b/internal/domain/email.go @@ -11,7 +11,7 @@ type Email struct { host string } -var ErrEmailInvalid error = NewError(ErrorCodeInvalidRequest, "cannot parse email") +var ErrEmailInvalid error = NewError(ErrorCodeInvalidRequest, "cannot parse email", "") // ParseEmail parse strings to email identifier. func ParseEmail(src string) (*Email, error) { diff --git a/internal/domain/error.go b/internal/domain/error.go index 0bfd70a..4981524 100644 --- a/internal/domain/error.go +++ b/internal/domain/error.go @@ -171,20 +171,25 @@ func (e Error) SetReirectURI(u *http.URI) { } // NewError creates a new Error with the stack pointing to the function call -// line. +// line number. // // If no code or ErrorCodeUndefined is provided, ErrorCodeAccessDenied will be // used instead. -func NewError(code ErrorCode, description string) *Error { +func NewError(code ErrorCode, description, uri string, requestState ...string) *Error { if code == ErrorCodeUndefined { code = ErrorCodeAccessDenied } + var state string + if len(requestState) > 0 { + state = requestState[0] + } + return &Error{ Code: code, Description: description, - URI: "", - State: "", + URI: uri, + State: state, frame: xerrors.Caller(1), } } diff --git a/internal/domain/error_test.go b/internal/domain/error_test.go index 42b9d22..9d4282b 100644 --- a/internal/domain/error_test.go +++ b/internal/domain/error_test.go @@ -7,6 +7,6 @@ import ( ) func ExampleNewError() { - fmt.Printf("%v", domain.NewError(domain.ErrorCodeInvalidRequest, "client_id MUST be provided")) + fmt.Printf("%v", domain.NewError(domain.ErrorCodeInvalidRequest, "client_id MUST be provided", "")) // Output: invalid_request: client_id MUST be provided } diff --git a/internal/domain/scope.go b/internal/domain/scope.go index e11ebc7..7c36a76 100644 --- a/internal/domain/scope.go +++ b/internal/domain/scope.go @@ -20,7 +20,7 @@ type ( Scopes []Scope ) -var ErrScopeUnknown error = NewError(ErrorCodeInvalidRequest, "unknown scope") +var ErrScopeUnknown error = NewError(ErrorCodeInvalidRequest, "unknown scope", "https://indieweb.org/scope") //nolint: gochecknoglobals // NOTE(toby3d): structs cannot be constants var (