mirror of
https://github.com/documize/community.git
synced 2025-07-24 15:49:44 +02:00
Some DB commit commands were out of sequence and so have been fixed to be consist across the board. Specially, audit log entries have their own DB TX and so should be executed outside of any other commit cycle.
55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
|
//
|
|
// This software (Documize Community Edition) is licensed under
|
|
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
|
//
|
|
// You can operate outside the AGPL restrictions by purchasing
|
|
// Documize Enterprise Edition and obtaining a commercial license
|
|
// by contacting <sales@documize.com>.
|
|
//
|
|
// https://documize.com
|
|
|
|
// Package audit records user events.
|
|
package audit
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/documize/community/core/env"
|
|
"github.com/documize/community/domain"
|
|
"github.com/documize/community/model/audit"
|
|
)
|
|
|
|
// Scope provides data access to MySQL.
|
|
type Scope struct {
|
|
Runtime *env.Runtime
|
|
}
|
|
|
|
// Record adds event entry for specified user using own DB TX.
|
|
func (s Scope) Record(ctx domain.RequestContext, t audit.EventType) {
|
|
e := audit.AppEvent{}
|
|
e.OrgID = ctx.OrgID
|
|
e.UserID = ctx.UserID
|
|
e.Created = time.Now().UTC()
|
|
e.IP = ctx.ClientIP
|
|
e.Type = string(t)
|
|
|
|
tx, err := s.Runtime.Db.Beginx()
|
|
if err != nil {
|
|
s.Runtime.Log.Error("transaction", err)
|
|
return
|
|
}
|
|
|
|
_, err = tx.Exec("INSERT INTO userevent (orgid, userid, eventtype, ip, created) VALUES (?, ?, ?, ?, ?)",
|
|
e.OrgID, e.UserID, e.Type, e.IP, e.Created)
|
|
|
|
if err != nil {
|
|
tx.Rollback()
|
|
s.Runtime.Log.Error("prepare audit insert", err)
|
|
return
|
|
}
|
|
|
|
tx.Commit()
|
|
|
|
return
|
|
}
|