@@ -10,6 +10,7 @@ import (
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
|
||||
sq "github.com/mattermost/squirrel"
|
||||
"github.com/pkg/errors"
|
||||
@@ -17,6 +18,7 @@ import (
|
||||
|
||||
"github.com/mattermost/mattermost-server/v6/einterfaces"
|
||||
"github.com/mattermost/mattermost-server/v6/model"
|
||||
"github.com/mattermost/mattermost-server/v6/shared/mlog"
|
||||
"github.com/mattermost/mattermost-server/v6/store"
|
||||
)
|
||||
|
||||
@@ -59,7 +61,24 @@ func newSqlUserStore(sqlStore *SqlStore, metrics einterfaces.MetricsInterface) s
|
||||
return us
|
||||
}
|
||||
|
||||
func (us SqlUserStore) validateAutoResponderMessageSize(notifyProps model.StringMap) error {
|
||||
if notifyProps != nil {
|
||||
maxPostSize := us.Post().GetMaxPostSize()
|
||||
msg := notifyProps[model.AutoResponderMessageNotifyProp]
|
||||
msgSize := utf8.RuneCountInString(msg)
|
||||
if msgSize > maxPostSize {
|
||||
mlog.Warn("auto_responder_message has size restrictions", mlog.Int("max_characters", maxPostSize), mlog.Int("received_size", msgSize))
|
||||
return errors.New("Auto responder message size can't be more than the allowed Post size")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (us SqlUserStore) insert(user *model.User) (sql.Result, error) {
|
||||
if err := us.validateAutoResponderMessageSize(user.NotifyProps); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
query := `INSERT INTO Users
|
||||
(Id, CreateAt, UpdateAt, DeleteAt, Username, Password, AuthData, AuthService,
|
||||
Email, EmailVerified, Nickname, FirstName, LastName, Position, Roles, AllowMarketing,
|
||||
@@ -150,6 +169,10 @@ func (us SqlUserStore) Update(user *model.User, trustedUpdateData bool) (*model.
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := us.validateAutoResponderMessageSize(user.NotifyProps); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
oldUser := model.User{}
|
||||
err := us.GetMasterX().Get(&oldUser, "SELECT * FROM Users WHERE Id=?", user.Id)
|
||||
if err != nil {
|
||||
@@ -228,6 +251,10 @@ func (us SqlUserStore) Update(user *model.User, trustedUpdateData bool) (*model.
|
||||
}
|
||||
|
||||
func (us SqlUserStore) UpdateNotifyProps(userID string, props map[string]string) error {
|
||||
if err := us.validateAutoResponderMessageSize(props); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
buf, err := json.Marshal(props)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed marshalling session props")
|
||||
|
||||
@@ -130,7 +130,17 @@ func testUserStoreSave(t *testing.T, ss store.Store) {
|
||||
|
||||
u2.Username = ""
|
||||
_, err = ss.User().Save(&u2)
|
||||
require.Error(t, err, "should be unique username")
|
||||
require.Error(t, err, "should be non-empty username")
|
||||
|
||||
u3 := model.User{
|
||||
Email: MakeEmail(),
|
||||
Username: model.NewId(),
|
||||
NotifyProps: make(map[string]string, 1),
|
||||
}
|
||||
maxPostSize := ss.Post().GetMaxPostSize()
|
||||
u3.NotifyProps[model.AutoResponderMessageNotifyProp] = strings.Repeat("a", maxPostSize+1)
|
||||
_, err = ss.User().Save(&u3)
|
||||
require.Error(t, err, "auto responder message size should not be greater than maxPostSize")
|
||||
|
||||
for i := 0; i < 49; i++ {
|
||||
u := model.User{
|
||||
@@ -234,6 +244,18 @@ func testUserStoreUpdate(t *testing.T, ss store.Store) {
|
||||
uNew, err := ss.User().Get(context.Background(), u1.Id)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, props, uNew.NotifyProps)
|
||||
|
||||
u4 := model.User{
|
||||
Email: MakeEmail(),
|
||||
Username: model.NewId(),
|
||||
NotifyProps: make(map[string]string, 1),
|
||||
}
|
||||
maxPostSize := ss.Post().GetMaxPostSize()
|
||||
u4.NotifyProps[model.AutoResponderMessageNotifyProp] = strings.Repeat("a", maxPostSize+1)
|
||||
_, err = ss.User().Update(&u4, false)
|
||||
require.Error(t, err, "auto responder message size should not be greater than maxPostSize")
|
||||
err = ss.User().UpdateNotifyProps(u4.Id, u4.NotifyProps)
|
||||
require.Error(t, err, "auto responder message size should not be greater than maxPostSize")
|
||||
}
|
||||
|
||||
func testUserStoreUpdateUpdateAt(t *testing.T, ss store.Store) {
|
||||
|
||||
Ссылка в новой задаче
Block a user