package auth import "errors" var ( ErrRegisterFieldsRequired = errors.New("email, password, and company name are required") ErrPasswordTooShort = errors.New("password must be at least 8 characters") ErrUserNotFound = errors.New("user not found") ErrNotCompanyMember = errors.New("not a member of company") ErrCompanyNotFound = errors.New("company not found") ErrInviteNotFound = errors.New("invite not found") ErrEmailRequired = errors.New("email is required") ErrSyntheticEmail = errors.New("synthetic migration email cannot receive invites") ErrNotEligibleSetPassword = errors.New("user not eligible for set-password invite") ErrEmailMismatch = errors.New("signed-in email does not match invite email") ) // ClientError reports whether err is a known client-facing auth error. func ClientError(err error) (msg string, ok bool) { switch { case err == nil: return "", false case errors.Is(err, ErrSyntheticEmail): return "this email cannot receive invites", true case errors.Is(err, ErrRegisterFieldsRequired), errors.Is(err, ErrPasswordTooShort), errors.Is(err, ErrPasswordAlreadySet), errors.Is(err, ErrUserExists), errors.Is(err, ErrInviteInvalid), errors.Is(err, ErrInvalidCredentials), errors.Is(err, ErrMustSetPassword), errors.Is(err, ErrUserNotFound), errors.Is(err, ErrNotCompanyMember), errors.Is(err, ErrInviteNotFound), errors.Is(err, ErrTokenInvalid), errors.Is(err, ErrEmailRequired), errors.Is(err, ErrNotEligibleSetPassword), errors.Is(err, ErrEmailMismatch), errors.Is(err, ErrNotCompanyOwner), errors.Is(err, ErrCannotRemoveOwner), errors.Is(err, ErrTransferSelf), errors.Is(err, ErrOwnerRequired): return err.Error(), true default: return "", false } }