summaryrefslogtreecommitdiffstats
path: root/store/sql_audit_store.go
diff options
context:
space:
mode:
Diffstat (limited to 'store/sql_audit_store.go')
-rw-r--r--store/sql_audit_store.go88
1 files changed, 88 insertions, 0 deletions
diff --git a/store/sql_audit_store.go b/store/sql_audit_store.go
new file mode 100644
index 000000000..dd9312007
--- /dev/null
+++ b/store/sql_audit_store.go
@@ -0,0 +1,88 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+package store
+
+import (
+ "github.com/mattermost/platform/model"
+)
+
+type SqlAuditStore struct {
+ *SqlStore
+}
+
+func NewSqlAuditStore(sqlStore *SqlStore) AuditStore {
+ s := &SqlAuditStore{sqlStore}
+
+ for _, db := range sqlStore.GetAllConns() {
+ table := db.AddTableWithName(model.Audit{}, "Audits").SetKeys(false, "Id")
+ table.ColMap("Id").SetMaxSize(26)
+ table.ColMap("UserId").SetMaxSize(26)
+ table.ColMap("Action").SetMaxSize(64)
+ table.ColMap("ExtraInfo").SetMaxSize(128)
+ table.ColMap("IpAddress").SetMaxSize(64)
+ table.ColMap("SessionId").SetMaxSize(26)
+ }
+
+ return s
+}
+
+func (s SqlAuditStore) UpgradeSchemaIfNeeded() {
+}
+
+func (s SqlAuditStore) CreateIndexesIfNotExists() {
+ s.CreateIndexIfNotExists("idx_user_id", "Audits", "UserId")
+}
+
+func (s SqlAuditStore) Save(audit *model.Audit) StoreChannel {
+
+ storeChannel := make(StoreChannel)
+
+ go func() {
+ result := StoreResult{}
+
+ audit.Id = model.NewId()
+ audit.CreateAt = model.GetMillis()
+
+ if err := s.GetMaster().Insert(audit); err != nil {
+ result.Err = model.NewAppError("SqlAuditStore.Save",
+ "We encounted an error saving the audit", "user_id="+
+ audit.UserId+" action="+audit.Action)
+ }
+
+ storeChannel <- result
+ close(storeChannel)
+ }()
+
+ return storeChannel
+}
+
+func (s SqlAuditStore) Get(user_id string, limit int) StoreChannel {
+
+ storeChannel := make(StoreChannel)
+
+ go func() {
+ result := StoreResult{}
+
+ if limit > 1000 {
+ limit = 1000
+ result.Err = model.NewAppError("SqlAuditStore.Get", "Limit exceeded for paging", "user_id="+user_id)
+ storeChannel <- result
+ close(storeChannel)
+ return
+ }
+
+ var audits model.Audits
+ if _, err := s.GetReplica().Select(&audits, "SELECT * FROM Audits WHERE UserId = ? ORDER BY CreateAt DESC LIMIT ?",
+ user_id, limit); err != nil {
+ result.Err = model.NewAppError("SqlAuditStore.Get", "We encounted an error finding the audits", "user_id="+user_id)
+ } else {
+ result.Data = audits
+ }
+
+ storeChannel <- result
+ close(storeChannel)
+ }()
+
+ return storeChannel
+}