package api import ( "google.golang.org/protobuf/types/known/wrapperspb" "time" auditV1 "dev.azure.com/schwarzit/schwarzit.stackit-core-platform/common-audit.git/gen/go/audit/v1" "github.com/google/uuid" "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" ) func NewOrganizationAuditEvent( customization *func( *auditV1.AuditLogEntry, *RoutingIdentifier, *auditV1.ObjectIdentifier, )) ( *auditV1.AuditLogEntry, *RoutingIdentifier, *auditV1.ObjectIdentifier, ) { auditEvent := &auditV1.AuditLogEntry{ EventSource: "resource-manager", Region: auditV1.Region_REGION_EU01, SequenceNumber: wrapperspb.Int64(0), EventName: "ORGANIZATION_CREATED", EventTimeStamp: timestamppb.New(time.Now()), EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT, Initiator: &auditV1.Principal{ Id: uuid.NewString(), }, } identifier := uuid.New() routingIdentifier := &RoutingIdentifier{ Identifier: identifier, Type: RoutingIdentifierTypeOrganization, } objectIdentifier := &auditV1.ObjectIdentifier{ Identifier: identifier.String(), Type: auditV1.ObjectType_OBJECT_TYPE_ORGANIZATION, } auditEvent.ResourceContainerReference = &auditV1.AuditEvent_ObjectIdentifier{ObjectIdentifier: objectIdentifier} if customization != nil { (*customization)(auditEvent, routingIdentifier, objectIdentifier) } return auditEvent, routingIdentifier, objectIdentifier } func NewOrganizationAuditEventWithDetails() (*auditV1.AuditLogEntry, *RoutingIdentifier, *auditV1.ObjectIdentifier) { customization := func(event *auditV1.AuditLogEntry, routingIdentifier *RoutingIdentifier, objectIdentifier *auditV1.ObjectIdentifier) { userAgent := "firefox" parameters, _ := structpb.NewStruct(map[string]any{"parameter1": "value"}) body, _ := structpb.NewStruct(map[string]any{"body": "value"}) event.Request = &auditV1.RequestDetails{ Endpoint: "/test", SourceIpAddress: "127.0.0.1", UserAgent: &userAgent, Parameters: parameters, Body: body, Headers: []*auditV1.RequestHeader{ { Key: "header1", Value: "value", }, }, } email := "test@example.com" event.Principals = []*auditV1.Principal{ { Id: "id", Email: &email, }, } details, _ := structpb.NewStruct(map[string]interface{}{ "detail": "value", }) event.Details = details result, _ := structpb.NewStruct(map[string]interface{}{ "result": "value", }) event.Result = result } return NewOrganizationAuditEvent(&customization) } func NewFolderAuditEvent( customization *func( *auditV1.AuditLogEntry, *RoutingIdentifier, *auditV1.ObjectIdentifier, )) ( *auditV1.AuditLogEntry, *RoutingIdentifier, *auditV1.ObjectIdentifier, ) { auditEvent := &auditV1.AuditLogEntry{ EventSource: "resource-manager", Region: auditV1.Region_REGION_EU01, SequenceNumber: wrapperspb.Int64(0), EventName: "FOLDER_CREATED", EventTimeStamp: timestamppb.New(time.Now()), EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT, Initiator: &auditV1.Principal{ Id: uuid.NewString(), }, } routingIdentifier := &RoutingIdentifier{ Identifier: uuid.New(), Type: RoutingIdentifierTypeOrganization, } objectIdentifier := &auditV1.ObjectIdentifier{ Identifier: uuid.New().String(), Type: auditV1.ObjectType_OBJECT_TYPE_FOLDER, } auditEvent.ResourceContainerReference = &auditV1.AuditEvent_ObjectIdentifier{ObjectIdentifier: objectIdentifier} if customization != nil { (*customization)(auditEvent, routingIdentifier, objectIdentifier) } return auditEvent, routingIdentifier, objectIdentifier } func NewProjectAuditEvent( customization *func( *auditV1.AuditLogEntry, *RoutingIdentifier, *auditV1.ObjectIdentifier, )) ( *auditV1.AuditLogEntry, *RoutingIdentifier, *auditV1.ObjectIdentifier, ) { auditEvent := &auditV1.AuditLogEntry{ EventSource: "resource-manager", Region: auditV1.Region_REGION_EU01, SequenceNumber: wrapperspb.Int64(0), EventName: "PROJECT_CREATED", EventTimeStamp: timestamppb.New(time.Now()), EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT, Initiator: &auditV1.Principal{ Id: uuid.NewString(), }, } identifier := uuid.New() routingIdentifier := &RoutingIdentifier{ Identifier: identifier, Type: RoutingIdentifierTypeProject, } objectIdentifier := &auditV1.ObjectIdentifier{ Identifier: identifier.String(), Type: auditV1.ObjectType_OBJECT_TYPE_PROJECT, } auditEvent.ResourceContainerReference = &auditV1.AuditEvent_ObjectIdentifier{ObjectIdentifier: objectIdentifier} if customization != nil { (*customization)(auditEvent, routingIdentifier, objectIdentifier) } return auditEvent, routingIdentifier, objectIdentifier } func NewSystemAuditEvent( customization *func(*auditV1.AuditLogEntry)) *auditV1.AuditLogEntry { auditEvent := &auditV1.AuditLogEntry{ EventSource: "resource-manager", Region: auditV1.Region_REGION_EU01, SequenceNumber: wrapperspb.Int64(0), EventName: "SYSTEM_CHANGED", EventTimeStamp: timestamppb.New(time.Now()), EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT, Initiator: &auditV1.Principal{ Id: uuid.NewString(), }, } auditEvent.ResourceContainerReference = &auditV1.AuditEvent_ObjectName{ ObjectName: auditV1.ObjectName_OBJECT_NAME_SYSTEM} if customization != nil { (*customization)(auditEvent) } return auditEvent }