3
0

Add fallback values on error for signup

Also, fixes redirection on error on auth handler
This commit is contained in:
Vivek Patel 2022-10-05 20:06:49 +05:30
parent 5d476dcfa0
commit 57721291b2
4 changed files with 58 additions and 9 deletions

View File

@ -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
}

View File

@ -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)

View File

@ -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 {

View File

@ -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)
}