Add event source, region and container reference to audit event and

replace wrapping protobuf message type with cloud event wrapper
This commit is contained in:
Christian Schaible 2024-07-18 14:09:07 +02:00
parent 6968ddb5c9
commit dff37867e5
22 changed files with 1022 additions and 936 deletions

View file

@ -2,6 +2,7 @@ package api
import (
"context"
"time"
auditV1 "dev.azure.com/schwarzit/schwarzit.stackit-core-platform/common-audit.git/gen/go/audit/v1"
@ -58,13 +59,13 @@ type AuditApi interface {
visibility auditV1.Visibility,
routingIdentifier *RoutingIdentifier,
objectIdentifier *auditV1.ObjectIdentifier,
) (SerializedPayload, error)
) (*CloudEvent, error)
// Send the serialized content as byte array to the audit log system.
Send(
ctx context.Context,
routingIdentifier *RoutingIdentifier,
serializedPayload *SerializedPayload,
serializedPayload *CloudEvent,
) error
}
@ -74,14 +75,47 @@ type ProtobufValidator interface {
Validate(msg proto.Message) error
}
// SerializedPayload is an abstraction for serialized content
type SerializedPayload interface {
// CloudEvent is a representation of a cloudevents.io object.
//
// More information about the schema and attribute semantics can be found here:
// https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#required-attributes
type CloudEvent struct {
// GetPayload returns the actual payload as byte array
GetPayload() []byte
// The version of the CloudEvents specification which the event uses.
// This enables the interpretation of the context. Compliant event producers MUST use a value of 1.0
// when referring to this version of the specification.
//
// Currently, this attribute will only have the 'major' and 'minor' version numbers included in it.
// This allows for 'patch' changes to the specification to be made without changing this property's
// value in the serialization.
specVersion string
// GetContentType returns the content type of the payload
GetContentType() string
// The source system uri-reference. Producers MUST ensure that source + id is unique for each distinct event.
source string
// Identifier of the event. Producers MUST ensure that source + id is unique for each distinct event.
// If a duplicate event is re-sent (e.g. due to a network error) it MAY have the same id.
// Consumers MAY assume that Events with identical source and id are duplicates.
id string
// The time when the event happened
time time.Time
// The content type of the payload
// Examples could be:
// - application/cloudevents+json
// - application/cloudevents+json; charset=UTF-8
// - application/cloudevents-batch+json
// - application/cloudevents+protobuf
// - application/cloudevents+avro
// Source: https://github.com/cloudevents/spec/blob/main/cloudevents/formats/protobuf-format.md
dataContentType string
// The object type (i.e. the fully qualified protobuf type name)
dataType string
// The serialized payload
data []byte
}
// RoutingIdentifierType is an enumeration of allowed identifier types.

View file

@ -131,38 +131,13 @@ func validateAndSerializePartially(
return &routableEvent, nil
}
func serializeToProtobufMessage(routableEvent *auditV1.RoutableAuditEvent) (SerializedPayload, error) {
// Serialize routable event
routableEventBytes, err := proto.Marshal(routableEvent)
if err != nil {
return nil, err
}
// Package the routable event with information about the type in a message
message := auditV1.ProtobufMessage{
Value: routableEventBytes,
ProtobufType: fmt.Sprintf("%v", routableEvent.ProtoReflect().Descriptor().FullName()),
}
// Serialize message
messageBytes, err := proto.Marshal(&message)
if err != nil {
return nil, err
}
return &routablePayload{
payload: messageBytes,
contentType: ContentTypeProtobuf,
}, nil
}
// Send implements AuditApi.Send
func send(
topicNameResolver *TopicNameResolver,
messagingApi *messaging.MessagingApi,
ctx context.Context,
routingIdentifier *RoutingIdentifier,
serializedPayload *SerializedPayload,
cloudEvent *CloudEvent,
) error {
if topicNameResolver == nil {
@ -171,7 +146,7 @@ func send(
if messagingApi == nil {
return ErrMessagingApiNil
}
if serializedPayload == nil {
if cloudEvent == nil {
return ErrSerializedPayloadNil
}
@ -180,5 +155,18 @@ func send(
return err
}
return (*messagingApi).Send(ctx, topic, (*serializedPayload).GetPayload(), (*serializedPayload).GetContentType())
applicationAttributes := make(map[string]any)
applicationAttributes["cloudEvents:specversion"] = cloudEvent.specVersion
applicationAttributes["cloudEvents:source"] = cloudEvent.source
applicationAttributes["cloudEvents:id"] = cloudEvent.id
applicationAttributes["cloudEvents:time"] = cloudEvent.time.UnixMilli()
applicationAttributes["cloudEvents:datacontenttype"] = cloudEvent.dataContentType
applicationAttributes["cloudEvents:type"] = cloudEvent.dataType
return (*messagingApi).Send(
ctx,
topic,
(*cloudEvent).data,
(*cloudEvent).dataContentType,
applicationAttributes)
}

View file

@ -3,7 +3,6 @@ package api
import (
"context"
"errors"
"fmt"
"google.golang.org/protobuf/types/known/timestamppb"
"google.golang.org/protobuf/types/known/wrapperspb"
"testing"
@ -23,8 +22,15 @@ type MessagingApiMock struct {
mock.Mock
}
func (m *MessagingApiMock) Send(ctx context.Context, topic string, data []byte, contentType string) error {
args := m.Called(ctx, topic, data, contentType)
func (m *MessagingApiMock) Send(
ctx context.Context,
topic string,
data []byte,
contentType string,
applicationProperties map[string]any,
) error {
args := m.Called(ctx, topic, data, contentType, applicationProperties)
return args.Error(0)
}
@ -111,6 +117,8 @@ func Test_ValidateAndSerializePartially_AuditEventSequenceNumber(t *testing.T) {
t.Run("Sequence number not set", func(t *testing.T) {
event := &auditV1.AuditEvent{
EventSource: "resource-manager",
Region: auditV1.Region_REGION_EU01,
EventName: "ORGANIZATION_CREATED",
EventTimeStamp: timestamppb.New(time.Now()),
EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT,
@ -129,6 +137,7 @@ func Test_ValidateAndSerializePartially_AuditEventSequenceNumber(t *testing.T) {
Identifier: identifier.String(),
Type: auditV1.ObjectType_OBJECT_TYPE_ORGANIZATION,
}
event.ResourceContainerReference = &auditV1.AuditEvent_ObjectIdentifier{ObjectIdentifier: objectIdentifier}
_, err := validateAndSerializePartially(
&validator, event, auditV1.Visibility_VISIBILITY_PUBLIC, routingIdentifier, objectIdentifier)
@ -278,34 +287,6 @@ func Test_ValidateAndSerializePartially_SystemEvent(t *testing.T) {
}
}
func Test_SerializeToProtobufMessage(t *testing.T) {
validator := NewValidator(t)
// Create test data
event, identifier, objectIdentifier := NewOrganizationAuditEventWithDetails()
// Serialize to routable event
routableEvent, err := validateAndSerializePartially(
&validator, event, auditV1.Visibility_VISIBILITY_PUBLIC, identifier, objectIdentifier)
assert.NoError(t, err)
// Serialize to protobuf message
serializedPayload, err := serializeToProtobufMessage(routableEvent)
assert.NoError(t, err)
assert.Equal(t, serializedPayload.GetContentType(), ContentTypeProtobuf)
// Deserialize
var deserializedEvent auditV1.ProtobufMessage
assert.NoError(t, proto.Unmarshal(serializedPayload.GetPayload(), &deserializedEvent))
expectedProtobufType := fmt.Sprintf("%v", routableEvent.ProtoReflect().Descriptor().FullName())
assert.Equal(t, expectedProtobufType, deserializedEvent.ProtobufType)
var deserializedRoutableEvent auditV1.RoutableAuditEvent
assert.NoError(t, proto.Unmarshal(deserializedEvent.Value, &deserializedRoutableEvent))
assert.True(t, proto.Equal(routableEvent, &deserializedRoutableEvent))
}
func Test_Send_TopicNameResolverNil(t *testing.T) {
err := send(nil, nil, context.Background(), nil, nil)
assert.ErrorIs(t, err, ErrTopicNameResolverNil)
@ -318,10 +299,10 @@ func Test_Send_TopicNameResolutionError(t *testing.T) {
topicNameResolverMock.On("Resolve", mock.Anything).Return("topic", expectedError)
var topicNameResolver TopicNameResolver = &topicNameResolverMock
var serializedPayload SerializedPayload = &routablePayload{}
var cloudEvent = CloudEvent{}
var messagingApi messaging.MessagingApi = &messaging.AmqpMessagingApi{}
err := send(&topicNameResolver, &messagingApi, context.Background(), nil, &serializedPayload)
err := send(&topicNameResolver, &messagingApi, context.Background(), nil, &cloudEvent)
assert.ErrorIs(t, err, expectedError)
}
@ -343,12 +324,11 @@ func Test_Send(t *testing.T) {
topicNameResolverMock.On("Resolve", mock.Anything).Return("topic", nil)
var topicNameResolver TopicNameResolver = &topicNameResolverMock
var serializedPayload SerializedPayload = &routablePayload{}
messagingApiMock := MessagingApiMock{}
messagingApiMock.On("Send", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil)
messagingApiMock.On("Send", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil)
var messagingApi messaging.MessagingApi = &messagingApiMock
assert.NoError(t, send(&topicNameResolver, &messagingApi, context.Background(), nil, &serializedPayload))
var cloudEvent = CloudEvent{}
assert.NoError(t, send(&topicNameResolver, &messagingApi, context.Background(), nil, &cloudEvent))
assert.True(t, messagingApiMock.AssertNumberOfCalls(t, "Send", 1))
}

View file

@ -4,6 +4,8 @@ import (
"context"
"encoding/json"
"errors"
"fmt"
"github.com/google/uuid"
"time"
"dev.azure.com/schwarzit/schwarzit.stackit-core-platform/common-audit.git/audit/messaging"
@ -12,21 +14,6 @@ import (
"google.golang.org/protobuf/proto"
)
// legacyPayload implements SerializedPayload.
type legacyPayload struct {
payload []byte
}
// GetPayload implements SerializedPayload.GetPayload.
func (p *legacyPayload) GetPayload() []byte {
return p.payload
}
// GetContentType implements SerializedPayload.GetContentType.
func (p *legacyPayload) GetContentType() string {
return "application/json"
}
// LegacyTopicNameResolver implements TopicNameResolver.
// A hard-coded topic name is used, routing identifiers are ignored.
type LegacyTopicNameResolver struct {
@ -87,12 +74,12 @@ func (a *LegacyAuditApi) Log(
objectIdentifier *auditV1.ObjectIdentifier,
) error {
serializedPayload, err := a.ValidateAndSerialize(event, visibility, routingIdentifier, objectIdentifier)
cloudEvent, err := a.ValidateAndSerialize(event, visibility, routingIdentifier, objectIdentifier)
if err != nil {
return err
}
return a.Send(ctx, routingIdentifier, &serializedPayload)
return a.Send(ctx, routingIdentifier, cloudEvent)
}
// ValidateAndSerialize implements AuditApi.ValidateAndSerialize.
@ -102,7 +89,7 @@ func (a *LegacyAuditApi) ValidateAndSerialize(
visibility auditV1.Visibility,
routingIdentifier *RoutingIdentifier,
objectIdentifier *auditV1.ObjectIdentifier,
) (SerializedPayload, error) {
) (*CloudEvent, error) {
routableEvent, err := validateAndSerializePartially(a.validator, event, visibility, routingIdentifier, objectIdentifier)
if err != nil {
@ -121,17 +108,26 @@ func (a *LegacyAuditApi) ValidateAndSerialize(
return nil, err
}
return &legacyPayload{payload: legacyBytes}, nil
message := CloudEvent{
specVersion: "1.0",
source: event.EventSource,
id: uuid.NewString(),
time: event.EventTimeStamp.AsTime(),
dataContentType: "application/cloudevents+protobuf",
dataType: fmt.Sprintf("%v", routableEvent.ProtoReflect().Descriptor().FullName()),
data: legacyBytes,
}
return &message, nil
}
// Send implements AuditApi.Send
func (a *LegacyAuditApi) Send(
ctx context.Context,
routingIdentifier *RoutingIdentifier,
serializedPayload *SerializedPayload,
cloudEvent *CloudEvent,
) error {
return send(a.topicNameResolver, a.messagingApi, ctx, routingIdentifier, serializedPayload)
return send(a.topicNameResolver, a.messagingApi, ctx, routingIdentifier, cloudEvent)
}
// convertAndSerializeIntoLegacyFormat converts the protobuf events into the json serialized legacy audit log format

View file

@ -2,6 +2,9 @@ package api
import (
"context"
"fmt"
"github.com/google/uuid"
"google.golang.org/protobuf/proto"
auditV1 "dev.azure.com/schwarzit/schwarzit.stackit-core-platform/common-audit.git/gen/go/audit/v1"
@ -43,17 +46,32 @@ func (a *MockAuditApi) ValidateAndSerialize(
visibility auditV1.Visibility,
routingIdentifier *RoutingIdentifier,
objectIdentifier *auditV1.ObjectIdentifier,
) (SerializedPayload, error) {
) (*CloudEvent, error) {
routableEvent, err := validateAndSerializePartially(a.validator, event, visibility, routingIdentifier, objectIdentifier)
if err != nil {
return nil, err
}
return serializeToProtobufMessage(routableEvent)
routableEventBytes, err := proto.Marshal(routableEvent)
if err != nil {
return nil, err
}
message := CloudEvent{
specVersion: "1.0",
source: event.EventSource,
id: uuid.NewString(),
time: event.EventTimeStamp.AsTime(),
dataContentType: "application/cloudevents+protobuf",
dataType: fmt.Sprintf("%v", routableEvent.ProtoReflect().Descriptor().FullName()),
data: routableEventBytes,
}
return &message, nil
}
// Send implements AuditApi.Send
func (a *MockAuditApi) Send(context.Context, *RoutingIdentifier, *SerializedPayload) error {
func (a *MockAuditApi) Send(context.Context, *RoutingIdentifier, *CloudEvent) error {
return nil
}

View file

@ -25,13 +25,13 @@ func TestMockAuditApi_Log(t *testing.T) {
t.Run("ValidateAndSerialize", func(t *testing.T) {
visibility := auditV1.Visibility_VISIBILITY_PUBLIC
serializedPayload, err := (*auditApi).ValidateAndSerialize(
cloudEvent, err := (*auditApi).ValidateAndSerialize(
event, visibility, routingIdentifier, objectIdentifier)
assert.NoError(t, err)
validateProtobufMessagePayload(
t, serializedPayload.GetPayload(), routingIdentifier, objectIdentifier, event, event.EventName, visibility)
validateRoutableEventPayload(
t, cloudEvent.data, routingIdentifier, objectIdentifier, event, event.EventName, visibility)
})
t.Run("ValidateAndSerialize event nil", func(t *testing.T) {
@ -42,8 +42,8 @@ func TestMockAuditApi_Log(t *testing.T) {
})
t.Run("Send", func(t *testing.T) {
var payload SerializedPayload = &routablePayload{}
var cloudEvent = CloudEvent{}
assert.Nil(t, (*auditApi).Send(context.Background(), routingIdentifier, &payload))
assert.Nil(t, (*auditApi).Send(context.Background(), routingIdentifier, &cloudEvent))
})
}

View file

@ -4,27 +4,13 @@ import (
"context"
"errors"
"fmt"
"github.com/google/uuid"
"google.golang.org/protobuf/proto"
"dev.azure.com/schwarzit/schwarzit.stackit-core-platform/common-audit.git/audit/messaging"
auditV1 "dev.azure.com/schwarzit/schwarzit.stackit-core-platform/common-audit.git/gen/go/audit/v1"
)
// routablePayload implements SerializedPayload.
type routablePayload struct {
payload []byte
contentType string
}
// GetPayload implements SerializedPayload.GetPayload.
func (p *routablePayload) GetPayload() []byte {
return p.payload
}
// GetContentType implements SerializedPayload.GetContentType.
func (p *routablePayload) GetContentType() string {
return p.contentType
}
// routableTopicNameResolver implements TopicNameResolver.
// Resolves topic names by concatenating topic type prefixes with routing identifiers.
type routableTopicNameResolver struct {
@ -104,12 +90,12 @@ func (a *routableAuditApi) Log(
objectIdentifier *auditV1.ObjectIdentifier,
) error {
serializedPayload, err := a.ValidateAndSerialize(event, visibility, routingIdentifier, objectIdentifier)
cloudEvent, err := a.ValidateAndSerialize(event, visibility, routingIdentifier, objectIdentifier)
if err != nil {
return err
}
return a.Send(ctx, routingIdentifier, &serializedPayload)
return a.Send(ctx, routingIdentifier, cloudEvent)
}
// ValidateAndSerialize implements AuditApi.ValidateAndSerialize
@ -118,7 +104,7 @@ func (a *routableAuditApi) ValidateAndSerialize(
visibility auditV1.Visibility,
routingIdentifier *RoutingIdentifier,
objectIdentifier *auditV1.ObjectIdentifier,
) (SerializedPayload, error) {
) (*CloudEvent, error) {
routableEvent, err := validateAndSerializePartially(
a.validator,
@ -131,15 +117,30 @@ func (a *routableAuditApi) ValidateAndSerialize(
return nil, err
}
return serializeToProtobufMessage(routableEvent)
routableEventBytes, err := proto.Marshal(routableEvent)
if err != nil {
return nil, err
}
message := CloudEvent{
specVersion: "1.0",
source: event.EventSource,
id: uuid.NewString(),
time: event.EventTimeStamp.AsTime(),
dataContentType: "application/cloudevents+protobuf",
dataType: fmt.Sprintf("%v", routableEvent.ProtoReflect().Descriptor().FullName()),
data: routableEventBytes,
}
return &message, nil
}
// Send implements AuditApi.Send
func (a *routableAuditApi) Send(
ctx context.Context,
routingIdentifier *RoutingIdentifier,
serializedPayload *SerializedPayload,
cloudEvent *CloudEvent,
) error {
return send(a.topicNameResolver, a.messagingApi, ctx, routingIdentifier, serializedPayload)
return send(a.topicNameResolver, a.messagingApi, ctx, routingIdentifier, cloudEvent)
}

View file

@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"github.com/google/uuid"
"testing"
"time"
@ -302,12 +303,18 @@ func TestRoutableAuditApi(t *testing.T) {
// Check topic name
assert.Equal(t, systemTopicName, *message.Properties.To)
// Check deserialized message
var protobufMessage auditV1.ProtobufMessage
assert.NoError(t, proto.Unmarshal(message.Data[0], &protobufMessage))
assert.Equal(t, "audit.v1.RoutableAuditEvent", protobufMessage.ProtobufType)
// Check cloud event properties
applicationProperties := message.ApplicationProperties
assert.Equal(t, "1.0", applicationProperties["cloudEvents:specversion"])
assert.Equal(t, "resource-manager", applicationProperties["cloudEvents:source"])
_, isUuid := uuid.Parse(fmt.Sprintf("%s", applicationProperties["cloudEvents:id"]))
assert.True(t, true, isUuid)
assert.Equal(t, event.EventTimeStamp.AsTime().UnixMilli(), applicationProperties["cloudEvents:time"])
assert.Equal(t, "application/cloudevents+protobuf", applicationProperties["cloudEvents:datacontenttype"])
assert.Equal(t, "audit.v1.RoutableAuditEvent", applicationProperties["cloudEvents:type"])
validateProtobufMessagePayload(
// Check deserialized message
validateRoutableEventPayload(
t,
message.Data[0],
nil,
@ -370,16 +377,22 @@ func validateSentEvent(
fmt.Sprintf("topic://%s/%s", topicPrefix, routingIdentifier.Identifier),
*message.Properties.To)
// Check deserialized message
var protobufMessage auditV1.ProtobufMessage
assert.NoError(t, proto.Unmarshal(message.Data[0], &protobufMessage))
assert.Equal(t, "audit.v1.RoutableAuditEvent", protobufMessage.ProtobufType)
// Check cloud event properties
applicationProperties := message.ApplicationProperties
assert.Equal(t, "1.0", applicationProperties["cloudEvents:specversion"])
assert.Equal(t, "resource-manager", applicationProperties["cloudEvents:source"])
_, isUuid := uuid.Parse(fmt.Sprintf("%s", applicationProperties["cloudEvents:id"]))
assert.True(t, true, isUuid)
assert.Equal(t, event.EventTimeStamp.AsTime().UnixMilli(), applicationProperties["cloudEvents:time"])
assert.Equal(t, "application/cloudevents+protobuf", applicationProperties["cloudEvents:datacontenttype"])
assert.Equal(t, "audit.v1.RoutableAuditEvent", applicationProperties["cloudEvents:type"])
validateProtobufMessagePayload(
// Check deserialized message
validateRoutableEventPayload(
t, message.Data[0], routingIdentifier, objectIdentifier, event, eventName, visibility)
}
func validateProtobufMessagePayload(
func validateRoutableEventPayload(
t *testing.T,
payload []byte,
routingIdentifier *RoutingIdentifier,
@ -389,14 +402,9 @@ func validateProtobufMessagePayload(
visibility auditV1.Visibility,
) {
// Check deserialized message
var protobufMessage auditV1.ProtobufMessage
assert.NoError(t, proto.Unmarshal(payload, &protobufMessage))
assert.Equal(t, "audit.v1.RoutableAuditEvent", protobufMessage.ProtobufType)
// Check routable audit event parameters
var routableAuditEvent auditV1.RoutableAuditEvent
assert.NoError(t, proto.Unmarshal(protobufMessage.Value, &routableAuditEvent))
assert.NoError(t, proto.Unmarshal(payload, &routableAuditEvent))
assert.Equal(t, eventName, routableAuditEvent.EventName)
assert.Equal(t, visibility, routableAuditEvent.Visibility)

View file

@ -23,6 +23,8 @@ func NewOrganizationAuditEvent(
) {
auditEvent := &auditV1.AuditEvent{
EventSource: "resource-manager",
Region: auditV1.Region_REGION_EU01,
SequenceNumber: wrapperspb.Int64(0),
EventName: "ORGANIZATION_CREATED",
EventTimeStamp: timestamppb.New(time.Now()),
@ -42,6 +44,7 @@ func NewOrganizationAuditEvent(
Identifier: identifier.String(),
Type: auditV1.ObjectType_OBJECT_TYPE_ORGANIZATION,
}
auditEvent.ResourceContainerReference = &auditV1.AuditEvent_ObjectIdentifier{ObjectIdentifier: objectIdentifier}
if customization != nil {
(*customization)(auditEvent, routingIdentifier, objectIdentifier)
@ -107,6 +110,8 @@ func NewFolderAuditEvent(
) {
auditEvent := &auditV1.AuditEvent{
EventSource: "resource-manager",
Region: auditV1.Region_REGION_EU01,
SequenceNumber: wrapperspb.Int64(0),
EventName: "FOLDER_CREATED",
EventTimeStamp: timestamppb.New(time.Now()),
@ -125,6 +130,7 @@ func NewFolderAuditEvent(
Identifier: uuid.New().String(),
Type: auditV1.ObjectType_OBJECT_TYPE_FOLDER,
}
auditEvent.ResourceContainerReference = &auditV1.AuditEvent_ObjectIdentifier{ObjectIdentifier: objectIdentifier}
if customization != nil {
(*customization)(auditEvent, routingIdentifier, objectIdentifier)
@ -145,6 +151,8 @@ func NewProjectAuditEvent(
) {
auditEvent := &auditV1.AuditEvent{
EventSource: "resource-manager",
Region: auditV1.Region_REGION_EU01,
SequenceNumber: wrapperspb.Int64(0),
EventName: "PROJECT_CREATED",
EventTimeStamp: timestamppb.New(time.Now()),
@ -164,6 +172,7 @@ func NewProjectAuditEvent(
Identifier: identifier.String(),
Type: auditV1.ObjectType_OBJECT_TYPE_PROJECT,
}
auditEvent.ResourceContainerReference = &auditV1.AuditEvent_ObjectIdentifier{ObjectIdentifier: objectIdentifier}
if customization != nil {
(*customization)(auditEvent, routingIdentifier, objectIdentifier)
@ -176,6 +185,8 @@ func NewSystemAuditEvent(
customization *func(*auditV1.AuditEvent)) *auditV1.AuditEvent {
auditEvent := &auditV1.AuditEvent{
EventSource: "resource-manager",
Region: auditV1.Region_REGION_EU01,
SequenceNumber: wrapperspb.Int64(0),
EventName: "SYSTEM_CHANGED",
EventTimeStamp: timestamppb.New(time.Now()),
@ -184,6 +195,8 @@ func NewSystemAuditEvent(
Id: uuid.NewString(),
},
}
auditEvent.ResourceContainerReference = &auditV1.AuditEvent_ObjectName{
ObjectName: auditV1.ObjectName_OBJECT_NAME_SYSTEM}
if customization != nil {
(*customization)(auditEvent)

View file

@ -7,7 +7,6 @@ import (
"log/slog"
"strings"
"time"
//"dev.azure.com/schwarzit/schwarzit.stackit-core-platform/common-audit.git/audit/api"
)
// Default connection timeout for the AMQP connection
@ -23,9 +22,10 @@ type MessagingApi interface {
// * topic - the messaging topic where to send the data to
// * data - the serialized data as byte array
// * contentType - the contentType of the serialized data
// * applicationProperties - properties to send with the message (i.e. cloud event headers)
//
// It returns technical errors for connection issues or sending problems.
Send(ctx context.Context, topic string, data []byte, contentType string) error
Send(ctx context.Context, topic string, data []byte, contentType string, applicationProperties map[string]any) error
}
// AmqpConfig provides AMQP connection related parameters.
@ -124,8 +124,8 @@ func (a *AmqpMessagingApi) connect() error {
// Send implements MessagingApi.Send.
// If errors occur the connection to the messaging system will be closed and re-established.
func (a *AmqpMessagingApi) Send(ctx context.Context, topic string, data []byte, contentType string) error {
err := a.trySend(ctx, topic, data, contentType)
func (a *AmqpMessagingApi) Send(ctx context.Context, topic string, data []byte, contentType string, applicationProperties map[string]any) error {
err := a.trySend(ctx, topic, data, contentType, applicationProperties)
if err == nil {
return nil
}
@ -138,11 +138,11 @@ func (a *AmqpMessagingApi) Send(ctx context.Context, topic string, data []byte,
return err
}
return a.trySend(ctx, topic, data, contentType)
return a.trySend(ctx, topic, data, contentType, applicationProperties)
}
// trySend actually sends the given data as amqp.Message to the messaging system.
func (a *AmqpMessagingApi) trySend(ctx context.Context, topic string, data []byte, contentType string) error {
func (a *AmqpMessagingApi) trySend(ctx context.Context, topic string, data []byte, contentType string, applicationProperties map[string]any) error {
if !strings.HasPrefix(topic, AmqpTopicPrefix) {
return fmt.Errorf(
"topic %q name lacks mandatory prefix %q",
@ -165,7 +165,8 @@ func (a *AmqpMessagingApi) trySend(ctx context.Context, topic string, data []byt
To: &topic,
ContentType: &contentType,
},
Data: bytes,
ApplicationProperties: applicationProperties,
Data: bytes,
}
err = (*sender).Send(ctx, &message, nil)

View file

@ -65,7 +65,7 @@ func TestAmqpMessagingApi_Send(t *testing.T) {
api, err := NewAmqpMessagingApi(AmqpConfig{URL: solaceContainer.AmqpConnectionString})
assert.NoError(t, err)
err = (*api).Send(ctx, "topic-name", []byte{}, "application/json")
err = (*api).Send(ctx, "topic-name", []byte{}, "application/json", make(map[string]any))
assert.EqualError(t, err, "topic \"topic-name\" name lacks mandatory prefix \"topic://\"")
})
@ -98,7 +98,7 @@ func TestAmqpMessagingApi_Send(t *testing.T) {
// First the session is closed as it returns the expected error
// Then the retry mechanism restarts the connection and successfully sends the data
value := "test"
err = (*api).Send(ctx, topicName, []byte(value), "application/json")
err = (*api).Send(ctx, topicName, []byte(value), "application/json", make(map[string]any))
assert.NoError(t, err)
// Check that the mock was called
@ -130,7 +130,7 @@ func TestAmqpMessagingApi_Send(t *testing.T) {
// Instantiate mock sender
senderMock := AmqpSenderMock{}
senderMock.On("Send", mock.Anything, mock.Anything, mock.Anything).Return(expectedError)
senderMock.On("Send", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(expectedError)
senderMock.On("Close", mock.Anything).Return(nil)
var amqpSender AmqpSender = &senderMock
@ -146,7 +146,7 @@ func TestAmqpMessagingApi_Send(t *testing.T) {
// First the sender and session are closed as the sender returns the expected error
// Then the retry mechanism restarts the connection and successfully sends the data
value := "test"
err = (*api).Send(ctx, topicName, []byte(value), "application/json")
err = (*api).Send(ctx, topicName, []byte(value), "application/json", make(map[string]any))
assert.NoError(t, err)
// Check that the mocks were called

View file

@ -79,6 +79,52 @@ func (EventTrigger) EnumDescriptor() ([]byte, []int) {
return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{0}
}
type Region int32
const (
Region_REGION_UNSPECIFIED Region = 0
Region_REGION_EU01 Region = 1
)
// Enum value maps for Region.
var (
Region_name = map[int32]string{
0: "REGION_UNSPECIFIED",
1: "REGION_EU01",
}
Region_value = map[string]int32{
"REGION_UNSPECIFIED": 0,
"REGION_EU01": 1,
}
)
func (x Region) Enum() *Region {
p := new(Region)
*p = x
return p
}
func (x Region) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (Region) Descriptor() protoreflect.EnumDescriptor {
return file_audit_v1_audit_event_proto_enumTypes[1].Descriptor()
}
func (Region) Type() protoreflect.EnumType {
return &file_audit_v1_audit_event_proto_enumTypes[1]
}
func (x Region) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use Region.Descriptor instead.
func (Region) EnumDescriptor() ([]byte, []int) {
return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{1}
}
type Principal struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -284,28 +330,39 @@ type AuditEvent struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Name of the source system
EventSource string `protobuf:"bytes,1,opt,name=event_source,json=eventSource,proto3" json:"event_source,omitempty"`
Region Region `protobuf:"varint,2,opt,name=region,proto3,enum=audit.v1.Region" json:"region,omitempty"`
// Sequence number of event sent by the service to identify missing events.
SequenceNumber *wrapperspb.Int64Value `protobuf:"bytes,1,opt,name=sequence_number,json=sequenceNumber,proto3" json:"sequence_number,omitempty"`
SequenceNumber *wrapperspb.Int64Value `protobuf:"bytes,3,opt,name=sequence_number,json=sequenceNumber,proto3" json:"sequence_number,omitempty"`
// Functional event name with pattern <TYPE>_<ACTION>, e.g. ORGANIZATION_CREATED
// Important for filtering and translation / verbalization of event types
// in the UI or data sinks.
EventName string `protobuf:"bytes,2,opt,name=event_name,json=eventName,proto3" json:"event_name,omitempty"`
EventName string `protobuf:"bytes,4,opt,name=event_name,json=eventName,proto3" json:"event_name,omitempty"`
// The time when the event happened. Must not be a value in the future.
EventTimeStamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=event_time_stamp,json=eventTimeStamp,proto3" json:"event_time_stamp,omitempty"`
EventTrigger EventTrigger `protobuf:"varint,4,opt,name=event_trigger,json=eventTrigger,proto3,enum=audit.v1.EventTrigger" json:"event_trigger,omitempty"`
EventTimeStamp *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=event_time_stamp,json=eventTimeStamp,proto3" json:"event_time_stamp,omitempty"`
EventTrigger EventTrigger `protobuf:"varint,6,opt,name=event_trigger,json=eventTrigger,proto3,enum=audit.v1.EventTrigger" json:"event_trigger,omitempty"`
// Request details - mandatory if event_trigger is set to "EVENT_REQUEST"
Request *RequestDetails `protobuf:"bytes,5,opt,name=request,proto3,oneof" json:"request,omitempty"`
Initiator *Principal `protobuf:"bytes,6,opt,name=initiator,proto3" json:"initiator,omitempty"`
Request *RequestDetails `protobuf:"bytes,7,opt,name=request,proto3,oneof" json:"request,omitempty"`
Initiator *Principal `protobuf:"bytes,8,opt,name=initiator,proto3" json:"initiator,omitempty"`
// List of service account delegation principals.
// -> Chain from service account to the actual user who initiated the action.
Principals []*Principal `protobuf:"bytes,7,rep,name=principals,proto3" json:"principals,omitempty"`
ResourceId *string `protobuf:"bytes,8,opt,name=resource_id,json=resourceId,proto3,oneof" json:"resource_id,omitempty"`
ResourceName *string `protobuf:"bytes,9,opt,name=resource_name,json=resourceName,proto3,oneof" json:"resource_name,omitempty"`
CorrelationId *string `protobuf:"bytes,10,opt,name=correlation_id,json=correlationId,proto3,oneof" json:"correlation_id,omitempty"`
Principals []*Principal `protobuf:"bytes,9,rep,name=principals,proto3" json:"principals,omitempty"`
// Identifier the audit log event refers to
//
// Types that are assignable to ResourceContainerReference:
//
// *AuditEvent_ObjectName
// *AuditEvent_ObjectIdentifier
ResourceContainerReference isAuditEvent_ResourceContainerReference `protobuf_oneof:"resource_container_reference"`
// The identifier of the actual resource (e.g. a VM)
ResourceId *string `protobuf:"bytes,12,opt,name=resource_id,json=resourceId,proto3,oneof" json:"resource_id,omitempty"`
ResourceName *string `protobuf:"bytes,13,opt,name=resource_name,json=resourceName,proto3,oneof" json:"resource_name,omitempty"`
CorrelationId *string `protobuf:"bytes,14,opt,name=correlation_id,json=correlationId,proto3,oneof" json:"correlation_id,omitempty"`
// Result of the operation to publish with the event
Result *structpb.Struct `protobuf:"bytes,11,opt,name=result,proto3,oneof" json:"result,omitempty"`
Result *structpb.Struct `protobuf:"bytes,15,opt,name=result,proto3,oneof" json:"result,omitempty"`
// Additional information to publish with the event
Details *structpb.Struct `protobuf:"bytes,12,opt,name=details,proto3,oneof" json:"details,omitempty"`
Details *structpb.Struct `protobuf:"bytes,16,opt,name=details,proto3,oneof" json:"details,omitempty"`
}
func (x *AuditEvent) Reset() {
@ -340,6 +397,20 @@ func (*AuditEvent) Descriptor() ([]byte, []int) {
return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{3}
}
func (x *AuditEvent) GetEventSource() string {
if x != nil {
return x.EventSource
}
return ""
}
func (x *AuditEvent) GetRegion() Region {
if x != nil {
return x.Region
}
return Region_REGION_UNSPECIFIED
}
func (x *AuditEvent) GetSequenceNumber() *wrapperspb.Int64Value {
if x != nil {
return x.SequenceNumber
@ -389,6 +460,27 @@ func (x *AuditEvent) GetPrincipals() []*Principal {
return nil
}
func (m *AuditEvent) GetResourceContainerReference() isAuditEvent_ResourceContainerReference {
if m != nil {
return m.ResourceContainerReference
}
return nil
}
func (x *AuditEvent) GetObjectName() ObjectName {
if x, ok := x.GetResourceContainerReference().(*AuditEvent_ObjectName); ok {
return x.ObjectName
}
return ObjectName_OBJECT_NAME_UNSPECIFIED
}
func (x *AuditEvent) GetObjectIdentifier() *ObjectIdentifier {
if x, ok := x.GetResourceContainerReference().(*AuditEvent_ObjectIdentifier); ok {
return x.ObjectIdentifier
}
return nil
}
func (x *AuditEvent) GetResourceId() string {
if x != nil && x.ResourceId != nil {
return *x.ResourceId
@ -424,6 +516,25 @@ func (x *AuditEvent) GetDetails() *structpb.Struct {
return nil
}
type isAuditEvent_ResourceContainerReference interface {
isAuditEvent_ResourceContainerReference()
}
type AuditEvent_ObjectName struct {
// If it is a technical event not related to an organization, folder or project
// Will NOT be routed to the end-user, only for internal analysis ->
// Clarify what do in the router
ObjectName ObjectName `protobuf:"varint,10,opt,name=object_name,json=objectName,proto3,enum=audit.v1.ObjectName,oneof"`
}
type AuditEvent_ObjectIdentifier struct {
ObjectIdentifier *ObjectIdentifier `protobuf:"bytes,11,opt,name=object_identifier,json=objectIdentifier,proto3,oneof"`
}
func (*AuditEvent_ObjectName) isAuditEvent_ResourceContainerReference() {}
func (*AuditEvent_ObjectIdentifier) isAuditEvent_ResourceContainerReference() {}
var File_audit_v1_audit_event_proto protoreflect.FileDescriptor
var file_audit_v1_audit_event_proto_rawDesc = []byte{
@ -437,118 +548,139 @@ var file_audit_v1_audit_event_proto_rawDesc = []byte{
0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x22, 0x54, 0x0a, 0x09, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x12,
0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03,
0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x18, 0xff, 0x01,
0x60, 0x01, 0x48, 0x00, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x08,
0x0a, 0x06, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0xf0, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x29, 0x0a, 0x08, 0x65,
0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xba,
0x48, 0x0a, 0xc8, 0x01, 0x01, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x52, 0x08, 0x65, 0x6e,
0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x72, 0x02, 0x70, 0x01, 0x52, 0x0f, 0x73,
0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x31,
0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01,
0x28, 0x09, 0x42, 0x0d, 0xba, 0x48, 0x0a, 0xc8, 0x01, 0x01, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff,
0x01, 0x48, 0x00, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x88, 0x01,
0x01, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18,
0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x01,
0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x88, 0x01, 0x01, 0x12,
0x30, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x88, 0x01,
0x01, 0x12, 0x31, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61,
0x64, 0x65, 0x72, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67,
0x65, 0x6e, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
0x72, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x03,
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01,
0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01,
0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xcb, 0x07, 0x0a,
0x0a, 0x41, 0x75, 0x64, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x0f, 0x73,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75,
0x65, 0x42, 0x13, 0xba, 0x48, 0x10, 0xc8, 0x01, 0x01, 0x22, 0x0b, 0x28, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x52, 0x0e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f,
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x19, 0xba, 0x48, 0x16, 0xc8,
0x01, 0x01, 0x72, 0x11, 0x32, 0x0f, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x2b, 0x5f, 0x5b, 0x41,
0x2d, 0x5a, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65,
0x12, 0x51, 0x0a, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73,
0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0xb2, 0x01,
0x02, 0x38, 0x01, 0x52, 0x0e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74,
0x61, 0x6d, 0x70, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x69,
0x67, 0x67, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x64,
0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67,
0x65, 0x72, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52,
0x0c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x37, 0x0a,
0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18,
0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61,
0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x64, 0x69,
0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x42, 0x06,
0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f,
0x72, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x18,
0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31,
0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6e,
0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x12, 0x30, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07,
0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x48, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f,
0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42,
0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x48, 0x02, 0x52, 0x0c, 0x72,
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x36,
0x0a, 0x0e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18,
0xff, 0x01, 0x48, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48,
0x04, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x07,
0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x05, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c,
0x73, 0x88, 0x01, 0x01, 0x3a, 0x7c, 0xba, 0x48, 0x79, 0x1a, 0x77, 0x0a, 0x0f, 0x72, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x2e, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1b, 0x72, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6d, 0x75,
0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x1a, 0x47, 0x74, 0x68, 0x69, 0x73, 0x2e,
0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x20, 0x3d, 0x3d,
0x20, 0x33, 0x20, 0x26, 0x26, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x72,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e,
0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x20, 0x21, 0x3d,
0x20, 0x33, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e,
0x0a, 0x0c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x42, 0x10,
0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x5f, 0x69, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x0a,
0x0a, 0x08, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2a, 0x7e, 0x0a, 0x0c, 0x45, 0x76,
0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x56,
0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50,
0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x56, 0x45,
0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54,
0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47,
0x47, 0x45, 0x52, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x52, 0x10, 0x02, 0x12,
0x19, 0x0a, 0x15, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52,
0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x03, 0x42, 0x81, 0x01, 0x0a, 0x1c, 0x63,
0x6f, 0x6d, 0x2e, 0x73, 0x63, 0x68, 0x77, 0x61, 0x72, 0x7a, 0x2e, 0x73, 0x74, 0x61, 0x63, 0x6b,
0x69, 0x74, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x41, 0x75, 0x64,
0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x0f,
0x2e, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x3b, 0x61, 0x75, 0x64, 0x69, 0x74, 0x56, 0x31, 0xa2,
0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x08, 0x41, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x56, 0x31,
0xca, 0x02, 0x08, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x14, 0x41, 0x75,
0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
0x74, 0x61, 0xea, 0x02, 0x09, 0x41, 0x75, 0x64, 0x69, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x74, 0x6f, 0x1a, 0x15, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d,
0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x54, 0x0a, 0x09, 0x50, 0x72, 0x69,
0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25,
0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba,
0x48, 0x07, 0x72, 0x05, 0x18, 0xff, 0x01, 0x60, 0x01, 0x48, 0x00, 0x52, 0x05, 0x65, 0x6d, 0x61,
0x69, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22,
0xf0, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69,
0x6c, 0x73, 0x12, 0x29, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xba, 0x48, 0x0a, 0xc8, 0x01, 0x01, 0x72, 0x05, 0x10, 0x01,
0x18, 0xff, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x36, 0x0a,
0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01,
0x72, 0x02, 0x70, 0x01, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x70, 0x41, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x31, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67,
0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xba, 0x48, 0x0a, 0xc8, 0x01,
0x01, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x48, 0x00, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72,
0x41, 0x67, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61,
0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53,
0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
0x65, 0x72, 0x73, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x05,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x02, 0x52,
0x04, 0x62, 0x6f, 0x64, 0x79, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64,
0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x64, 0x69,
0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64,
0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f,
0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70,
0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x62, 0x6f,
0x64, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61,
0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x6b, 0x65,
0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x22, 0xd7, 0x09, 0x0a, 0x0a, 0x41, 0x75, 0x64, 0x69, 0x74, 0x45, 0x76, 0x65,
0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x0c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01,
0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x12, 0x30, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0e, 0x32, 0x10, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67,
0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x72, 0x65, 0x67,
0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x0f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f,
0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49,
0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x13, 0xba, 0x48, 0x10, 0xc8, 0x01,
0x01, 0x22, 0x0b, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x52, 0x0e,
0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x38,
0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01,
0x28, 0x09, 0x42, 0x19, 0xba, 0x48, 0x16, 0xc8, 0x01, 0x01, 0x72, 0x11, 0x32, 0x0f, 0x5e, 0x5b,
0x41, 0x2d, 0x5a, 0x5d, 0x2b, 0x5f, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x65,
0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x10, 0x65, 0x76, 0x65, 0x6e,
0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0b,
0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0xb2, 0x01, 0x02, 0x38, 0x01, 0x52, 0x0e, 0x65, 0x76, 0x65,
0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x48, 0x0a, 0x0d, 0x65,
0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76,
0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8,
0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x72,
0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76,
0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73,
0x48, 0x01, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x39,
0x0a, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x69,
0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x09,
0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x72, 0x69,
0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e,
0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70,
0x61, 0x6c, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x12, 0x37,
0x0a, 0x0b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20,
0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4f,
0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x11, 0x6f, 0x62, 0x6a, 0x65, 0x63,
0x74, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62,
0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00,
0x52, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
0x65, 0x72, 0x12, 0x30, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69,
0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01,
0x18, 0xff, 0x01, 0x48, 0x02, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49,
0x64, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07,
0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x48, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x0e, 0x63, 0x6f,
0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01,
0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x48, 0x04,
0x52, 0x0d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x88,
0x01, 0x01, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x0f, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x05, 0x52, 0x06, 0x72,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61,
0x69, 0x6c, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75,
0x63, 0x74, 0x48, 0x06, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x88, 0x01, 0x01,
0x3a, 0x7c, 0xba, 0x48, 0x79, 0x1a, 0x77, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x2e, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62,
0x65, 0x20, 0x73, 0x65, 0x74, 0x1a, 0x47, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e,
0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x20, 0x26,
0x26, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e,
0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x20, 0x21, 0x3d, 0x20, 0x33, 0x42, 0x25,
0x0a, 0x1c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61,
0x69, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05,
0xba, 0x48, 0x02, 0x08, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69,
0x64, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e,
0x61, 0x6d, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2a, 0x7e, 0x0a,
0x0c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x1d, 0x0a,
0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x55,
0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13,
0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x45, 0x56,
0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54,
0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x52,
0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47,
0x47, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x03, 0x2a, 0x31, 0x0a,
0x06, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x47, 0x49, 0x4f,
0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x47, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x55, 0x30, 0x31, 0x10, 0x01,
0x42, 0x81, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x63, 0x68, 0x77, 0x61, 0x72, 0x7a,
0x2e, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x69, 0x74, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76,
0x31, 0x42, 0x0f, 0x41, 0x75, 0x64, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f,
0x74, 0x6f, 0x50, 0x01, 0x5a, 0x0f, 0x2e, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x3b, 0x61, 0x75,
0x64, 0x69, 0x74, 0x56, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x08, 0x41, 0x75,
0x64, 0x69, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56,
0x31, 0xe2, 0x02, 0x14, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42,
0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x41, 0x75, 0x64, 0x69, 0x74,
0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -563,35 +695,41 @@ func file_audit_v1_audit_event_proto_rawDescGZIP() []byte {
return file_audit_v1_audit_event_proto_rawDescData
}
var file_audit_v1_audit_event_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_audit_v1_audit_event_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_audit_v1_audit_event_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_audit_v1_audit_event_proto_goTypes = []interface{}{
(EventTrigger)(0), // 0: audit.v1.EventTrigger
(*Principal)(nil), // 1: audit.v1.Principal
(*RequestDetails)(nil), // 2: audit.v1.RequestDetails
(*RequestHeader)(nil), // 3: audit.v1.RequestHeader
(*AuditEvent)(nil), // 4: audit.v1.AuditEvent
(*structpb.Struct)(nil), // 5: google.protobuf.Struct
(*wrapperspb.Int64Value)(nil), // 6: google.protobuf.Int64Value
(*timestamppb.Timestamp)(nil), // 7: google.protobuf.Timestamp
(Region)(0), // 1: audit.v1.Region
(*Principal)(nil), // 2: audit.v1.Principal
(*RequestDetails)(nil), // 3: audit.v1.RequestDetails
(*RequestHeader)(nil), // 4: audit.v1.RequestHeader
(*AuditEvent)(nil), // 5: audit.v1.AuditEvent
(*structpb.Struct)(nil), // 6: google.protobuf.Struct
(*wrapperspb.Int64Value)(nil), // 7: google.protobuf.Int64Value
(*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp
(ObjectName)(0), // 9: audit.v1.ObjectName
(*ObjectIdentifier)(nil), // 10: audit.v1.ObjectIdentifier
}
var file_audit_v1_audit_event_proto_depIdxs = []int32{
5, // 0: audit.v1.RequestDetails.parameters:type_name -> google.protobuf.Struct
5, // 1: audit.v1.RequestDetails.body:type_name -> google.protobuf.Struct
3, // 2: audit.v1.RequestDetails.headers:type_name -> audit.v1.RequestHeader
6, // 3: audit.v1.AuditEvent.sequence_number:type_name -> google.protobuf.Int64Value
7, // 4: audit.v1.AuditEvent.event_time_stamp:type_name -> google.protobuf.Timestamp
0, // 5: audit.v1.AuditEvent.event_trigger:type_name -> audit.v1.EventTrigger
2, // 6: audit.v1.AuditEvent.request:type_name -> audit.v1.RequestDetails
1, // 7: audit.v1.AuditEvent.initiator:type_name -> audit.v1.Principal
1, // 8: audit.v1.AuditEvent.principals:type_name -> audit.v1.Principal
5, // 9: audit.v1.AuditEvent.result:type_name -> google.protobuf.Struct
5, // 10: audit.v1.AuditEvent.details:type_name -> google.protobuf.Struct
11, // [11:11] is the sub-list for method output_type
11, // [11:11] is the sub-list for method input_type
11, // [11:11] is the sub-list for extension type_name
11, // [11:11] is the sub-list for extension extendee
0, // [0:11] is the sub-list for field type_name
6, // 0: audit.v1.RequestDetails.parameters:type_name -> google.protobuf.Struct
6, // 1: audit.v1.RequestDetails.body:type_name -> google.protobuf.Struct
4, // 2: audit.v1.RequestDetails.headers:type_name -> audit.v1.RequestHeader
1, // 3: audit.v1.AuditEvent.region:type_name -> audit.v1.Region
7, // 4: audit.v1.AuditEvent.sequence_number:type_name -> google.protobuf.Int64Value
8, // 5: audit.v1.AuditEvent.event_time_stamp:type_name -> google.protobuf.Timestamp
0, // 6: audit.v1.AuditEvent.event_trigger:type_name -> audit.v1.EventTrigger
3, // 7: audit.v1.AuditEvent.request:type_name -> audit.v1.RequestDetails
2, // 8: audit.v1.AuditEvent.initiator:type_name -> audit.v1.Principal
2, // 9: audit.v1.AuditEvent.principals:type_name -> audit.v1.Principal
9, // 10: audit.v1.AuditEvent.object_name:type_name -> audit.v1.ObjectName
10, // 11: audit.v1.AuditEvent.object_identifier:type_name -> audit.v1.ObjectIdentifier
6, // 12: audit.v1.AuditEvent.result:type_name -> google.protobuf.Struct
6, // 13: audit.v1.AuditEvent.details:type_name -> google.protobuf.Struct
14, // [14:14] is the sub-list for method output_type
14, // [14:14] is the sub-list for method input_type
14, // [14:14] is the sub-list for extension type_name
14, // [14:14] is the sub-list for extension extendee
0, // [0:14] is the sub-list for field type_name
}
func init() { file_audit_v1_audit_event_proto_init() }
@ -599,6 +737,7 @@ func file_audit_v1_audit_event_proto_init() {
if File_audit_v1_audit_event_proto != nil {
return
}
file_audit_v1_common_proto_init()
if !protoimpl.UnsafeEnabled {
file_audit_v1_audit_event_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Principal); i {
@ -651,13 +790,16 @@ func file_audit_v1_audit_event_proto_init() {
}
file_audit_v1_audit_event_proto_msgTypes[0].OneofWrappers = []interface{}{}
file_audit_v1_audit_event_proto_msgTypes[1].OneofWrappers = []interface{}{}
file_audit_v1_audit_event_proto_msgTypes[3].OneofWrappers = []interface{}{}
file_audit_v1_audit_event_proto_msgTypes[3].OneofWrappers = []interface{}{
(*AuditEvent_ObjectName)(nil),
(*AuditEvent_ObjectIdentifier)(nil),
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_audit_v1_audit_event_proto_rawDesc,
NumEnums: 1,
NumEnums: 2,
NumMessages: 4,
NumExtensions: 0,
NumServices: 0,

View file

@ -474,6 +474,10 @@ func (m *AuditEvent) validate(all bool) error {
var errors []error
// no validation rules for EventSource
// no validation rules for Region
if all {
switch v := interface{}(m.GetSequenceNumber()).(type) {
case interface{ ValidateAll() error }:
@ -599,6 +603,64 @@ func (m *AuditEvent) validate(all bool) error {
}
switch v := m.ResourceContainerReference.(type) {
case *AuditEvent_ObjectName:
if v == nil {
err := AuditEventValidationError{
field: "ResourceContainerReference",
reason: "oneof value cannot be a typed-nil",
}
if !all {
return err
}
errors = append(errors, err)
}
// no validation rules for ObjectName
case *AuditEvent_ObjectIdentifier:
if v == nil {
err := AuditEventValidationError{
field: "ResourceContainerReference",
reason: "oneof value cannot be a typed-nil",
}
if !all {
return err
}
errors = append(errors, err)
}
if all {
switch v := interface{}(m.GetObjectIdentifier()).(type) {
case interface{ ValidateAll() error }:
if err := v.ValidateAll(); err != nil {
errors = append(errors, AuditEventValidationError{
field: "ObjectIdentifier",
reason: "embedded message failed validation",
cause: err,
})
}
case interface{ Validate() error }:
if err := v.Validate(); err != nil {
errors = append(errors, AuditEventValidationError{
field: "ObjectIdentifier",
reason: "embedded message failed validation",
cause: err,
})
}
}
} else if v, ok := interface{}(m.GetObjectIdentifier()).(interface{ Validate() error }); ok {
if err := v.Validate(); err != nil {
return AuditEventValidationError{
field: "ObjectIdentifier",
reason: "embedded message failed validation",
cause: err,
}
}
}
default:
_ = v // ensures v is used
}
if m.Request != nil {
if all {

View file

@ -0,0 +1,285 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.34.1
// protoc (unknown)
// source: audit/v1/common.proto
package auditV1
import (
_ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type ObjectName int32
const (
ObjectName_OBJECT_NAME_UNSPECIFIED ObjectName = 0
// If the action happens on system level and doesn't relate to a known ObjectType.
ObjectName_OBJECT_NAME_SYSTEM ObjectName = 1
)
// Enum value maps for ObjectName.
var (
ObjectName_name = map[int32]string{
0: "OBJECT_NAME_UNSPECIFIED",
1: "OBJECT_NAME_SYSTEM",
}
ObjectName_value = map[string]int32{
"OBJECT_NAME_UNSPECIFIED": 0,
"OBJECT_NAME_SYSTEM": 1,
}
)
func (x ObjectName) Enum() *ObjectName {
p := new(ObjectName)
*p = x
return p
}
func (x ObjectName) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ObjectName) Descriptor() protoreflect.EnumDescriptor {
return file_audit_v1_common_proto_enumTypes[0].Descriptor()
}
func (ObjectName) Type() protoreflect.EnumType {
return &file_audit_v1_common_proto_enumTypes[0]
}
func (x ObjectName) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ObjectName.Descriptor instead.
func (ObjectName) EnumDescriptor() ([]byte, []int) {
return file_audit_v1_common_proto_rawDescGZIP(), []int{0}
}
// The type of the object the audit event refers to.
// Relevant for type-detection and lookups in the routing.
type ObjectType int32
const (
ObjectType_OBJECT_TYPE_UNSPECIFIED ObjectType = 0
ObjectType_OBJECT_TYPE_ORGANIZATION ObjectType = 1
ObjectType_OBJECT_TYPE_FOLDER ObjectType = 2
ObjectType_OBJECT_TYPE_PROJECT ObjectType = 3
)
// Enum value maps for ObjectType.
var (
ObjectType_name = map[int32]string{
0: "OBJECT_TYPE_UNSPECIFIED",
1: "OBJECT_TYPE_ORGANIZATION",
2: "OBJECT_TYPE_FOLDER",
3: "OBJECT_TYPE_PROJECT",
}
ObjectType_value = map[string]int32{
"OBJECT_TYPE_UNSPECIFIED": 0,
"OBJECT_TYPE_ORGANIZATION": 1,
"OBJECT_TYPE_FOLDER": 2,
"OBJECT_TYPE_PROJECT": 3,
}
)
func (x ObjectType) Enum() *ObjectType {
p := new(ObjectType)
*p = x
return p
}
func (x ObjectType) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ObjectType) Descriptor() protoreflect.EnumDescriptor {
return file_audit_v1_common_proto_enumTypes[1].Descriptor()
}
func (ObjectType) Type() protoreflect.EnumType {
return &file_audit_v1_common_proto_enumTypes[1]
}
func (x ObjectType) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ObjectType.Descriptor instead.
func (ObjectType) EnumDescriptor() ([]byte, []int) {
return file_audit_v1_common_proto_rawDescGZIP(), []int{1}
}
type ObjectIdentifier struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Identifier of the respective entity (e.g. Identifier of an organization)
Identifier string `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"`
// Type of the respective entity relevant for routing
Type ObjectType `protobuf:"varint,2,opt,name=type,proto3,enum=audit.v1.ObjectType" json:"type,omitempty"`
}
func (x *ObjectIdentifier) Reset() {
*x = ObjectIdentifier{}
if protoimpl.UnsafeEnabled {
mi := &file_audit_v1_common_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ObjectIdentifier) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ObjectIdentifier) ProtoMessage() {}
func (x *ObjectIdentifier) ProtoReflect() protoreflect.Message {
mi := &file_audit_v1_common_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ObjectIdentifier.ProtoReflect.Descriptor instead.
func (*ObjectIdentifier) Descriptor() ([]byte, []int) {
return file_audit_v1_common_proto_rawDescGZIP(), []int{0}
}
func (x *ObjectIdentifier) GetIdentifier() string {
if x != nil {
return x.Identifier
}
return ""
}
func (x *ObjectIdentifier) GetType() ObjectType {
if x != nil {
return x.Type
}
return ObjectType_OBJECT_TYPE_UNSPECIFIED
}
var File_audit_v1_common_proto protoreflect.FileDescriptor
var file_audit_v1_common_proto_rawDesc = []byte{
0x0a, 0x15, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76,
0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f,
0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x76,
0x0a, 0x10, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
0x65, 0x72, 0x12, 0x2b, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x72, 0x03,
0xb0, 0x01, 0x01, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12,
0x35, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e,
0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54,
0x79, 0x70, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01,
0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x41, 0x0a, 0x0a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4e,
0x41, 0x4d, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10,
0x00, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45,
0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x10, 0x01, 0x2a, 0x78, 0x0a, 0x0a, 0x4f, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x4f, 0x42, 0x4a, 0x45, 0x43,
0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54,
0x59, 0x50, 0x45, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e,
0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x5f, 0x46, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x4f, 0x42,
0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43,
0x54, 0x10, 0x03, 0x42, 0x7d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x63, 0x68, 0x77, 0x61,
0x72, 0x7a, 0x2e, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x69, 0x74, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74,
0x2e, 0x76, 0x31, 0x42, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f,
0x50, 0x01, 0x5a, 0x0f, 0x2e, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x3b, 0x61, 0x75, 0x64, 0x69,
0x74, 0x56, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x08, 0x41, 0x75, 0x64, 0x69,
0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0xe2,
0x02, 0x14, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65,
0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x41, 0x75, 0x64, 0x69, 0x74, 0x3a, 0x3a,
0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_audit_v1_common_proto_rawDescOnce sync.Once
file_audit_v1_common_proto_rawDescData = file_audit_v1_common_proto_rawDesc
)
func file_audit_v1_common_proto_rawDescGZIP() []byte {
file_audit_v1_common_proto_rawDescOnce.Do(func() {
file_audit_v1_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_audit_v1_common_proto_rawDescData)
})
return file_audit_v1_common_proto_rawDescData
}
var file_audit_v1_common_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_audit_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_audit_v1_common_proto_goTypes = []interface{}{
(ObjectName)(0), // 0: audit.v1.ObjectName
(ObjectType)(0), // 1: audit.v1.ObjectType
(*ObjectIdentifier)(nil), // 2: audit.v1.ObjectIdentifier
}
var file_audit_v1_common_proto_depIdxs = []int32{
1, // 0: audit.v1.ObjectIdentifier.type:type_name -> audit.v1.ObjectType
1, // [1:1] is the sub-list for method output_type
1, // [1:1] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
}
func init() { file_audit_v1_common_proto_init() }
func file_audit_v1_common_proto_init() {
if File_audit_v1_common_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_audit_v1_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ObjectIdentifier); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_audit_v1_common_proto_rawDesc,
NumEnums: 2,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_audit_v1_common_proto_goTypes,
DependencyIndexes: file_audit_v1_common_proto_depIdxs,
EnumInfos: file_audit_v1_common_proto_enumTypes,
MessageInfos: file_audit_v1_common_proto_msgTypes,
}.Build()
File_audit_v1_common_proto = out.File
file_audit_v1_common_proto_rawDesc = nil
file_audit_v1_common_proto_goTypes = nil
file_audit_v1_common_proto_depIdxs = nil
}

View file

@ -1,5 +1,5 @@
// Code generated by protoc-gen-validate. DO NOT EDIT.
// source: audit/v1/event.proto
// source: audit/v1/common.proto
package auditV1
@ -35,46 +35,46 @@ var (
_ = sort.Sort
)
// Validate checks the field values on ProtobufMessage with the rules defined
// Validate checks the field values on ObjectIdentifier with the rules defined
// in the proto definition for this message. If any rules are violated, the
// first error encountered is returned, or nil if there are no violations.
func (m *ProtobufMessage) Validate() error {
func (m *ObjectIdentifier) Validate() error {
return m.validate(false)
}
// ValidateAll checks the field values on ProtobufMessage with the rules
// ValidateAll checks the field values on ObjectIdentifier with the rules
// defined in the proto definition for this message. If any rules are
// violated, the result is a list of violation errors wrapped in
// ProtobufMessageMultiError, or nil if none found.
func (m *ProtobufMessage) ValidateAll() error {
// ObjectIdentifierMultiError, or nil if none found.
func (m *ObjectIdentifier) ValidateAll() error {
return m.validate(true)
}
func (m *ProtobufMessage) validate(all bool) error {
func (m *ObjectIdentifier) validate(all bool) error {
if m == nil {
return nil
}
var errors []error
// no validation rules for Value
// no validation rules for Identifier
// no validation rules for ProtobufType
// no validation rules for Type
if len(errors) > 0 {
return ProtobufMessageMultiError(errors)
return ObjectIdentifierMultiError(errors)
}
return nil
}
// ProtobufMessageMultiError is an error wrapping multiple validation errors
// returned by ProtobufMessage.ValidateAll() if the designated constraints
// ObjectIdentifierMultiError is an error wrapping multiple validation errors
// returned by ObjectIdentifier.ValidateAll() if the designated constraints
// aren't met.
type ProtobufMessageMultiError []error
type ObjectIdentifierMultiError []error
// Error returns a concatenation of all the error messages it wraps.
func (m ProtobufMessageMultiError) Error() string {
func (m ObjectIdentifierMultiError) Error() string {
var msgs []string
for _, err := range m {
msgs = append(msgs, err.Error())
@ -83,11 +83,11 @@ func (m ProtobufMessageMultiError) Error() string {
}
// AllErrors returns a list of validation violation errors.
func (m ProtobufMessageMultiError) AllErrors() []error { return m }
func (m ObjectIdentifierMultiError) AllErrors() []error { return m }
// ProtobufMessageValidationError is the validation error returned by
// ProtobufMessage.Validate if the designated constraints aren't met.
type ProtobufMessageValidationError struct {
// ObjectIdentifierValidationError is the validation error returned by
// ObjectIdentifier.Validate if the designated constraints aren't met.
type ObjectIdentifierValidationError struct {
field string
reason string
cause error
@ -95,22 +95,22 @@ type ProtobufMessageValidationError struct {
}
// Field function returns field value.
func (e ProtobufMessageValidationError) Field() string { return e.field }
func (e ObjectIdentifierValidationError) Field() string { return e.field }
// Reason function returns reason value.
func (e ProtobufMessageValidationError) Reason() string { return e.reason }
func (e ObjectIdentifierValidationError) Reason() string { return e.reason }
// Cause function returns cause value.
func (e ProtobufMessageValidationError) Cause() error { return e.cause }
func (e ObjectIdentifierValidationError) Cause() error { return e.cause }
// Key function returns key value.
func (e ProtobufMessageValidationError) Key() bool { return e.key }
func (e ObjectIdentifierValidationError) Key() bool { return e.key }
// ErrorName returns error name.
func (e ProtobufMessageValidationError) ErrorName() string { return "ProtobufMessageValidationError" }
func (e ObjectIdentifierValidationError) ErrorName() string { return "ObjectIdentifierValidationError" }
// Error satisfies the builtin error interface
func (e ProtobufMessageValidationError) Error() string {
func (e ObjectIdentifierValidationError) Error() string {
cause := ""
if e.cause != nil {
cause = fmt.Sprintf(" | caused by: %v", e.cause)
@ -122,14 +122,14 @@ func (e ProtobufMessageValidationError) Error() string {
}
return fmt.Sprintf(
"invalid %sProtobufMessage.%s: %s%s",
"invalid %sObjectIdentifier.%s: %s%s",
key,
e.field,
e.reason,
cause)
}
var _ error = ProtobufMessageValidationError{}
var _ error = ObjectIdentifierValidationError{}
var _ interface {
Field() string
@ -137,4 +137,4 @@ var _ interface {
Key() bool
Cause() error
ErrorName() string
} = ProtobufMessageValidationError{}
} = ObjectIdentifierValidationError{}

View file

@ -1,166 +0,0 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.34.1
// protoc (unknown)
// source: audit/v1/event.proto
package auditV1
import (
_ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type ProtobufMessage struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Serialized event
Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
// Name of the protobuf type
ProtobufType string `protobuf:"bytes,2,opt,name=protobuf_type,json=protobufType,proto3" json:"protobuf_type,omitempty"`
}
func (x *ProtobufMessage) Reset() {
*x = ProtobufMessage{}
if protoimpl.UnsafeEnabled {
mi := &file_audit_v1_event_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ProtobufMessage) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ProtobufMessage) ProtoMessage() {}
func (x *ProtobufMessage) ProtoReflect() protoreflect.Message {
mi := &file_audit_v1_event_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ProtobufMessage.ProtoReflect.Descriptor instead.
func (*ProtobufMessage) Descriptor() ([]byte, []int) {
return file_audit_v1_event_proto_rawDescGZIP(), []int{0}
}
func (x *ProtobufMessage) GetValue() []byte {
if x != nil {
return x.Value
}
return nil
}
func (x *ProtobufMessage) GetProtobufType() string {
if x != nil {
return x.ProtobufType
}
return ""
}
var File_audit_v1_event_proto protoreflect.FileDescriptor
var file_audit_v1_event_proto_rawDesc = []byte{
0x0a, 0x14, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31,
0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76,
0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x64, 0x0a,
0x0f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42,
0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x7a, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x12, 0x2f, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x74,
0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01,
0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x54,
0x79, 0x70, 0x65, 0x42, 0x7c, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x63, 0x68, 0x77, 0x61,
0x72, 0x7a, 0x2e, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x69, 0x74, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74,
0x2e, 0x76, 0x31, 0x42, 0x0a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50,
0x01, 0x5a, 0x0f, 0x2e, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x3b, 0x61, 0x75, 0x64, 0x69, 0x74,
0x56, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x08, 0x41, 0x75, 0x64, 0x69, 0x74,
0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02,
0x14, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x41, 0x75, 0x64, 0x69, 0x74, 0x3a, 0x3a, 0x56,
0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_audit_v1_event_proto_rawDescOnce sync.Once
file_audit_v1_event_proto_rawDescData = file_audit_v1_event_proto_rawDesc
)
func file_audit_v1_event_proto_rawDescGZIP() []byte {
file_audit_v1_event_proto_rawDescOnce.Do(func() {
file_audit_v1_event_proto_rawDescData = protoimpl.X.CompressGZIP(file_audit_v1_event_proto_rawDescData)
})
return file_audit_v1_event_proto_rawDescData
}
var file_audit_v1_event_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_audit_v1_event_proto_goTypes = []interface{}{
(*ProtobufMessage)(nil), // 0: audit.v1.ProtobufMessage
}
var file_audit_v1_event_proto_depIdxs = []int32{
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_audit_v1_event_proto_init() }
func file_audit_v1_event_proto_init() {
if File_audit_v1_event_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_audit_v1_event_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ProtobufMessage); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_audit_v1_event_proto_rawDesc,
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_audit_v1_event_proto_goTypes,
DependencyIndexes: file_audit_v1_event_proto_depIdxs,
MessageInfos: file_audit_v1_event_proto_msgTypes,
}.Build()
File_audit_v1_event_proto = out.File
file_audit_v1_event_proto_rawDesc = nil
file_audit_v1_event_proto_goTypes = nil
file_audit_v1_event_proto_depIdxs = nil
}

View file

@ -72,164 +72,6 @@ func (Visibility) EnumDescriptor() ([]byte, []int) {
return file_audit_v1_routable_event_proto_rawDescGZIP(), []int{0}
}
type ObjectName int32
const (
ObjectName_OBJECT_NAME_UNSPECIFIED ObjectName = 0
// If the action happens on system level and doesn't relate to a known ObjectType.
ObjectName_OBJECT_NAME_SYSTEM ObjectName = 1
)
// Enum value maps for ObjectName.
var (
ObjectName_name = map[int32]string{
0: "OBJECT_NAME_UNSPECIFIED",
1: "OBJECT_NAME_SYSTEM",
}
ObjectName_value = map[string]int32{
"OBJECT_NAME_UNSPECIFIED": 0,
"OBJECT_NAME_SYSTEM": 1,
}
)
func (x ObjectName) Enum() *ObjectName {
p := new(ObjectName)
*p = x
return p
}
func (x ObjectName) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ObjectName) Descriptor() protoreflect.EnumDescriptor {
return file_audit_v1_routable_event_proto_enumTypes[1].Descriptor()
}
func (ObjectName) Type() protoreflect.EnumType {
return &file_audit_v1_routable_event_proto_enumTypes[1]
}
func (x ObjectName) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ObjectName.Descriptor instead.
func (ObjectName) EnumDescriptor() ([]byte, []int) {
return file_audit_v1_routable_event_proto_rawDescGZIP(), []int{1}
}
// The type of the object the audit event refers to.
// Relevant for type-detection and lookups in the routing.
type ObjectType int32
const (
ObjectType_OBJECT_TYPE_UNSPECIFIED ObjectType = 0
ObjectType_OBJECT_TYPE_ORGANIZATION ObjectType = 1
ObjectType_OBJECT_TYPE_FOLDER ObjectType = 2
ObjectType_OBJECT_TYPE_PROJECT ObjectType = 3
)
// Enum value maps for ObjectType.
var (
ObjectType_name = map[int32]string{
0: "OBJECT_TYPE_UNSPECIFIED",
1: "OBJECT_TYPE_ORGANIZATION",
2: "OBJECT_TYPE_FOLDER",
3: "OBJECT_TYPE_PROJECT",
}
ObjectType_value = map[string]int32{
"OBJECT_TYPE_UNSPECIFIED": 0,
"OBJECT_TYPE_ORGANIZATION": 1,
"OBJECT_TYPE_FOLDER": 2,
"OBJECT_TYPE_PROJECT": 3,
}
)
func (x ObjectType) Enum() *ObjectType {
p := new(ObjectType)
*p = x
return p
}
func (x ObjectType) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ObjectType) Descriptor() protoreflect.EnumDescriptor {
return file_audit_v1_routable_event_proto_enumTypes[2].Descriptor()
}
func (ObjectType) Type() protoreflect.EnumType {
return &file_audit_v1_routable_event_proto_enumTypes[2]
}
func (x ObjectType) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ObjectType.Descriptor instead.
func (ObjectType) EnumDescriptor() ([]byte, []int) {
return file_audit_v1_routable_event_proto_rawDescGZIP(), []int{2}
}
type ObjectIdentifier struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Identifier of the respective entity (e.g. Identifier of an organization)
Identifier string `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"`
// Type of the respective entity relevant for routing
Type ObjectType `protobuf:"varint,2,opt,name=type,proto3,enum=audit.v1.ObjectType" json:"type,omitempty"`
}
func (x *ObjectIdentifier) Reset() {
*x = ObjectIdentifier{}
if protoimpl.UnsafeEnabled {
mi := &file_audit_v1_routable_event_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ObjectIdentifier) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ObjectIdentifier) ProtoMessage() {}
func (x *ObjectIdentifier) ProtoReflect() protoreflect.Message {
mi := &file_audit_v1_routable_event_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ObjectIdentifier.ProtoReflect.Descriptor instead.
func (*ObjectIdentifier) Descriptor() ([]byte, []int) {
return file_audit_v1_routable_event_proto_rawDescGZIP(), []int{0}
}
func (x *ObjectIdentifier) GetIdentifier() string {
if x != nil {
return x.Identifier
}
return ""
}
func (x *ObjectIdentifier) GetType() ObjectType {
if x != nil {
return x.Type
}
return ObjectType_OBJECT_TYPE_UNSPECIFIED
}
type EncryptedData struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -248,7 +90,7 @@ type EncryptedData struct {
func (x *EncryptedData) Reset() {
*x = EncryptedData{}
if protoimpl.UnsafeEnabled {
mi := &file_audit_v1_routable_event_proto_msgTypes[1]
mi := &file_audit_v1_routable_event_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -261,7 +103,7 @@ func (x *EncryptedData) String() string {
func (*EncryptedData) ProtoMessage() {}
func (x *EncryptedData) ProtoReflect() protoreflect.Message {
mi := &file_audit_v1_routable_event_proto_msgTypes[1]
mi := &file_audit_v1_routable_event_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -274,7 +116,7 @@ func (x *EncryptedData) ProtoReflect() protoreflect.Message {
// Deprecated: Use EncryptedData.ProtoReflect.Descriptor instead.
func (*EncryptedData) Descriptor() ([]byte, []int) {
return file_audit_v1_routable_event_proto_rawDescGZIP(), []int{1}
return file_audit_v1_routable_event_proto_rawDescGZIP(), []int{0}
}
func (x *EncryptedData) GetData() []byte {
@ -319,7 +161,7 @@ type UnencryptedData struct {
func (x *UnencryptedData) Reset() {
*x = UnencryptedData{}
if protoimpl.UnsafeEnabled {
mi := &file_audit_v1_routable_event_proto_msgTypes[2]
mi := &file_audit_v1_routable_event_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -332,7 +174,7 @@ func (x *UnencryptedData) String() string {
func (*UnencryptedData) ProtoMessage() {}
func (x *UnencryptedData) ProtoReflect() protoreflect.Message {
mi := &file_audit_v1_routable_event_proto_msgTypes[2]
mi := &file_audit_v1_routable_event_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -345,7 +187,7 @@ func (x *UnencryptedData) ProtoReflect() protoreflect.Message {
// Deprecated: Use UnencryptedData.ProtoReflect.Descriptor instead.
func (*UnencryptedData) Descriptor() ([]byte, []int) {
return file_audit_v1_routable_event_proto_rawDescGZIP(), []int{2}
return file_audit_v1_routable_event_proto_rawDescGZIP(), []int{1}
}
func (x *UnencryptedData) GetData() []byte {
@ -391,7 +233,7 @@ type RoutableAuditEvent struct {
func (x *RoutableAuditEvent) Reset() {
*x = RoutableAuditEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_audit_v1_routable_event_proto_msgTypes[3]
mi := &file_audit_v1_routable_event_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -404,7 +246,7 @@ func (x *RoutableAuditEvent) String() string {
func (*RoutableAuditEvent) ProtoMessage() {}
func (x *RoutableAuditEvent) ProtoReflect() protoreflect.Message {
mi := &file_audit_v1_routable_event_proto_msgTypes[3]
mi := &file_audit_v1_routable_event_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -417,7 +259,7 @@ func (x *RoutableAuditEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use RoutableAuditEvent.ProtoReflect.Descriptor instead.
func (*RoutableAuditEvent) Descriptor() ([]byte, []int) {
return file_audit_v1_routable_event_proto_rawDescGZIP(), []int{3}
return file_audit_v1_routable_event_proto_rawDescGZIP(), []int{2}
}
func (x *RoutableAuditEvent) GetEventName() string {
@ -518,88 +360,70 @@ var file_audit_v1_routable_event_proto_rawDesc = []byte{
0x62, 0x6c, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
0x08, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76,
0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x76, 0x0a, 0x10, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x0a, 0x69, 0x64,
0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b,
0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0a, 0x69, 0x64, 0x65,
0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31,
0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08,
0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xc5,
0x01, 0x0a, 0x0d, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61,
0x12, 0x1e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0a,
0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x7a, 0x02, 0x10, 0x01, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
0x12, 0x2f, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x74, 0x79, 0x70,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x72,
0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x54, 0x79, 0x70,
0x65, 0x12, 0x39, 0x0a, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70,
0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba,
0x48, 0x07, 0xc8, 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79,
0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x28, 0x0a, 0x0b,
0x6b, 0x65, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
0x05, 0x42, 0x07, 0xba, 0x48, 0x04, 0x1a, 0x02, 0x28, 0x01, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x56,
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x0f, 0x55, 0x6e, 0x65, 0x6e, 0x63, 0x72,
0x79, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x04, 0x64, 0x61, 0x74,
0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x7a,
0x02, 0x10, 0x01, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x0d, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x54, 0x79, 0x70, 0x65, 0x22, 0xcb, 0x03, 0x0a, 0x12, 0x52,
0x6f, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x75, 0x64, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e,
0x74, 0x12, 0x38, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x19, 0xba, 0x48, 0x16, 0xc8, 0x01, 0x01, 0x72, 0x11, 0x32,
0x0f, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x2b, 0x5f, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x2b, 0x24,
0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0a, 0x76,
0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
0x14, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62,
0x69, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02,
0x10, 0x01, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x37,
0x0a, 0x0b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4f,
0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x11, 0x6f, 0x62, 0x6a, 0x65, 0x63,
0x74, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62,
0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00,
0x52, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
0x65, 0x72, 0x12, 0x46, 0x0a, 0x10, 0x75, 0x6e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65,
0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61,
0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70,
0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x0f, 0x75, 0x6e, 0x65, 0x6e, 0x63,
0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x0e, 0x65, 0x6e,
0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e,
0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x0d, 0x65,
0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x42, 0x1b, 0x0a, 0x12,
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
0x63, 0x65, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x42, 0x0d, 0x0a, 0x04, 0x64, 0x61, 0x74,
0x61, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x2a, 0x57, 0x0a, 0x0a, 0x56, 0x69, 0x73, 0x69,
0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49,
0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59,
0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x56, 0x49, 0x53,
0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10,
0x02, 0x2a, 0x41, 0x0a, 0x0a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12,
0x1b, 0x0a, 0x17, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x55,
0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12,
0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x53, 0x59, 0x53, 0x54,
0x45, 0x4d, 0x10, 0x01, 0x2a, 0x78, 0x0a, 0x0a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79,
0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
0x1c, 0x0a, 0x18, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f,
0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x16, 0x0a,
0x12, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4f, 0x4c,
0x44, 0x45, 0x52, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f,
0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x03, 0x42, 0x84,
0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x63, 0x68, 0x77, 0x61, 0x72, 0x7a, 0x2e, 0x73,
0x74, 0x61, 0x63, 0x6b, 0x69, 0x74, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x42,
0x12, 0x52, 0x6f, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72,
0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x0f, 0x2e, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x3b, 0x61,
0x75, 0x64, 0x69, 0x74, 0x56, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x08, 0x41,
0x75, 0x64, 0x69, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c,
0x56, 0x31, 0xe2, 0x02, 0x14, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50,
0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x41, 0x75, 0x64, 0x69,
0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2f, 0x76, 0x31,
0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc5, 0x01,
0x0a, 0x0d, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12,
0x1e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0a, 0xba,
0x48, 0x07, 0xc8, 0x01, 0x01, 0x7a, 0x02, 0x10, 0x01, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12,
0x2f, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x74, 0x79, 0x70, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x72, 0x02,
0x10, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x54, 0x79, 0x70, 0x65,
0x12, 0x39, 0x0a, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61,
0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48,
0x07, 0xc8, 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70,
0x74, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x28, 0x0a, 0x0b, 0x6b,
0x65, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05,
0x42, 0x07, 0xba, 0x48, 0x04, 0x1a, 0x02, 0x28, 0x01, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x56, 0x65,
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x0f, 0x55, 0x6e, 0x65, 0x6e, 0x63, 0x72, 0x79,
0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x7a, 0x02,
0x10, 0x01, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42,
0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x54, 0x79, 0x70, 0x65, 0x22, 0xcb, 0x03, 0x0a, 0x12, 0x52, 0x6f,
0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x75, 0x64, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74,
0x12, 0x38, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x42, 0x19, 0xba, 0x48, 0x16, 0xc8, 0x01, 0x01, 0x72, 0x11, 0x32, 0x0f,
0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x2b, 0x5f, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x2b, 0x24, 0x52,
0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0a, 0x76, 0x69,
0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14,
0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69,
0x6c, 0x69, 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10,
0x01, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x37, 0x0a,
0x0b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62,
0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x62, 0x6a, 0x65,
0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x11, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52,
0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
0x72, 0x12, 0x46, 0x0a, 0x10, 0x75, 0x6e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64,
0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x75,
0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74,
0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x0f, 0x75, 0x6e, 0x65, 0x6e, 0x63, 0x72,
0x79, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x0e, 0x65, 0x6e, 0x63,
0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x63,
0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x0d, 0x65, 0x6e,
0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x42, 0x1b, 0x0a, 0x12, 0x72,
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
0x65, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x42, 0x0d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61,
0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x2a, 0x57, 0x0a, 0x0a, 0x56, 0x69, 0x73, 0x69, 0x62,
0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c,
0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10,
0x00, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f,
0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x56, 0x49, 0x53, 0x49,
0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x02,
0x42, 0x84, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x63, 0x68, 0x77, 0x61, 0x72, 0x7a,
0x2e, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x69, 0x74, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76,
0x31, 0x42, 0x12, 0x52, 0x6f, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74,
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x0f, 0x2e, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x74,
0x3b, 0x61, 0x75, 0x64, 0x69, 0x74, 0x56, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02,
0x08, 0x41, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x41, 0x75, 0x64, 0x69,
0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x14, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0x5c,
0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x41, 0x75,
0x64, 0x69, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -614,29 +438,27 @@ func file_audit_v1_routable_event_proto_rawDescGZIP() []byte {
return file_audit_v1_routable_event_proto_rawDescData
}
var file_audit_v1_routable_event_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
var file_audit_v1_routable_event_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_audit_v1_routable_event_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_audit_v1_routable_event_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_audit_v1_routable_event_proto_goTypes = []interface{}{
(Visibility)(0), // 0: audit.v1.Visibility
(ObjectName)(0), // 1: audit.v1.ObjectName
(ObjectType)(0), // 2: audit.v1.ObjectType
(*ObjectIdentifier)(nil), // 3: audit.v1.ObjectIdentifier
(*EncryptedData)(nil), // 4: audit.v1.EncryptedData
(*UnencryptedData)(nil), // 5: audit.v1.UnencryptedData
(*RoutableAuditEvent)(nil), // 6: audit.v1.RoutableAuditEvent
(*EncryptedData)(nil), // 1: audit.v1.EncryptedData
(*UnencryptedData)(nil), // 2: audit.v1.UnencryptedData
(*RoutableAuditEvent)(nil), // 3: audit.v1.RoutableAuditEvent
(ObjectName)(0), // 4: audit.v1.ObjectName
(*ObjectIdentifier)(nil), // 5: audit.v1.ObjectIdentifier
}
var file_audit_v1_routable_event_proto_depIdxs = []int32{
2, // 0: audit.v1.ObjectIdentifier.type:type_name -> audit.v1.ObjectType
0, // 1: audit.v1.RoutableAuditEvent.visibility:type_name -> audit.v1.Visibility
1, // 2: audit.v1.RoutableAuditEvent.object_name:type_name -> audit.v1.ObjectName
3, // 3: audit.v1.RoutableAuditEvent.object_identifier:type_name -> audit.v1.ObjectIdentifier
5, // 4: audit.v1.RoutableAuditEvent.unencrypted_data:type_name -> audit.v1.UnencryptedData
4, // 5: audit.v1.RoutableAuditEvent.encrypted_data:type_name -> audit.v1.EncryptedData
6, // [6:6] is the sub-list for method output_type
6, // [6:6] is the sub-list for method input_type
6, // [6:6] is the sub-list for extension type_name
6, // [6:6] is the sub-list for extension extendee
0, // [0:6] is the sub-list for field type_name
0, // 0: audit.v1.RoutableAuditEvent.visibility:type_name -> audit.v1.Visibility
4, // 1: audit.v1.RoutableAuditEvent.object_name:type_name -> audit.v1.ObjectName
5, // 2: audit.v1.RoutableAuditEvent.object_identifier:type_name -> audit.v1.ObjectIdentifier
2, // 3: audit.v1.RoutableAuditEvent.unencrypted_data:type_name -> audit.v1.UnencryptedData
1, // 4: audit.v1.RoutableAuditEvent.encrypted_data:type_name -> audit.v1.EncryptedData
5, // [5:5] is the sub-list for method output_type
5, // [5:5] is the sub-list for method input_type
5, // [5:5] is the sub-list for extension type_name
5, // [5:5] is the sub-list for extension extendee
0, // [0:5] is the sub-list for field type_name
}
func init() { file_audit_v1_routable_event_proto_init() }
@ -644,20 +466,9 @@ func file_audit_v1_routable_event_proto_init() {
if File_audit_v1_routable_event_proto != nil {
return
}
file_audit_v1_common_proto_init()
if !protoimpl.UnsafeEnabled {
file_audit_v1_routable_event_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ObjectIdentifier); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_audit_v1_routable_event_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*EncryptedData); i {
case 0:
return &v.state
@ -669,7 +480,7 @@ func file_audit_v1_routable_event_proto_init() {
return nil
}
}
file_audit_v1_routable_event_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
file_audit_v1_routable_event_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UnencryptedData); i {
case 0:
return &v.state
@ -681,7 +492,7 @@ func file_audit_v1_routable_event_proto_init() {
return nil
}
}
file_audit_v1_routable_event_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
file_audit_v1_routable_event_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RoutableAuditEvent); i {
case 0:
return &v.state
@ -694,7 +505,7 @@ func file_audit_v1_routable_event_proto_init() {
}
}
}
file_audit_v1_routable_event_proto_msgTypes[3].OneofWrappers = []interface{}{
file_audit_v1_routable_event_proto_msgTypes[2].OneofWrappers = []interface{}{
(*RoutableAuditEvent_ObjectName)(nil),
(*RoutableAuditEvent_ObjectIdentifier)(nil),
(*RoutableAuditEvent_UnencryptedData)(nil),
@ -705,8 +516,8 @@ func file_audit_v1_routable_event_proto_init() {
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_audit_v1_routable_event_proto_rawDesc,
NumEnums: 3,
NumMessages: 4,
NumEnums: 1,
NumMessages: 3,
NumExtensions: 0,
NumServices: 0,
},

View file

@ -35,110 +35,6 @@ var (
_ = sort.Sort
)
// Validate checks the field values on ObjectIdentifier with the rules defined
// in the proto definition for this message. If any rules are violated, the
// first error encountered is returned, or nil if there are no violations.
func (m *ObjectIdentifier) Validate() error {
return m.validate(false)
}
// ValidateAll checks the field values on ObjectIdentifier with the rules
// defined in the proto definition for this message. If any rules are
// violated, the result is a list of violation errors wrapped in
// ObjectIdentifierMultiError, or nil if none found.
func (m *ObjectIdentifier) ValidateAll() error {
return m.validate(true)
}
func (m *ObjectIdentifier) validate(all bool) error {
if m == nil {
return nil
}
var errors []error
// no validation rules for Identifier
// no validation rules for Type
if len(errors) > 0 {
return ObjectIdentifierMultiError(errors)
}
return nil
}
// ObjectIdentifierMultiError is an error wrapping multiple validation errors
// returned by ObjectIdentifier.ValidateAll() if the designated constraints
// aren't met.
type ObjectIdentifierMultiError []error
// Error returns a concatenation of all the error messages it wraps.
func (m ObjectIdentifierMultiError) Error() string {
var msgs []string
for _, err := range m {
msgs = append(msgs, err.Error())
}
return strings.Join(msgs, "; ")
}
// AllErrors returns a list of validation violation errors.
func (m ObjectIdentifierMultiError) AllErrors() []error { return m }
// ObjectIdentifierValidationError is the validation error returned by
// ObjectIdentifier.Validate if the designated constraints aren't met.
type ObjectIdentifierValidationError struct {
field string
reason string
cause error
key bool
}
// Field function returns field value.
func (e ObjectIdentifierValidationError) Field() string { return e.field }
// Reason function returns reason value.
func (e ObjectIdentifierValidationError) Reason() string { return e.reason }
// Cause function returns cause value.
func (e ObjectIdentifierValidationError) Cause() error { return e.cause }
// Key function returns key value.
func (e ObjectIdentifierValidationError) Key() bool { return e.key }
// ErrorName returns error name.
func (e ObjectIdentifierValidationError) ErrorName() string { return "ObjectIdentifierValidationError" }
// Error satisfies the builtin error interface
func (e ObjectIdentifierValidationError) Error() string {
cause := ""
if e.cause != nil {
cause = fmt.Sprintf(" | caused by: %v", e.cause)
}
key := ""
if e.key {
key = "key for "
}
return fmt.Sprintf(
"invalid %sObjectIdentifier.%s: %s%s",
key,
e.field,
e.reason,
cause)
}
var _ error = ObjectIdentifierValidationError{}
var _ interface {
Field() string
Reason() string
Key() bool
Cause() error
ErrorName() string
} = ObjectIdentifierValidationError{}
// Validate checks the field values on EncryptedData with the rules defined in
// the proto definition for this message. If any rules are violated, the first
// error encountered is returned, or nil if there are no violations.

View file

@ -5,6 +5,8 @@ import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";
import "audit/v1/common.proto";
package audit.v1;
option go_package = "./audit;auditV1";
@ -21,6 +23,11 @@ enum EventTrigger {
EVENT_TRIGGER_REQUEST = 3;
}
enum Region {
REGION_UNSPECIFIED = 0;
REGION_EU01 = 1;
}
message Principal {
// A UUID or another kind of identifier
string id = 1 [(buf.validate.field).required = true];
@ -51,37 +58,53 @@ message AuditEvent {
expression: "this.event_trigger == 3 && has(this.request) || this.event_trigger != 3"
};
// Name of the source system
string event_source = 1 [(buf.validate.field).required = true, (buf.validate.field).string.min_len = 1];
Region region = 2 [(buf.validate.field).required = true];
// Sequence number of event sent by the service to identify missing events.
google.protobuf.Int64Value sequence_number = 1 [(buf.validate.field).required = true, (buf.validate.field).int64.gte = -1];
google.protobuf.Int64Value sequence_number = 3 [(buf.validate.field).required = true, (buf.validate.field).int64.gte = -1];
// Functional event name with pattern <TYPE>_<ACTION>, e.g. ORGANIZATION_CREATED
// Important for filtering and translation / verbalization of event types
// in the UI or data sinks.
string event_name = 2 [(buf.validate.field).required = true, (buf.validate.field).string.pattern = "^[A-Z]+_[A-Z]+$"];
string event_name = 4 [(buf.validate.field).required = true, (buf.validate.field).string.pattern = "^[A-Z]+_[A-Z]+$"];
// The time when the event happened. Must not be a value in the future.
google.protobuf.Timestamp event_time_stamp = 3 [(buf.validate.field).required = true, (buf.validate.field).timestamp.lt_now = true];
google.protobuf.Timestamp event_time_stamp = 5 [(buf.validate.field).required = true, (buf.validate.field).timestamp.lt_now = true];
EventTrigger event_trigger = 4 [(buf.validate.field).required = true, (buf.validate.field).enum.defined_only = true];
EventTrigger event_trigger = 6 [(buf.validate.field).required = true, (buf.validate.field).enum.defined_only = true];
// Request details - mandatory if event_trigger is set to "EVENT_REQUEST"
optional RequestDetails request = 5;
optional RequestDetails request = 7;
Principal initiator = 6 [(buf.validate.field).required = true];
Principal initiator = 8 [(buf.validate.field).required = true];
// List of service account delegation principals.
// -> Chain from service account to the actual user who initiated the action.
repeated Principal principals = 7;
repeated Principal principals = 9;
optional string resource_id = 8 [(buf.validate.field).string.min_len = 1, (buf.validate.field).string.max_len = 255];
// Identifier the audit log event refers to
oneof resource_container_reference {
option (buf.validate.oneof).required = true;
// If it is a technical event not related to an organization, folder or project
// Will NOT be routed to the end-user, only for internal analysis ->
// Clarify what do in the router
ObjectName object_name = 10;
ObjectIdentifier object_identifier = 11;
}
optional string resource_name = 9 [(buf.validate.field).string.min_len = 1, (buf.validate.field).string.max_len = 255];
// The identifier of the actual resource (e.g. a VM)
optional string resource_id = 12 [(buf.validate.field).string.min_len = 1, (buf.validate.field).string.max_len = 255];
optional string correlation_id = 10 [(buf.validate.field).string.min_len = 1, (buf.validate.field).string.max_len = 255];
optional string resource_name = 13 [(buf.validate.field).string.min_len = 1, (buf.validate.field).string.max_len = 255];
optional string correlation_id = 14 [(buf.validate.field).string.min_len = 1, (buf.validate.field).string.max_len = 255];
// Result of the operation to publish with the event
optional google.protobuf.Struct result = 11;
optional google.protobuf.Struct result = 15;
// Additional information to publish with the event
optional google.protobuf.Struct details = 12;
optional google.protobuf.Struct details = 16;
}

View file

@ -0,0 +1,32 @@
syntax = "proto3";
import "buf/validate/validate.proto";
package audit.v1;
option go_package = "./audit;auditV1";
option java_multiple_files = true;
option java_package = "com.schwarz.stackit.audit.v1";
enum ObjectName {
OBJECT_NAME_UNSPECIFIED = 0;
// If the action happens on system level and doesn't relate to a known ObjectType.
OBJECT_NAME_SYSTEM = 1;
}
// The type of the object the audit event refers to.
// Relevant for type-detection and lookups in the routing.
enum ObjectType {
OBJECT_TYPE_UNSPECIFIED = 0;
OBJECT_TYPE_ORGANIZATION = 1;
OBJECT_TYPE_FOLDER = 2;
OBJECT_TYPE_PROJECT = 3;
}
message ObjectIdentifier {
// Identifier of the respective entity (e.g. Identifier of an organization)
string identifier = 1 [(buf.validate.field).required = true, (buf.validate.field).string.uuid = true];
// Type of the respective entity relevant for routing
ObjectType type = 2 [(buf.validate.field).required = true, (buf.validate.field).enum.defined_only = true];
}

View file

@ -1,17 +0,0 @@
syntax = "proto3";
import "buf/validate/validate.proto";
package audit.v1;
option go_package = "./audit;auditV1";
option java_multiple_files = true;
option java_package = "com.schwarz.stackit.audit.v1";
message ProtobufMessage {
// Serialized event
bytes value = 1 [(buf.validate.field).required = true, (buf.validate.field).bytes.min_len = 1];
// Name of the protobuf type
string protobuf_type = 2 [(buf.validate.field).required = true, (buf.validate.field).string.min_len = 1];
}

View file

@ -2,6 +2,8 @@ syntax = "proto3";
import "buf/validate/validate.proto";
import "audit/v1/common.proto";
package audit.v1;
option go_package = "./audit;auditV1";
@ -16,29 +18,6 @@ enum Visibility {
VISIBILITY_PRIVATE = 2;
}
enum ObjectName {
OBJECT_NAME_UNSPECIFIED = 0;
// If the action happens on system level and doesn't relate to a known ObjectType.
OBJECT_NAME_SYSTEM = 1;
}
// The type of the object the audit event refers to.
// Relevant for type-detection and lookups in the routing.
enum ObjectType {
OBJECT_TYPE_UNSPECIFIED = 0;
OBJECT_TYPE_ORGANIZATION = 1;
OBJECT_TYPE_FOLDER = 2;
OBJECT_TYPE_PROJECT = 3;
}
message ObjectIdentifier {
// Identifier of the respective entity (e.g. Identifier of an organization)
string identifier = 1 [(buf.validate.field).required = true, (buf.validate.field).string.uuid = true];
// Type of the respective entity relevant for routing
ObjectType type = 2 [(buf.validate.field).required = true, (buf.validate.field).enum.defined_only = true];
}
message EncryptedData {
// Encrypted serialized protobuf content (the actual audit event)
bytes data = 1 [(buf.validate.field).required = true, (buf.validate.field).bytes.min_len = 1];