Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ TAG := $(shell git rev-list --tags --max-count=1)
VERSION := $(shell git describe --tags ${TAG})
.PHONY: build check fmt lint test test-race vet test-cover-html help install proto ui compose-up-dev
.DEFAULT_GOAL := build
PROTON_COMMIT := "f18997333f7eeacdbec50fd151ff6df5770503e9"
PROTON_COMMIT := "8ed47f838ba78a1d4af80e3a52dc873d40181a42"

ui:
@echo " > generating ui build"
Expand Down
74 changes: 51 additions & 23 deletions core/auditrecord/auditrecord.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,43 +4,71 @@ import (
"time"

"github.com/raystack/frontier/pkg/metadata"
"github.com/raystack/frontier/pkg/utils"
)

var (
systemActor = "system"
)

type AuditRecord struct {
ID string
Event string
Actor Actor
Resource Resource
Target *Target
OccurredAt time.Time
OrgID string
RequestID *string
CreatedAt time.Time
Metadata metadata.Metadata
IdempotencyKey string
ID string `json:"id,omitempty"`
Event string `json:"event"`
Actor Actor `json:"actor"`
Resource Resource `json:"resource"`
Target *Target `json:"target"`
OccurredAt time.Time `json:"occurred_at"`
OrgID string `json:"org_id"`
RequestID *string `json:"request_id"`
CreatedAt time.Time `json:"created_at,omitempty"`
Metadata metadata.Metadata `json:"metadata"`
IdempotencyKey string `json:"idempotency_key"`
}

type Actor struct {
ID string
Type string
Name string
Metadata metadata.Metadata
ID string `json:"id"`
Type string `json:"type"`
Name string `json:"name"`
Metadata metadata.Metadata `json:"metadata"`
}

type Resource struct {
ID string
Type string
Name string
Metadata metadata.Metadata
ID string `json:"id"`
Type string `json:"type"`
Name string `json:"name"`
Metadata metadata.Metadata `json:"metadata"`
}

type Target struct {
ID string
Type string
Name string
Metadata metadata.Metadata
ID string `json:"id"`
Type string `json:"type"`
Name string `json:"name"`
Metadata metadata.Metadata `json:"metadata"`
}

type AuditRecordsList struct {
AuditRecords []AuditRecord
Group *utils.Group
Page utils.Page
}

// AuditRecordRQLSchema is the schema for audit record RQL queries. This is a flattened version of the AuditRecord struct.
// This is needed because the RQL parser does not support nested structs.
type AuditRecordRQLSchema struct {
ID string `rql:"name=id,type=string"`
Event string `rql:"name=event,type=string"`
ActorID string `rql:"name=actor_id,type=string"`
ActorType string `rql:"name=actor_type,type=string"`
ActorName string `rql:"name=actor_name,type=string"`
ResourceID string `rql:"name=resource_id,type=string"`
ResourceType string `rql:"name=resource_type,type=string"`
ResourceName string `rql:"name=resource_name,type=string"`
TargetID string `rql:"name=target_id,type=string"`
TargetType string `rql:"name=target_type,type=string"`
TargetName string `rql:"name=target_name,type=string"`
OccurredAt time.Time `rql:"name=occurred_at,type=datetime"`
OrgID string `rql:"name=org_id,type=string"`
RequestID string `rql:"name=request_id,type=string"`
CreatedAt time.Time `rql:"name=created_at,type=datetime"`
IdempotencyKey string `rql:"name=idempotency_key,type=string"`
}
1 change: 1 addition & 0 deletions core/auditrecord/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ var (
ErrIdempotencyKeyConflict = errors.New("audit record already exists for the given idempotency key")
ErrInvalidUUID = errors.New("invalid syntax of uuid")
ErrNotFound = errors.New("audit record not found")
ErrRepositoryBadInput = errors.New("invalid repository input")
)
59 changes: 59 additions & 0 deletions core/auditrecord/mocks/repository.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions core/auditrecord/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@ import (
"github.com/raystack/frontier/core/serviceuser"
userpkg "github.com/raystack/frontier/core/user"
"github.com/raystack/frontier/internal/bootstrap/schema"
"github.com/raystack/salt/rql"
)

var SuperUserActorMetadataKey = "is_super_user"

type Repository interface {
Create(ctx context.Context, auditRecord AuditRecord) (AuditRecord, error)
GetByIdempotencyKey(ctx context.Context, idempotencyKey string) (AuditRecord, error)
List(ctx context.Context, query *rql.Query) (AuditRecordsList, error)
}

type UserService interface {
Expand Down Expand Up @@ -102,6 +104,10 @@ func (s *Service) Create(ctx context.Context, auditRecord AuditRecord) (AuditRec
return createdRecord, false, err
}

func (s *Service) List(ctx context.Context, query *rql.Query) (AuditRecordsList, error) {
return s.repository.List(ctx, query)
}

func computeHash(auditRecord AuditRecord) string {
// Normalize event and IDs - trim spaces and lowercase for consistency
normalisedEvent := strings.ToLower(strings.TrimSpace(auditRecord.Event))
Expand Down
Loading
Loading