/
audit_log.go
58 lines (50 loc) · 1.74 KB
/
audit_log.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package facade
import (
"time"
"github.com/authgear/authgear-server/pkg/api/model"
"github.com/authgear/authgear-server/pkg/lib/audit"
"github.com/authgear/authgear-server/pkg/lib/config"
"github.com/authgear/authgear-server/pkg/lib/infra/db/auditdb"
"github.com/authgear/authgear-server/pkg/util/clock"
"github.com/authgear/authgear-server/pkg/util/graphqlutil"
)
type AuditLogQuery interface {
Count(opts audit.QueryPageOptions) (uint64, error)
QueryPage(opts audit.QueryPageOptions, pageArgs graphqlutil.PageArgs) ([]model.PageItemRef, error)
}
type AuditLogFacade struct {
AuditLogQuery AuditLogQuery
Clock clock.Clock
AuditDatabase *auditdb.ReadHandle
AuditLogFeatureConfig *config.AuditLogFeatureConfig
}
func (f *AuditLogFacade) QueryPage(opts audit.QueryPageOptions, pageArgs graphqlutil.PageArgs) ([]model.PageItemRef, *graphqlutil.PageResult, error) {
// bounded the from time, if retrieve days of audit log is configured in the feature config
if *f.AuditLogFeatureConfig.RetrievalDays != -1 {
days := *f.AuditLogFeatureConfig.RetrievalDays
boundedByTime := f.Clock.NowUTC().Add(time.Duration(-days) * (24 * time.Hour))
if opts.RangeFrom == nil || opts.RangeFrom.Before(boundedByTime) {
opts.RangeFrom = &boundedByTime
}
}
var refs []model.PageItemRef
var count uint64
var err error
err = f.AuditDatabase.ReadOnly(func() error {
refs, err = f.AuditLogQuery.QueryPage(opts, pageArgs)
if err != nil {
return err
}
count, err = f.AuditLogQuery.Count(opts)
if err != nil {
return err
}
return nil
})
if err != nil {
return nil, nil, err
}
return refs, graphqlutil.NewPageResult(pageArgs, len(refs), graphqlutil.NewLazy(func() (interface{}, error) {
return count, nil
})), nil
}