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  }