Compare commits

...

2 Commits

Author SHA1 Message Date
Darren Hoo 002b840fa4
Merge 13a2383597 into 1748045285 2025-06-22 20:23:06 +09:00
hyg 13a2383597 Show error instead of 500 HTTP error if authenticate fails via external SMTP
Close #27043
2025-02-18 00:41:31 +08:00
1 changed files with 7 additions and 10 deletions

View File

@ -42,16 +42,13 @@ func (source *Source) Authenticate(ctx context.Context, user *user_model.User, u
}
if err := Authenticate(auth, source); err != nil {
// Check standard error format first,
// then fallback to worse case.
tperr, ok := err.(*textproto.Error)
if (ok && tperr.Code == 535) ||
strings.Contains(err.Error(), "Username and Password not accepted") {
return nil, user_model.ErrUserNotExist{Name: userName}
}
if (ok && tperr.Code == 534) ||
strings.Contains(err.Error(), "Application-specific password required") {
return nil, user_model.ErrUserNotExist{Name: userName}
// when authentication via smtp fails, wraps ErrInvalidArgument
// with the original textproto.Error as the cause,
// so it will show username_password_incorrect to the user
// while log the original error so that admin can check.
// see: routers/web/auth/auth.go SiginPost
if tperr, ok := err.(*textproto.Error); ok {
return nil, errors.Join(util.ErrInvalidArgument, tperr)
}
return nil, err
}