diff --git a/auth/handlers/handle_signup.go b/auth/handlers/handle_signup.go index 7a4559169..c46a780af 100644 --- a/auth/handlers/handle_signup.go +++ b/auth/handlers/handle_signup.go @@ -58,6 +58,15 @@ func (h *AuthHandlers) signupProc(req *request.AuthReq) error { return nil } + fallback := func(req *request.AuthReq) { + req.SetKV(map[string]string{ + "error": err.Error(), + "email": payload.Email, + "handle": payload.Handle, + "name": payload.Name, + }) + } + switch { case service.AuthErrInternalSignupDisabledByConfig().Is(err): h.signupDisabledAlert(req) @@ -66,17 +75,14 @@ func (h *AuthHandlers) signupProc(req *request.AuthReq) error { service.AuthErrInvalidHandle().Is(err), service.AuthErrPasswordNotSecure().Is(err), service.AuthErrInvalidCredentials().Is(err): - req.SetKV(map[string]string{ - "error": err.Error(), - "email": payload.Email, - "handle": payload.Handle, - "name": payload.Name, - }) + fallback(req) h.Log.Warn("handled error", zap.Error(err)) return nil default: + fallback(req) + h.Log.Error("unhandled error", zap.Error(err)) return err } diff --git a/auth/handlers/handle_signup_test.go b/auth/handlers/handle_signup_test.go index 8f88b2353..306ae0b54 100644 --- a/auth/handlers/handle_signup_test.go +++ b/auth/handlers/handle_signup_test.go @@ -170,6 +170,44 @@ func Test_signupProc(t *testing.T) { } }, }, + { + name: "handle not unique", + err: "handle not unique", + alerts: []request.Alert(nil), + link: GetLinks().Signup, + payload: map[string]string{"email": "test@mail.com", "error": "handle not unique", "handle": "test-user", "name": "Test User"}, + postForm: url.Values{ + "email": {"test@mail.com"}, + "handle": {"test-user"}, + "name": {"Test User"}, + }, + fn: func(_ *settings.Settings) { + authService = &authServiceMocked{ + internalSignUp: func(c context.Context, user *types.User, s string) (u *types.User, err error) { + return nil, service.UserErrHandleNotUnique() + }, + } + }, + }, + { + name: "email not unique", + err: "email not unique", + alerts: []request.Alert(nil), + link: GetLinks().Signup, + payload: map[string]string{"email": "test@mail.com", "error": "email not unique", "handle": "test-user", "name": "Test User"}, + postForm: url.Values{ + "email": {"test@mail.com"}, + "handle": {"test-user"}, + "name": {"Test User"}, + }, + fn: func(_ *settings.Settings) { + authService = &authServiceMocked{ + internalSignUp: func(c context.Context, user *types.User, s string) (u *types.User, err error) { + return nil, service.UserErrEmailNotUnique() + }, + } + }, + }, } for _, tc := range tcc { @@ -178,7 +216,7 @@ func Test_signupProc(t *testing.T) { // reset from previous req.Form = url.Values{} - req.PostForm = url.Values{} + req.PostForm = tc.postForm authSettings := &settings.Settings{} @@ -189,7 +227,11 @@ func Test_signupProc(t *testing.T) { err := authHandlers.signupProc(authReq) - rq.NoError(err) + if len(tc.err) > 0 { + rq.Equal(tc.err, err.Error()) + } else { + rq.NoError(err) + } rq.Equal(tc.template, authReq.Template) rq.Equal(tc.payload, authReq.GetKV()) rq.Equal(tc.alerts, authReq.NewAlerts) diff --git a/auth/handlers/handler.go b/auth/handlers/handler.go index 9276c749e..83e14507a 100644 --- a/auth/handlers/handler.go +++ b/auth/handlers/handler.go @@ -209,7 +209,6 @@ func (h *AuthHandlers) handle(fn handlerFn) http.HandlerFunc { req.PrevAlerts = req.PopAlerts() if err = fn(req); err != nil { h.Log.Error("error in handler", zap.Error(err)) - return } if req.RedirectTo != "" && len(req.PrevAlerts) > 0 { diff --git a/auth/handlers/mock_test.go b/auth/handlers/mock_test.go index b38a035c8..9dd130845 100644 --- a/auth/handlers/mock_test.go +++ b/auth/handlers/mock_test.go @@ -4,6 +4,7 @@ import ( "context" "net/http" "net/http/httptest" + "net/url" "github.com/cortezaproject/corteza-server/auth/request" "github.com/cortezaproject/corteza-server/auth/settings" @@ -67,6 +68,7 @@ type ( template string alerts []request.Alert userService userService + postForm url.Values fn func(*settings.Settings) }