diff --git a/server/public/pluginapi/audit.go b/server/public/pluginapi/audit.go new file mode 100644 index 00000000000..ebd603e1acd --- /dev/null +++ b/server/public/pluginapi/audit.go @@ -0,0 +1,26 @@ +package pluginapi + +import ( + "github.com/mattermost/mattermost/server/public/model" + "github.com/mattermost/mattermost/server/public/plugin" + "github.com/mattermost/mattermost/server/public/shared/mlog" +) + +// AuditService exposes methods to emit audit records through the Mattermost server audit pipeline. +type AuditService struct { + api plugin.API +} + +// Record logs an audit record using the default audit log level. +// +// Minimum server version: 10.10 +func (a *AuditService) Record(rec *model.AuditRecord) { + a.api.LogAuditRec(rec) +} + +// RecordWithLevel logs an audit record with the given log level. +// +// Minimum server version: 10.10 +func (a *AuditService) RecordWithLevel(rec *model.AuditRecord, level mlog.Level) { + a.api.LogAuditRecWithLevel(rec, level) +} diff --git a/server/public/pluginapi/audit_test.go b/server/public/pluginapi/audit_test.go new file mode 100644 index 00000000000..d67d0a959b3 --- /dev/null +++ b/server/public/pluginapi/audit_test.go @@ -0,0 +1,36 @@ +package pluginapi_test + +import ( + "testing" + + "github.com/mattermost/mattermost/server/public/model" + "github.com/mattermost/mattermost/server/public/plugin" + "github.com/mattermost/mattermost/server/public/plugin/plugintest" + "github.com/mattermost/mattermost/server/public/pluginapi" + "github.com/mattermost/mattermost/server/public/shared/mlog" +) + +func TestAuditService(t *testing.T) { + t.Run("record", func(t *testing.T) { + rec := plugin.MakeAuditRecord("test.event", model.AuditStatusSuccess) + + api := &plugintest.API{} + api.On("LogAuditRec", rec).Return() + defer api.AssertExpectations(t) + + client := pluginapi.NewClient(api, &plugintest.Driver{}) + client.Audit.Record(rec) + }) + + t.Run("record with level", func(t *testing.T) { + rec := plugin.MakeAuditRecord("test.event", model.AuditStatusFail) + level := mlog.LvlAuditCLI + + api := &plugintest.API{} + api.On("LogAuditRecWithLevel", rec, level).Return() + defer api.AssertExpectations(t) + + client := pluginapi.NewClient(api, &plugintest.Driver{}) + client.Audit.RecordWithLevel(rec, level) + }) +} diff --git a/server/public/pluginapi/client.go b/server/public/pluginapi/client.go index 3b4a9e34349..0f83974760c 100644 --- a/server/public/pluginapi/client.go +++ b/server/public/pluginapi/client.go @@ -10,6 +10,7 @@ import ( type Client struct { api plugin.API + Audit AuditService Bot BotService Channel ChannelService Cluster ClusterService @@ -41,6 +42,7 @@ func NewClient(api plugin.API, driver plugin.Driver) *Client { return &Client{ api: api, + Audit: AuditService{api: api}, Bot: BotService{api: api}, Channel: ChannelService{api: api}, Cluster: ClusterService{api: api},