Files
opencloud/pkg/log/log_safely.go
Pascal Bleser 7e8caab979 groupware: add strongly typed aliases for AccountId, PrincipalId and SupplierId
Purpose is to make APIs and parameters easier to understand, since plain
strings are used all over the place for all sorts of identifiers.
2026-06-16 16:51:37 +02:00

61 lines
1.4 KiB
Go

package log
import "github.com/rs/zerolog"
const (
logMaxStrLength = 512
logMaxStrArrayLength = 16 // 8kb
)
// Safely caps a string to a given size to avoid log bombing.
// Use this function to wrap strings that are user input (HTTP headers, path parameters, URI parameters, HTTP body, ...).
func SafeString[S ~string](text S) string {
t := string(text)
runes := []rune(t)
if len(runes) <= logMaxStrLength {
return t
} else {
return string(runes[0:logMaxStrLength-1]) + `\u2026` // hellip
}
}
type SafeLogStringArrayMarshaller struct {
array []string
}
func (m SafeLogStringArrayMarshaller) MarshalZerologArray(a *zerolog.Array) {
for i, elem := range m.array {
if i >= logMaxStrArrayLength {
return
}
a.Str(SafeString(elem))
}
}
var _ zerolog.LogArrayMarshaler = SafeLogStringArrayMarshaller{}
func SafeStringArray(array []string) SafeLogStringArrayMarshaller {
return SafeLogStringArrayMarshaller{array: array}
}
type StringArrayMarshaller struct {
array []string
}
func (m StringArrayMarshaller) MarshalZerologArray(a *zerolog.Array) {
for _, elem := range m.array {
a.Str(elem)
}
}
var _ zerolog.LogArrayMarshaler = StringArrayMarshaller{}
func StringArray(array []string) StringArrayMarshaller {
return StringArrayMarshaller{array: array}
}
func From(context zerolog.Context) *Logger {
return &Logger{Logger: context.Logger()}
}