focalboard/server/services/audit/record.go

70 lines
1.8 KiB
Go
Raw Normal View History

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package audit
import "github.com/mattermost/focalboard/server/services/mlog"
// Meta represents metadata that can be added to a audit record as name/value pairs.
type Meta struct {
K string
V interface{}
}
// FuncMetaTypeConv defines a function that can convert meta data types into something
// that serializes well for audit records.
type FuncMetaTypeConv func(val interface{}) (newVal interface{}, converted bool)
// Record provides a consistent set of fields used for all audit logging.
type Record struct {
APIPath string
Event string
Status string
UserID string
SessionID string
Client string
IPAddress string
Meta []Meta
metaConv []FuncMetaTypeConv
}
// Success marks the audit record status as successful.
func (rec *Record) Success() {
rec.Status = Success
}
// Success marks the audit record status as failed.
func (rec *Record) Fail() {
rec.Status = Fail
}
// AddMeta adds a single name/value pair to this audit record's metadata.
func (rec *Record) AddMeta(name string, val interface{}) {
if rec.Meta == nil {
rec.Meta = []Meta{}
}
// possibly convert val to something better suited for serializing
// via zero or more conversion functions.
for _, conv := range rec.metaConv {
converted, wasConverted := conv(val)
if wasConverted {
val = converted
break
}
}
lc, ok := val.(mlog.LogCloner)
if ok {
val = lc.LogClone()
}
rec.Meta = append(rec.Meta, Meta{K: name, V: val})
}
// AddMetaTypeConverter adds a function capable of converting meta field types
// into something more suitable for serialization.
func (rec *Record) AddMetaTypeConverter(f FuncMetaTypeConv) {
rec.metaConv = append(rec.metaConv, f)
}