github.com/haalcala/mattermost-server-change-repo/v5@v5.33.2/store/sqlstore/audit_store.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package sqlstore 5 6 import ( 7 sq "github.com/Masterminds/squirrel" 8 "github.com/pkg/errors" 9 10 "github.com/mattermost/mattermost-server/v5/model" 11 "github.com/mattermost/mattermost-server/v5/store" 12 ) 13 14 type SqlAuditStore struct { 15 *SqlStore 16 } 17 18 func newSqlAuditStore(sqlStore *SqlStore) store.AuditStore { 19 s := &SqlAuditStore{sqlStore} 20 21 for _, db := range sqlStore.GetAllConns() { 22 table := db.AddTableWithName(model.Audit{}, "Audits").SetKeys(false, "Id") 23 table.ColMap("Id").SetMaxSize(26) 24 table.ColMap("UserId").SetMaxSize(26) 25 table.ColMap("Action").SetMaxSize(512) 26 table.ColMap("ExtraInfo").SetMaxSize(1024) 27 table.ColMap("IpAddress").SetMaxSize(64) 28 table.ColMap("SessionId").SetMaxSize(26) 29 } 30 31 return s 32 } 33 34 func (s SqlAuditStore) createIndexesIfNotExists() { 35 s.CreateIndexIfNotExists("idx_audits_user_id", "Audits", "UserId") 36 } 37 38 func (s SqlAuditStore) Save(audit *model.Audit) error { 39 audit.Id = model.NewId() 40 audit.CreateAt = model.GetMillis() 41 42 if err := s.GetMaster().Insert(audit); err != nil { 43 return errors.Wrapf(err, "failed to save Audit with userId=%s and action=%s", audit.UserId, audit.Action) 44 } 45 return nil 46 } 47 48 func (s SqlAuditStore) Get(userId string, offset int, limit int) (model.Audits, error) { 49 if limit > 1000 { 50 return nil, store.NewErrOutOfBounds(limit) 51 } 52 53 query := s.getQueryBuilder(). 54 Select("*"). 55 From("Audits"). 56 OrderBy("CreateAt DESC"). 57 Limit(uint64(limit)). 58 Offset(uint64(offset)) 59 60 if userId != "" { 61 query = query.Where(sq.Eq{"UserId": userId}) 62 } 63 64 queryString, args, err := query.ToSql() 65 if err != nil { 66 return nil, errors.Wrap(err, "audits_tosql") 67 } 68 69 var audits model.Audits 70 if _, err := s.GetReplica().Select(&audits, queryString, args...); err != nil { 71 return nil, errors.Wrapf(err, "failed to get Audit list for userId=%s", userId) 72 } 73 return audits, nil 74 } 75 76 func (s SqlAuditStore) PermanentDeleteByUser(userId string) error { 77 if _, err := s.GetMaster().Exec("DELETE FROM Audits WHERE UserId = :userId", 78 map[string]interface{}{"userId": userId}); err != nil { 79 return errors.Wrapf(err, "failed to delete Audit with userId=%s", userId) 80 } 81 return nil 82 }