fix(logger): mask bot tokens in 3rd-party logger output
This commit is contained in:
parent
c513ad22d7
commit
8fc36a4f9b
1 changed files with 24 additions and 12 deletions
|
|
@ -2,7 +2,19 @@
|
||||||
|
|
||||||
package logger
|
package logger
|
||||||
|
|
||||||
import "fmt"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
// botTokenRe matches the secret part of a Telegram bot token embedded in a URL
|
||||||
|
// or log message: /bot<id>:<secret>/ → /bot<id>:****/
|
||||||
|
var botTokenRe = regexp.MustCompile(`(bot\d+:)[A-Za-z0-9_-]{20,}`)
|
||||||
|
|
||||||
|
// maskSecrets replaces any embedded bot tokens in s with a redacted placeholder.
|
||||||
|
func maskSecrets(s string) string {
|
||||||
|
return botTokenRe.ReplaceAllString(s, "${1}****")
|
||||||
|
}
|
||||||
|
|
||||||
// Logger implements common Logger interface
|
// Logger implements common Logger interface
|
||||||
type Logger struct {
|
type Logger struct {
|
||||||
|
|
@ -12,52 +24,52 @@ type Logger struct {
|
||||||
|
|
||||||
// Debug logs debug messages
|
// Debug logs debug messages
|
||||||
func (b *Logger) Debug(v ...any) {
|
func (b *Logger) Debug(v ...any) {
|
||||||
logMessage(DEBUG, b.component, fmt.Sprint(v...), nil)
|
logMessage(DEBUG, b.component, maskSecrets(fmt.Sprint(v...)), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Info logs info messages
|
// Info logs info messages
|
||||||
func (b *Logger) Info(v ...any) {
|
func (b *Logger) Info(v ...any) {
|
||||||
logMessage(INFO, b.component, fmt.Sprint(v...), nil)
|
logMessage(INFO, b.component, maskSecrets(fmt.Sprint(v...)), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Warn logs warning messages
|
// Warn logs warning messages
|
||||||
func (b *Logger) Warn(v ...any) {
|
func (b *Logger) Warn(v ...any) {
|
||||||
logMessage(WARN, b.component, fmt.Sprint(v...), nil)
|
logMessage(WARN, b.component, maskSecrets(fmt.Sprint(v...)), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Error logs error messages
|
// Error logs error messages
|
||||||
func (b *Logger) Error(v ...any) {
|
func (b *Logger) Error(v ...any) {
|
||||||
logMessage(ERROR, b.component, fmt.Sprint(v...), nil)
|
logMessage(ERROR, b.component, maskSecrets(fmt.Sprint(v...)), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debugf logs formatted debug messages
|
// Debugf logs formatted debug messages
|
||||||
func (b *Logger) Debugf(format string, v ...any) {
|
func (b *Logger) Debugf(format string, v ...any) {
|
||||||
logMessage(DEBUG, b.component, fmt.Sprintf(format, v...), nil)
|
logMessage(DEBUG, b.component, maskSecrets(fmt.Sprintf(format, v...)), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Infof logs formatted info messages
|
// Infof logs formatted info messages
|
||||||
func (b *Logger) Infof(format string, v ...any) {
|
func (b *Logger) Infof(format string, v ...any) {
|
||||||
logMessage(INFO, b.component, fmt.Sprintf(format, v...), nil)
|
logMessage(INFO, b.component, maskSecrets(fmt.Sprintf(format, v...)), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Warnf logs formatted warning messages
|
// Warnf logs formatted warning messages
|
||||||
func (b *Logger) Warnf(format string, v ...any) {
|
func (b *Logger) Warnf(format string, v ...any) {
|
||||||
logMessage(WARN, b.component, fmt.Sprintf(format, v...), nil)
|
logMessage(WARN, b.component, maskSecrets(fmt.Sprintf(format, v...)), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Warningf logs formatted warning messages
|
// Warningf logs formatted warning messages
|
||||||
func (b *Logger) Warningf(format string, v ...any) {
|
func (b *Logger) Warningf(format string, v ...any) {
|
||||||
logMessage(WARN, b.component, fmt.Sprintf(format, v...), nil)
|
logMessage(WARN, b.component, maskSecrets(fmt.Sprintf(format, v...)), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Errorf logs formatted error messages
|
// Errorf logs formatted error messages
|
||||||
func (b *Logger) Errorf(format string, v ...any) {
|
func (b *Logger) Errorf(format string, v ...any) {
|
||||||
logMessage(ERROR, b.component, fmt.Sprintf(format, v...), nil)
|
logMessage(ERROR, b.component, maskSecrets(fmt.Sprintf(format, v...)), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fatalf logs formatted fatal messages and exits
|
// Fatalf logs formatted fatal messages and exits
|
||||||
func (b *Logger) Fatalf(format string, v ...any) {
|
func (b *Logger) Fatalf(format string, v ...any) {
|
||||||
logMessage(FATAL, b.component, fmt.Sprintf(format, v...), nil)
|
logMessage(FATAL, b.component, maskSecrets(fmt.Sprintf(format, v...)), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log logs a message at a given level with caller information
|
// Log logs a message at a given level with caller information
|
||||||
|
|
@ -75,7 +87,7 @@ func (b *Logger) Log(msgL, caller int, format string, a ...any) {
|
||||||
level = lvl
|
level = lvl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
logMessage(level, b.component, fmt.Sprintf(format, a...), nil)
|
logMessage(level, b.component, maskSecrets(fmt.Sprintf(format, a...)), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sync flushes log buffer (no-op for this implementation)
|
// Sync flushes log buffer (no-op for this implementation)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue