record.go
TLDR
This file defines the Record
struct and its methods for performing audit logging in Mattermost. It also defines the Meta
struct and the FuncMetaTypeConv
type for handling metadata in audit records.
Methods
Success()
This method sets the status of the audit record to successful.
Fail()
This method sets the status of the audit record to failed.
AddMeta(name string, val interface{})
This method adds a single name/value pair to the metadata of the audit record. It can also convert the value to a more suitable format for serialization using any registered conversion functions.
AddMetaTypeConverter(f FuncMetaTypeConv)
This method adds a function capable of converting meta field types into a format suitable for serialization.
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package audit
import "github.com/mattermost/mattermost-server/v6/shared/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)
}