From 1ff2d840f3594e68390fd46fb792d88277d8509d Mon Sep 17 00:00:00 2001 From: Paul Wells Date: Wed, 5 Nov 2025 13:45:09 -0800 Subject: [PATCH 1/3] add option to redact protobuf fields --- livekit/logger/options.pb.go | 82 ++++++++++++++++++++++++++++++++++ logger/proto.go | 7 +++ magefile.go | 1 + protobufs/logger/options.proto | 10 +++++ 4 files changed, 100 insertions(+) create mode 100644 livekit/logger/options.pb.go create mode 100644 protobufs/logger/options.proto diff --git a/livekit/logger/options.pb.go b/livekit/logger/options.pb.go new file mode 100644 index 000000000..9b31b2352 --- /dev/null +++ b/livekit/logger/options.pb.go @@ -0,0 +1,82 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.6 +// protoc v6.33.0 +// source: logger/options.proto + +package logger + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" + reflect "reflect" + unsafe "unsafe" +) + +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) +) + +var file_logger_options_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50001, + Name: "logger.redact", + Tag: "varint,50001,opt,name=redact", + Filename: "logger/options.proto", + }, +} + +// Extension fields to descriptorpb.FieldOptions. +var ( + // optional bool redact = 50001; + E_Redact = &file_logger_options_proto_extTypes[0] +) + +var File_logger_options_proto protoreflect.FileDescriptor + +const file_logger_options_proto_rawDesc = "" + + "\n" + + "\x14logger/options.proto\x12\x06logger\x1a google/protobuf/descriptor.proto:7\n" + + "\x06redact\x12\x1d.google.protobuf.FieldOptions\x18ц\x03 \x01(\bR\x06redactB$Z\"github.com/livekit/protocol/loggerb\x06proto3" + +var file_logger_options_proto_goTypes = []any{ + (*descriptorpb.FieldOptions)(nil), // 0: google.protobuf.FieldOptions +} +var file_logger_options_proto_depIdxs = []int32{ + 0, // 0: logger.redact:extendee -> google.protobuf.FieldOptions + 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 + 0, // [0:1] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_logger_options_proto_init() } +func file_logger_options_proto_init() { + if File_logger_options_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_logger_options_proto_rawDesc), len(file_logger_options_proto_rawDesc)), + NumEnums: 0, + NumMessages: 0, + NumExtensions: 1, + NumServices: 0, + }, + GoTypes: file_logger_options_proto_goTypes, + DependencyIndexes: file_logger_options_proto_depIdxs, + ExtensionInfos: file_logger_options_proto_extTypes, + }.Build() + File_logger_options_proto = out.File + file_logger_options_proto_goTypes = nil + file_logger_options_proto_depIdxs = nil +} diff --git a/logger/proto.go b/logger/proto.go index 83b00a644..6ff2f7c68 100644 --- a/logger/proto.go +++ b/logger/proto.go @@ -22,6 +22,8 @@ import ( "go.uber.org/zap/zapcore" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protoreflect" + + "github.com/livekit/protocol/livekit/logger" ) func Proto(val proto.Message) zapcore.ObjectMarshaler { @@ -46,6 +48,11 @@ func (p protoMarshaller) MarshalLogObject(e zapcore.ObjectEncoder) error { k := f.JSONName() v := p.m.Get(f) + if proto.HasExtension(f.Options(), logger.E_Redact) { + e.AddString(k, "") + continue + } + if f.IsMap() { if m := v.Map(); m.IsValid() { e.AddObject(k, protoMapMarshaller{f, m}) diff --git a/magefile.go b/magefile.go index 37f8051dd..8679a9d6d 100644 --- a/magefile.go +++ b/magefile.go @@ -68,6 +68,7 @@ func Proto() error { "livekit_webhook.proto", "livekit_metrics.proto", "livekit_token_source.proto", + "logger/options.proto", } grpcProtoFiles := []string{ "infra/link.proto", diff --git a/protobufs/logger/options.proto b/protobufs/logger/options.proto new file mode 100644 index 000000000..8ca017f5a --- /dev/null +++ b/protobufs/logger/options.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; +package logger; + +option go_package = "github.com/livekit/protocol/logger"; + +import "google/protobuf/descriptor.proto"; + +extend google.protobuf.FieldOptions { + bool redact = 50001; +} From 588d0e84396ab2538f0df446595293b0a64debc4 Mon Sep 17 00:00:00 2001 From: Paul Wells Date: Wed, 5 Nov 2025 13:45:54 -0800 Subject: [PATCH 2/3] Create sharp-dolphins-help.md --- .changeset/sharp-dolphins-help.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/sharp-dolphins-help.md diff --git a/.changeset/sharp-dolphins-help.md b/.changeset/sharp-dolphins-help.md new file mode 100644 index 000000000..593487fe3 --- /dev/null +++ b/.changeset/sharp-dolphins-help.md @@ -0,0 +1,5 @@ +--- +"@livekit/protocol": patch +--- + +add option to redact protobuf fields From 59d6c3c564484f17bc071527c1875dee15d39594 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 5 Nov 2025 21:47:09 +0000 Subject: [PATCH 3/3] generated protobuf --- livekit/logger/options.pb.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/livekit/logger/options.pb.go b/livekit/logger/options.pb.go index 9b31b2352..6376f910d 100644 --- a/livekit/logger/options.pb.go +++ b/livekit/logger/options.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.6 -// protoc v6.33.0 +// protoc-gen-go v1.36.10 +// protoc v4.23.4 // source: logger/options.proto package logger