mirror of
https://dev.azure.com/schwarzit/schwarzit.stackit-public/_git/audit-go
synced 2026-02-15 12:21:44 +00:00
Add sequence number
This commit is contained in:
parent
85f07ec14a
commit
6968ddb5c9
5 changed files with 254 additions and 108 deletions
|
|
@ -4,7 +4,10 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
|
"google.golang.org/protobuf/types/known/wrapperspb"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"dev.azure.com/schwarzit/schwarzit.stackit-core-platform/common-audit.git/audit/messaging"
|
"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"
|
auditV1 "dev.azure.com/schwarzit/schwarzit.stackit-core-platform/common-audit.git/gen/go/audit/v1"
|
||||||
|
|
@ -60,6 +63,91 @@ func Test_ValidateAndSerializePartially_EventNil(t *testing.T) {
|
||||||
assert.ErrorIs(t, err, ErrEventNil)
|
assert.ErrorIs(t, err, ErrEventNil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_ValidateAndSerializePartially_AuditEventSequenceNumber(t *testing.T) {
|
||||||
|
validator := NewValidator(t)
|
||||||
|
|
||||||
|
t.Run("Sequence number too low", func(t *testing.T) {
|
||||||
|
event, routingIdentifier, objectIdentifier := NewOrganizationAuditEvent(nil)
|
||||||
|
event.SequenceNumber = wrapperspb.Int64(-2)
|
||||||
|
|
||||||
|
_, err := validateAndSerializePartially(
|
||||||
|
&validator, event, auditV1.Visibility_VISIBILITY_PUBLIC, routingIdentifier, objectIdentifier)
|
||||||
|
|
||||||
|
assert.EqualError(t, err, "validation error:\n - sequence_number: value must be greater than or equal to -1 [int64.gte]")
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Sequence number is minimum", func(t *testing.T) {
|
||||||
|
event, routingIdentifier, objectIdentifier := NewOrganizationAuditEvent(nil)
|
||||||
|
event.SequenceNumber = wrapperspb.Int64(-1)
|
||||||
|
|
||||||
|
e, err := validateAndSerializePartially(
|
||||||
|
&validator, event, auditV1.Visibility_VISIBILITY_PUBLIC, routingIdentifier, objectIdentifier)
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
validateSequenceNumber(t, e, -1)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Sequence number is default", func(t *testing.T) {
|
||||||
|
event, routingIdentifier, objectIdentifier := NewOrganizationAuditEvent(nil)
|
||||||
|
event.SequenceNumber = wrapperspb.Int64(0)
|
||||||
|
|
||||||
|
e, err := validateAndSerializePartially(
|
||||||
|
&validator, event, auditV1.Visibility_VISIBILITY_PUBLIC, routingIdentifier, objectIdentifier)
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
validateSequenceNumber(t, e, 0)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Sequence number is greater than default", func(t *testing.T) {
|
||||||
|
event, routingIdentifier, objectIdentifier := NewOrganizationAuditEvent(nil)
|
||||||
|
event.SequenceNumber = wrapperspb.Int64(1)
|
||||||
|
|
||||||
|
e, err := validateAndSerializePartially(
|
||||||
|
&validator, event, auditV1.Visibility_VISIBILITY_PUBLIC, routingIdentifier, objectIdentifier)
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
validateSequenceNumber(t, e, 1)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Sequence number not set", func(t *testing.T) {
|
||||||
|
event := &auditV1.AuditEvent{
|
||||||
|
EventName: "ORGANIZATION_CREATED",
|
||||||
|
EventTimeStamp: timestamppb.New(time.Now()),
|
||||||
|
EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT,
|
||||||
|
Initiator: &auditV1.Principal{
|
||||||
|
Id: uuid.NewString(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
identifier := uuid.New()
|
||||||
|
routingIdentifier := &RoutingIdentifier{
|
||||||
|
Identifier: identifier,
|
||||||
|
Type: RoutingIdentifierTypeOrganization,
|
||||||
|
}
|
||||||
|
|
||||||
|
objectIdentifier := &auditV1.ObjectIdentifier{
|
||||||
|
Identifier: identifier.String(),
|
||||||
|
Type: auditV1.ObjectType_OBJECT_TYPE_ORGANIZATION,
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := validateAndSerializePartially(
|
||||||
|
&validator, event, auditV1.Visibility_VISIBILITY_PUBLIC, routingIdentifier, objectIdentifier)
|
||||||
|
|
||||||
|
assert.EqualError(t, err, "validation error:\n - sequence_number: value is required [required]")
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
func validateSequenceNumber(t *testing.T, event *auditV1.RoutableAuditEvent, expectedNumber int64) {
|
||||||
|
switch data := event.GetData().(type) {
|
||||||
|
case *auditV1.RoutableAuditEvent_UnencryptedData:
|
||||||
|
var auditEvent auditV1.AuditEvent
|
||||||
|
assert.NoError(t, proto.Unmarshal(data.UnencryptedData.Data, &auditEvent))
|
||||||
|
assert.Equal(t, expectedNumber, auditEvent.SequenceNumber.Value)
|
||||||
|
default:
|
||||||
|
assert.Fail(t, "expected unencrypted data")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func Test_ValidateAndSerializePartially_AuditEventValidationFailed(t *testing.T) {
|
func Test_ValidateAndSerializePartially_AuditEventValidationFailed(t *testing.T) {
|
||||||
validator := NewValidator(t)
|
validator := NewValidator(t)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"google.golang.org/protobuf/types/known/wrapperspb"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
auditV1 "dev.azure.com/schwarzit/schwarzit.stackit-core-platform/common-audit.git/gen/go/audit/v1"
|
auditV1 "dev.azure.com/schwarzit/schwarzit.stackit-core-platform/common-audit.git/gen/go/audit/v1"
|
||||||
|
|
@ -22,6 +23,7 @@ func NewOrganizationAuditEvent(
|
||||||
) {
|
) {
|
||||||
|
|
||||||
auditEvent := &auditV1.AuditEvent{
|
auditEvent := &auditV1.AuditEvent{
|
||||||
|
SequenceNumber: wrapperspb.Int64(0),
|
||||||
EventName: "ORGANIZATION_CREATED",
|
EventName: "ORGANIZATION_CREATED",
|
||||||
EventTimeStamp: timestamppb.New(time.Now()),
|
EventTimeStamp: timestamppb.New(time.Now()),
|
||||||
EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT,
|
EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT,
|
||||||
|
|
@ -105,6 +107,7 @@ func NewFolderAuditEvent(
|
||||||
) {
|
) {
|
||||||
|
|
||||||
auditEvent := &auditV1.AuditEvent{
|
auditEvent := &auditV1.AuditEvent{
|
||||||
|
SequenceNumber: wrapperspb.Int64(0),
|
||||||
EventName: "FOLDER_CREATED",
|
EventName: "FOLDER_CREATED",
|
||||||
EventTimeStamp: timestamppb.New(time.Now()),
|
EventTimeStamp: timestamppb.New(time.Now()),
|
||||||
EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT,
|
EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT,
|
||||||
|
|
@ -142,6 +145,7 @@ func NewProjectAuditEvent(
|
||||||
) {
|
) {
|
||||||
|
|
||||||
auditEvent := &auditV1.AuditEvent{
|
auditEvent := &auditV1.AuditEvent{
|
||||||
|
SequenceNumber: wrapperspb.Int64(0),
|
||||||
EventName: "PROJECT_CREATED",
|
EventName: "PROJECT_CREATED",
|
||||||
EventTimeStamp: timestamppb.New(time.Now()),
|
EventTimeStamp: timestamppb.New(time.Now()),
|
||||||
EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT,
|
EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT,
|
||||||
|
|
@ -172,6 +176,7 @@ func NewSystemAuditEvent(
|
||||||
customization *func(*auditV1.AuditEvent)) *auditV1.AuditEvent {
|
customization *func(*auditV1.AuditEvent)) *auditV1.AuditEvent {
|
||||||
|
|
||||||
auditEvent := &auditV1.AuditEvent{
|
auditEvent := &auditV1.AuditEvent{
|
||||||
|
SequenceNumber: wrapperspb.Int64(0),
|
||||||
EventName: "SYSTEM_CHANGED",
|
EventName: "SYSTEM_CHANGED",
|
||||||
EventTimeStamp: timestamppb.New(time.Now()),
|
EventTimeStamp: timestamppb.New(time.Now()),
|
||||||
EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT,
|
EventTrigger: auditV1.EventTrigger_EVENT_TRIGGER_EVENT,
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import (
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
structpb "google.golang.org/protobuf/types/known/structpb"
|
structpb "google.golang.org/protobuf/types/known/structpb"
|
||||||
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
||||||
|
wrapperspb "google.golang.org/protobuf/types/known/wrapperspb"
|
||||||
reflect "reflect"
|
reflect "reflect"
|
||||||
sync "sync"
|
sync "sync"
|
||||||
)
|
)
|
||||||
|
|
@ -283,26 +284,28 @@ type AuditEvent struct {
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
// 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"`
|
||||||
// Functional event name with pattern <TYPE>_<ACTION>, e.g. ORGANIZATION_CREATED
|
// Functional event name with pattern <TYPE>_<ACTION>, e.g. ORGANIZATION_CREATED
|
||||||
// Important for filtering and translation / verbalization of event types
|
// Important for filtering and translation / verbalization of event types
|
||||||
// in the UI or data sinks.
|
// in the UI or data sinks.
|
||||||
EventName string `protobuf:"bytes,1,opt,name=event_name,json=eventName,proto3" json:"event_name,omitempty"`
|
EventName string `protobuf:"bytes,2,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.
|
// The time when the event happened. Must not be a value in the future.
|
||||||
EventTimeStamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=event_time_stamp,json=eventTimeStamp,proto3" json:"event_time_stamp,omitempty"`
|
EventTimeStamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=event_time_stamp,json=eventTimeStamp,proto3" json:"event_time_stamp,omitempty"`
|
||||||
EventTrigger EventTrigger `protobuf:"varint,3,opt,name=event_trigger,json=eventTrigger,proto3,enum=audit.v1.EventTrigger" json:"event_trigger,omitempty"`
|
EventTrigger EventTrigger `protobuf:"varint,4,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 details - mandatory if event_trigger is set to "EVENT_REQUEST"
|
||||||
Request *RequestDetails `protobuf:"bytes,4,opt,name=request,proto3,oneof" json:"request,omitempty"`
|
Request *RequestDetails `protobuf:"bytes,5,opt,name=request,proto3,oneof" json:"request,omitempty"`
|
||||||
Initiator *Principal `protobuf:"bytes,5,opt,name=initiator,proto3" json:"initiator,omitempty"`
|
Initiator *Principal `protobuf:"bytes,6,opt,name=initiator,proto3" json:"initiator,omitempty"`
|
||||||
// List of service account delegation principals.
|
// List of service account delegation principals.
|
||||||
// -> Chain from service account to the actual user who initiated the action.
|
// -> Chain from service account to the actual user who initiated the action.
|
||||||
Principals []*Principal `protobuf:"bytes,6,rep,name=principals,proto3" json:"principals,omitempty"`
|
Principals []*Principal `protobuf:"bytes,7,rep,name=principals,proto3" json:"principals,omitempty"`
|
||||||
ResourceId *string `protobuf:"bytes,7,opt,name=resource_id,json=resourceId,proto3,oneof" json:"resource_id,omitempty"`
|
ResourceId *string `protobuf:"bytes,8,opt,name=resource_id,json=resourceId,proto3,oneof" json:"resource_id,omitempty"`
|
||||||
ResourceName *string `protobuf:"bytes,8,opt,name=resource_name,json=resourceName,proto3,oneof" json:"resource_name,omitempty"`
|
ResourceName *string `protobuf:"bytes,9,opt,name=resource_name,json=resourceName,proto3,oneof" json:"resource_name,omitempty"`
|
||||||
CorrelationId *string `protobuf:"bytes,9,opt,name=correlation_id,json=correlationId,proto3,oneof" json:"correlation_id,omitempty"`
|
CorrelationId *string `protobuf:"bytes,10,opt,name=correlation_id,json=correlationId,proto3,oneof" json:"correlation_id,omitempty"`
|
||||||
// Result of the operation to publish with the event
|
// Result of the operation to publish with the event
|
||||||
Result *structpb.Struct `protobuf:"bytes,10,opt,name=result,proto3,oneof" json:"result,omitempty"`
|
Result *structpb.Struct `protobuf:"bytes,11,opt,name=result,proto3,oneof" json:"result,omitempty"`
|
||||||
// Additional information to publish with the event
|
// Additional information to publish with the event
|
||||||
Details *structpb.Struct `protobuf:"bytes,11,opt,name=details,proto3,oneof" json:"details,omitempty"`
|
Details *structpb.Struct `protobuf:"bytes,12,opt,name=details,proto3,oneof" json:"details,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *AuditEvent) Reset() {
|
func (x *AuditEvent) Reset() {
|
||||||
|
|
@ -337,6 +340,13 @@ func (*AuditEvent) Descriptor() ([]byte, []int) {
|
||||||
return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{3}
|
return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{3}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *AuditEvent) GetSequenceNumber() *wrapperspb.Int64Value {
|
||||||
|
if x != nil {
|
||||||
|
return x.SequenceNumber
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (x *AuditEvent) GetEventName() string {
|
func (x *AuditEvent) GetEventName() string {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.EventName
|
return x.EventName
|
||||||
|
|
@ -425,6 +435,8 @@ var file_audit_v1_audit_event_proto_rawDesc = []byte{
|
||||||
0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
||||||
0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f,
|
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,
|
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,
|
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,
|
0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c,
|
||||||
|
|
@ -458,79 +470,85 @@ var file_audit_v1_audit_event_proto_rawDesc = []byte{
|
||||||
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01,
|
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,
|
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,
|
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, 0xf0, 0x06, 0x0a,
|
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, 0x38, 0x0a, 0x0a, 0x65,
|
0x0a, 0x41, 0x75, 0x64, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x0f, 0x73,
|
||||||
0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
|
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01,
|
||||||
0x19, 0xba, 0x48, 0x16, 0xc8, 0x01, 0x01, 0x72, 0x11, 0x32, 0x0f, 0x5e, 0x5b, 0x41, 0x2d, 0x5a,
|
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
|
||||||
0x5d, 0x2b, 0x5f, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e,
|
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75,
|
||||||
0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74,
|
0x65, 0x42, 0x13, 0xba, 0x48, 0x10, 0xc8, 0x01, 0x01, 0x22, 0x0b, 0x28, 0xff, 0xff, 0xff, 0xff,
|
||||||
0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x52, 0x0e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
|
||||||
0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f,
|
||||||
0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0b, 0xba, 0x48, 0x08,
|
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x19, 0xba, 0x48, 0x16, 0xc8,
|
||||||
0xc8, 0x01, 0x01, 0xb2, 0x01, 0x02, 0x38, 0x01, 0x52, 0x0e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54,
|
0x01, 0x01, 0x72, 0x11, 0x32, 0x0f, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x2b, 0x5f, 0x5b, 0x41,
|
||||||
0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x76, 0x65, 0x6e,
|
0x2d, 0x5a, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65,
|
||||||
0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32,
|
0x12, 0x51, 0x0a, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73,
|
||||||
0x16, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74,
|
0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
|
||||||
0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82,
|
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
|
||||||
0x01, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67,
|
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0xb2, 0x01,
|
||||||
0x65, 0x72, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20,
|
0x02, 0x38, 0x01, 0x52, 0x0e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74,
|
||||||
0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52,
|
0x61, 0x6d, 0x70, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x69,
|
||||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52,
|
0x67, 0x67, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x64,
|
||||||
0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x09, 0x69,
|
0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67,
|
||||||
0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13,
|
0x65, 0x72, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52,
|
||||||
0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69,
|
0x0c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x37, 0x0a,
|
||||||
0x70, 0x61, 0x6c, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x09, 0x69, 0x6e, 0x69,
|
0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18,
|
||||||
0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69,
|
0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||||
0x70, 0x61, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x64,
|
0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75,
|
||||||
0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x52,
|
0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61,
|
||||||
0x0a, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x12, 0x30, 0x0a, 0x0b, 0x72,
|
0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x64, 0x69,
|
||||||
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
|
0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x42, 0x06,
|
||||||
0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x48, 0x01, 0x52, 0x0a,
|
0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f,
|
||||||
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a,
|
0x72, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x18,
|
||||||
0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08,
|
0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01,
|
0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6e,
|
||||||
0x48, 0x02, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65,
|
0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x12, 0x30, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
|
||||||
0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x0e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69,
|
0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07,
|
||||||
0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 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, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x48, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x72, 0x72, 0x65,
|
0x72, 0x63, 0x65, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f,
|
||||||
0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x06, 0x72,
|
0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42,
|
||||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f,
|
0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x48, 0x02, 0x52, 0x0c, 0x72,
|
||||||
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74,
|
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x36,
|
||||||
0x72, 0x75, 0x63, 0x74, 0x48, 0x04, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x88, 0x01,
|
0x0a, 0x0e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
|
||||||
0x01, 0x12, 0x36, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x01,
|
0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18,
|
||||||
0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
0xff, 0x01, 0x48, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f,
|
||||||
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x05, 0x52, 0x07, 0x64,
|
0x6e, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||||
0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x88, 0x01, 0x01, 0x3a, 0x7c, 0xba, 0x48, 0x79, 0x1a, 0x77,
|
0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
|
||||||
0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c,
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48,
|
||||||
0x73, 0x12, 0x1b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69,
|
0x04, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x07,
|
||||||
0x6c, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x1a, 0x47,
|
0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
|
||||||
0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67,
|
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
|
||||||
0x65, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x20, 0x26, 0x26, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74,
|
0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x05, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c,
|
||||||
0x68, 0x69, 0x73, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x29, 0x20, 0x7c, 0x7c, 0x20,
|
0x73, 0x88, 0x01, 0x01, 0x3a, 0x7c, 0xba, 0x48, 0x79, 0x1a, 0x77, 0x0a, 0x0f, 0x72, 0x65, 0x71,
|
||||||
0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67,
|
0x75, 0x65, 0x73, 0x74, 0x2e, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1b, 0x72, 0x65,
|
||||||
0x65, 0x72, 0x20, 0x21, 0x3d, 0x20, 0x33, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x65, 0x71, 0x75,
|
0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6d, 0x75,
|
||||||
0x65, 0x73, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x1a, 0x47, 0x74, 0x68, 0x69, 0x73, 0x2e,
|
||||||
0x5f, 0x69, 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x20, 0x3d, 0x3d,
|
||||||
0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c,
|
0x20, 0x33, 0x20, 0x26, 0x26, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x72,
|
||||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x73,
|
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e,
|
||||||
0x75, 0x6c, 0x74, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2a,
|
0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x20, 0x21, 0x3d,
|
||||||
0x7e, 0x0a, 0x0c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12,
|
0x20, 0x33, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e,
|
||||||
0x1d, 0x0a, 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52,
|
0x0a, 0x0c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x42, 0x10,
|
||||||
0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17,
|
0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
|
||||||
0x0a, 0x13, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f,
|
0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x45, 0x56, 0x45, 0x4e, 0x54,
|
0x5f, 0x69, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x0a,
|
||||||
0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c,
|
0x0a, 0x08, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2a, 0x7e, 0x0a, 0x0c, 0x45, 0x76,
|
||||||
0x45, 0x52, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52,
|
0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x56,
|
||||||
0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x03, 0x42,
|
0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50,
|
||||||
0x81, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x63, 0x68, 0x77, 0x61, 0x72, 0x7a, 0x2e,
|
0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x56, 0x45,
|
||||||
0x73, 0x74, 0x61, 0x63, 0x6b, 0x69, 0x74, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31,
|
0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54,
|
||||||
0x42, 0x0f, 0x41, 0x75, 0x64, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74,
|
0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47,
|
||||||
0x6f, 0x50, 0x01, 0x5a, 0x0f, 0x2e, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x3b, 0x61, 0x75, 0x64,
|
0x47, 0x45, 0x52, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x52, 0x10, 0x02, 0x12,
|
||||||
0x69, 0x74, 0x56, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x08, 0x41, 0x75, 0x64,
|
0x19, 0x0a, 0x15, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52,
|
||||||
0x69, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31,
|
0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x03, 0x42, 0x81, 0x01, 0x0a, 0x1c, 0x63,
|
||||||
0xe2, 0x02, 0x14, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d,
|
0x6f, 0x6d, 0x2e, 0x73, 0x63, 0x68, 0x77, 0x61, 0x72, 0x7a, 0x2e, 0x73, 0x74, 0x61, 0x63, 0x6b,
|
||||||
0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x41, 0x75, 0x64, 0x69, 0x74, 0x3a,
|
0x69, 0x74, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x41, 0x75, 0x64,
|
||||||
0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
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 (
|
var (
|
||||||
|
|
@ -554,24 +572,26 @@ var file_audit_v1_audit_event_proto_goTypes = []interface{}{
|
||||||
(*RequestHeader)(nil), // 3: audit.v1.RequestHeader
|
(*RequestHeader)(nil), // 3: audit.v1.RequestHeader
|
||||||
(*AuditEvent)(nil), // 4: audit.v1.AuditEvent
|
(*AuditEvent)(nil), // 4: audit.v1.AuditEvent
|
||||||
(*structpb.Struct)(nil), // 5: google.protobuf.Struct
|
(*structpb.Struct)(nil), // 5: google.protobuf.Struct
|
||||||
(*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp
|
(*wrapperspb.Int64Value)(nil), // 6: google.protobuf.Int64Value
|
||||||
|
(*timestamppb.Timestamp)(nil), // 7: google.protobuf.Timestamp
|
||||||
}
|
}
|
||||||
var file_audit_v1_audit_event_proto_depIdxs = []int32{
|
var file_audit_v1_audit_event_proto_depIdxs = []int32{
|
||||||
5, // 0: audit.v1.RequestDetails.parameters:type_name -> google.protobuf.Struct
|
5, // 0: audit.v1.RequestDetails.parameters:type_name -> google.protobuf.Struct
|
||||||
5, // 1: audit.v1.RequestDetails.body: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
|
3, // 2: audit.v1.RequestDetails.headers:type_name -> audit.v1.RequestHeader
|
||||||
6, // 3: audit.v1.AuditEvent.event_time_stamp:type_name -> google.protobuf.Timestamp
|
6, // 3: audit.v1.AuditEvent.sequence_number:type_name -> google.protobuf.Int64Value
|
||||||
0, // 4: audit.v1.AuditEvent.event_trigger:type_name -> audit.v1.EventTrigger
|
7, // 4: audit.v1.AuditEvent.event_time_stamp:type_name -> google.protobuf.Timestamp
|
||||||
2, // 5: audit.v1.AuditEvent.request:type_name -> audit.v1.RequestDetails
|
0, // 5: audit.v1.AuditEvent.event_trigger:type_name -> audit.v1.EventTrigger
|
||||||
1, // 6: audit.v1.AuditEvent.initiator:type_name -> audit.v1.Principal
|
2, // 6: audit.v1.AuditEvent.request:type_name -> audit.v1.RequestDetails
|
||||||
1, // 7: audit.v1.AuditEvent.principals:type_name -> audit.v1.Principal
|
1, // 7: audit.v1.AuditEvent.initiator:type_name -> audit.v1.Principal
|
||||||
5, // 8: audit.v1.AuditEvent.result:type_name -> google.protobuf.Struct
|
1, // 8: audit.v1.AuditEvent.principals:type_name -> audit.v1.Principal
|
||||||
5, // 9: audit.v1.AuditEvent.details:type_name -> google.protobuf.Struct
|
5, // 9: audit.v1.AuditEvent.result:type_name -> google.protobuf.Struct
|
||||||
10, // [10:10] is the sub-list for method output_type
|
5, // 10: audit.v1.AuditEvent.details:type_name -> google.protobuf.Struct
|
||||||
10, // [10:10] is the sub-list for method input_type
|
11, // [11:11] is the sub-list for method output_type
|
||||||
10, // [10:10] is the sub-list for extension type_name
|
11, // [11:11] is the sub-list for method input_type
|
||||||
10, // [10:10] is the sub-list for extension extendee
|
11, // [11:11] is the sub-list for extension type_name
|
||||||
0, // [0:10] is the sub-list for field type_name
|
11, // [11:11] is the sub-list for extension extendee
|
||||||
|
0, // [0:11] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_audit_v1_audit_event_proto_init() }
|
func init() { file_audit_v1_audit_event_proto_init() }
|
||||||
|
|
|
||||||
|
|
@ -474,6 +474,35 @@ func (m *AuditEvent) validate(all bool) error {
|
||||||
|
|
||||||
var errors []error
|
var errors []error
|
||||||
|
|
||||||
|
if all {
|
||||||
|
switch v := interface{}(m.GetSequenceNumber()).(type) {
|
||||||
|
case interface{ ValidateAll() error }:
|
||||||
|
if err := v.ValidateAll(); err != nil {
|
||||||
|
errors = append(errors, AuditEventValidationError{
|
||||||
|
field: "SequenceNumber",
|
||||||
|
reason: "embedded message failed validation",
|
||||||
|
cause: err,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
case interface{ Validate() error }:
|
||||||
|
if err := v.Validate(); err != nil {
|
||||||
|
errors = append(errors, AuditEventValidationError{
|
||||||
|
field: "SequenceNumber",
|
||||||
|
reason: "embedded message failed validation",
|
||||||
|
cause: err,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if v, ok := interface{}(m.GetSequenceNumber()).(interface{ Validate() error }); ok {
|
||||||
|
if err := v.Validate(); err != nil {
|
||||||
|
return AuditEventValidationError{
|
||||||
|
field: "SequenceNumber",
|
||||||
|
reason: "embedded message failed validation",
|
||||||
|
cause: err,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// no validation rules for EventName
|
// no validation rules for EventName
|
||||||
|
|
||||||
if all {
|
if all {
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ syntax = "proto3";
|
||||||
import "buf/validate/validate.proto";
|
import "buf/validate/validate.proto";
|
||||||
import "google/protobuf/struct.proto";
|
import "google/protobuf/struct.proto";
|
||||||
import "google/protobuf/timestamp.proto";
|
import "google/protobuf/timestamp.proto";
|
||||||
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
package audit.v1;
|
package audit.v1;
|
||||||
|
|
||||||
|
|
@ -50,34 +51,37 @@ message AuditEvent {
|
||||||
expression: "this.event_trigger == 3 && has(this.request) || this.event_trigger != 3"
|
expression: "this.event_trigger == 3 && has(this.request) || this.event_trigger != 3"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 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];
|
||||||
|
|
||||||
// Functional event name with pattern <TYPE>_<ACTION>, e.g. ORGANIZATION_CREATED
|
// Functional event name with pattern <TYPE>_<ACTION>, e.g. ORGANIZATION_CREATED
|
||||||
// Important for filtering and translation / verbalization of event types
|
// Important for filtering and translation / verbalization of event types
|
||||||
// in the UI or data sinks.
|
// in the UI or data sinks.
|
||||||
string event_name = 1 [(buf.validate.field).required = true, (buf.validate.field).string.pattern = "^[A-Z]+_[A-Z]+$"];
|
string event_name = 2 [(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.
|
// The time when the event happened. Must not be a value in the future.
|
||||||
google.protobuf.Timestamp event_time_stamp = 2 [(buf.validate.field).required = true, (buf.validate.field).timestamp.lt_now = true];
|
google.protobuf.Timestamp event_time_stamp = 3 [(buf.validate.field).required = true, (buf.validate.field).timestamp.lt_now = true];
|
||||||
|
|
||||||
EventTrigger event_trigger = 3 [(buf.validate.field).required = true, (buf.validate.field).enum.defined_only = true];
|
EventTrigger event_trigger = 4 [(buf.validate.field).required = true, (buf.validate.field).enum.defined_only = true];
|
||||||
|
|
||||||
// Request details - mandatory if event_trigger is set to "EVENT_REQUEST"
|
// Request details - mandatory if event_trigger is set to "EVENT_REQUEST"
|
||||||
optional RequestDetails request = 4;
|
optional RequestDetails request = 5;
|
||||||
|
|
||||||
Principal initiator = 5 [(buf.validate.field).required = true];
|
Principal initiator = 6 [(buf.validate.field).required = true];
|
||||||
|
|
||||||
// List of service account delegation principals.
|
// List of service account delegation principals.
|
||||||
// -> Chain from service account to the actual user who initiated the action.
|
// -> Chain from service account to the actual user who initiated the action.
|
||||||
repeated Principal principals = 6;
|
repeated Principal principals = 7;
|
||||||
|
|
||||||
optional string resource_id = 7 [(buf.validate.field).string.min_len = 1, (buf.validate.field).string.max_len = 255];
|
optional string resource_id = 8 [(buf.validate.field).string.min_len = 1, (buf.validate.field).string.max_len = 255];
|
||||||
|
|
||||||
optional string resource_name = 8 [(buf.validate.field).string.min_len = 1, (buf.validate.field).string.max_len = 255];
|
optional string resource_name = 9 [(buf.validate.field).string.min_len = 1, (buf.validate.field).string.max_len = 255];
|
||||||
|
|
||||||
optional string correlation_id = 9 [(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];
|
||||||
|
|
||||||
// Result of the operation to publish with the event
|
// Result of the operation to publish with the event
|
||||||
optional google.protobuf.Struct result = 10;
|
optional google.protobuf.Struct result = 11;
|
||||||
|
|
||||||
// Additional information to publish with the event
|
// Additional information to publish with the event
|
||||||
optional google.protobuf.Struct details = 11;
|
optional google.protobuf.Struct details = 12;
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue