Oauth. Car Backups.

This commit is contained in:
2026-02-04 17:01:54 -06:00
parent 486c07f2d4
commit 4ed5d821da
14 changed files with 524 additions and 62 deletions

50
data/app_log_handler.go Normal file
View File

@@ -0,0 +1,50 @@
package data
import (
"context"
"errors"
"log/slog"
"time"
)
type AppLogHandler struct {
level slog.Level
logFunc func(string, ...any)
attrs []slog.Attr
groups []string
}
func NewAppLogHandler(f func(string, ...any)) *AppLogHandler {
return &AppLogHandler{logFunc: f}
}
func (a *AppLogHandler) SetLevel(l slog.Level) { a.level = l }
func (a *AppLogHandler) setAttrs(attrs ...slog.Attr) { a.attrs = attrs }
func (a *AppLogHandler) addAttrs(attrs ...slog.Attr) { a.attrs = append(a.attrs, attrs...) }
func (a *AppLogHandler) setGroups(groups ...string) { a.groups = groups }
func (a *AppLogHandler) addGroups(groups ...string) { a.groups = append(a.groups, groups...) }
// AppLogHandler can handle all levels
func (a *AppLogHandler) Enabled(_ context.Context, lvl slog.Level) bool { return lvl >= a.level }
func (a *AppLogHandler) Handle(ctx context.Context, rcd slog.Record) error {
if a.logFunc == nil {
return errors.New("no log func defined")
}
a.logFunc("%s %s %s", rcd.Time.Format(time.TimeOnly), rcd.Level, rcd.Message)
return nil
}
func (a *AppLogHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
attrs = append(attrs, a.attrs...)
ret := NewAppLogHandler(a.logFunc)
ret.addAttrs(attrs...)
return ret
}
func (a *AppLogHandler) WithGroup(name string) slog.Handler {
groups := append(a.groups, name)
ret := NewAppLogHandler(a.logFunc)
ret.setGroups(groups...)
return ret
}