wip: refactory log with zap
This commit is contained in:
parent
0cf05cdf30
commit
1ea5507e5f
2
go.mod
2
go.mod
@ -14,6 +14,7 @@ require (
|
|||||||
github.com/loveuer/nf v0.3.1
|
github.com/loveuer/nf v0.3.1
|
||||||
github.com/samber/lo v1.47.0
|
github.com/samber/lo v1.47.0
|
||||||
github.com/spf13/cast v1.7.1
|
github.com/spf13/cast v1.7.1
|
||||||
|
go.uber.org/zap v1.27.0
|
||||||
golang.org/x/crypto v0.25.0
|
golang.org/x/crypto v0.25.0
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
gorm.io/driver/mysql v1.5.7
|
gorm.io/driver/mysql v1.5.7
|
||||||
@ -39,6 +40,7 @@ require (
|
|||||||
github.com/mattn/go-runewidth v0.0.15 // indirect
|
github.com/mattn/go-runewidth v0.0.15 // indirect
|
||||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
||||||
github.com/rivo/uniseg v0.2.0 // indirect
|
github.com/rivo/uniseg v0.2.0 // indirect
|
||||||
|
go.uber.org/multierr v1.10.0 // indirect
|
||||||
golang.org/x/sync v0.10.0 // indirect
|
golang.org/x/sync v0.10.0 // indirect
|
||||||
golang.org/x/sys v0.25.0 // indirect
|
golang.org/x/sys v0.25.0 // indirect
|
||||||
golang.org/x/text v0.21.0 // indirect
|
golang.org/x/text v0.21.0 // indirect
|
||||||
|
5
go.sum
5
go.sum
@ -75,6 +75,11 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
|
|||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||||
|
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||||
|
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
|
||||||
|
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||||
|
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
||||||
|
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||||
golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
|
golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
|
||||||
golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
|
golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
|
||||||
golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
|
golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
|
||||||
|
53
log.go
53
log.go
@ -7,15 +7,37 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/loveuer/uzone/pkg/api"
|
"github.com/loveuer/uzone/pkg/api"
|
||||||
"github.com/loveuer/uzone/pkg/log"
|
"github.com/loveuer/uzone/pkg/log"
|
||||||
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type uzone_logger struct {
|
type uzone_logger struct {
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
|
caller string
|
||||||
|
sugar *zap.SugaredLogger
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ul *uzone_logger) WithContext(ctx context.Context) *uzone_logger {
|
||||||
|
ul.ctx = ctx
|
||||||
|
return ul
|
||||||
|
}
|
||||||
|
|
||||||
|
// func (ul *uzone_logger) WithCaller(caller string) *uzone_logger {
|
||||||
|
// ul.caller = caller
|
||||||
|
// return ul
|
||||||
|
// }
|
||||||
|
|
||||||
|
func (ul *uzone_logger) GC() {
|
||||||
|
ul.ctx = nil
|
||||||
|
ul.caller = ""
|
||||||
|
ul.sugar = nil
|
||||||
|
log.Logger.Sync()
|
||||||
|
uzone_logger_pool.Put(ul)
|
||||||
}
|
}
|
||||||
|
|
||||||
var uzone_logger_pool = &sync.Pool{
|
var uzone_logger_pool = &sync.Pool{
|
||||||
New: func() any {
|
New: func() any {
|
||||||
return &uzone_logger{}
|
s := log.Logger.Sugar()
|
||||||
|
return &uzone_logger{sugar: s}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,36 +54,31 @@ func (ul *uzone_logger) traceId() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ul *uzone_logger) Debug(msg string, data ...any) {
|
func (ul *uzone_logger) Debug(msg string, data ...any) {
|
||||||
log.Debug(ul.traceId()+" | "+msg, data...)
|
ul.sugar.With("trace", ul.traceId()).Debugf(msg, data...)
|
||||||
|
ul.GC()
|
||||||
uzone_logger_pool.Put(ul)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ul *uzone_logger) Info(msg string, data ...any) {
|
func (ul *uzone_logger) Info(msg string, data ...any) {
|
||||||
log.Info(ul.traceId()+" | "+msg, data...)
|
ul.sugar.With("trace", ul.traceId()).Infof(msg, data...)
|
||||||
|
ul.GC()
|
||||||
uzone_logger_pool.Put(ul)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ul *uzone_logger) Warn(msg string, data ...any) {
|
func (ul *uzone_logger) Warn(msg string, data ...any) {
|
||||||
log.Warn(ul.traceId()+" | "+msg, data...)
|
ul.sugar.With("trace", ul.traceId()).Warnf(msg, data...)
|
||||||
|
ul.GC()
|
||||||
uzone_logger_pool.Put(ul)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ul *uzone_logger) Error(msg string, data ...any) {
|
func (ul *uzone_logger) Error(msg string, data ...any) {
|
||||||
log.Error(ul.traceId()+" | "+msg, data...)
|
ul.sugar.With("trace", ul.traceId()).Errorf(msg, data...)
|
||||||
|
ul.GC()
|
||||||
uzone_logger_pool.Put(ul)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ul *uzone_logger) Panic(msg string, data ...any) {
|
func (ul *uzone_logger) Panic(msg string, data ...any) {
|
||||||
log.Panic(ul.traceId()+" | "+msg, data...)
|
ul.sugar.With("trace", ul.traceId()).Panicf(msg, data...)
|
||||||
uzone_logger_pool.Put(ul)
|
ul.GC()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ul *uzone_logger) Fatal(msg string, data ...any) {
|
func (ul *uzone_logger) Fatal(msg string, data ...any) {
|
||||||
log.Fatal(ul.traceId()+" | "+msg, data...)
|
ul.sugar.With("trace", ul.traceId()).Fatalf(msg, data...)
|
||||||
|
ul.GC()
|
||||||
uzone_logger_pool.Put(ul)
|
|
||||||
}
|
}
|
||||||
|
@ -32,11 +32,11 @@ func New(uri string) (*gorm.DB, error) {
|
|||||||
switch ins.Scheme {
|
switch ins.Scheme {
|
||||||
case "sqlite":
|
case "sqlite":
|
||||||
path := strings.TrimPrefix(uri, ins.Scheme+"://")
|
path := strings.TrimPrefix(uri, ins.Scheme+"://")
|
||||||
log.Debug("db.New: type = %s, path = %s", ins.Scheme, path)
|
log.Logger.Sugar().Debugf("db.New: type = %s, path = %s", ins.Scheme, path)
|
||||||
tx, err = gorm.Open(sqlite.Open(path))
|
tx, err = gorm.Open(sqlite.Open(path))
|
||||||
case "mysql", "mariadb":
|
case "mysql", "mariadb":
|
||||||
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?%s", username, password, ins.Host, ins.Path, ins.RawQuery)
|
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?%s", username, password, ins.Host, ins.Path, ins.RawQuery)
|
||||||
log.Debug("db.New: type = %s, dsn = %s", ins.Scheme, dsn)
|
log.Logger.Sugar().Debugf("db.New: type = %s, dsn = %s", ins.Scheme, dsn)
|
||||||
tx, err = gorm.Open(mysql.Open(dsn))
|
tx, err = gorm.Open(mysql.Open(dsn))
|
||||||
case "pg", "postgres", "postgresql":
|
case "pg", "postgres", "postgresql":
|
||||||
opts := make([]string, 0)
|
opts := make([]string, 0)
|
||||||
@ -44,7 +44,7 @@ func New(uri string) (*gorm.DB, error) {
|
|||||||
opts = append(opts, fmt.Sprintf("%s=%s", key, val))
|
opts = append(opts, fmt.Sprintf("%s=%s", key, val))
|
||||||
}
|
}
|
||||||
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s %s", ins.Hostname(), username, password, ins.Path, ins.Port(), strings.Join(opts, " "))
|
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s %s", ins.Hostname(), username, password, ins.Path, ins.Port(), strings.Join(opts, " "))
|
||||||
log.Debug("db.New: type = %s, dsn = %s", ins.Scheme, dsn)
|
log.Logger.Sugar().Debugf("db.New: type = %s, dsn = %s", ins.Scheme, dsn)
|
||||||
tx, err = gorm.Open(postgres.Open(dsn))
|
tx, err = gorm.Open(postgres.Open(dsn))
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("invalid database type(uri_scheme): %s", ins.Scheme)
|
return nil, fmt.Errorf("invalid database type(uri_scheme): %s", ins.Scheme)
|
||||||
|
@ -1,67 +0,0 @@
|
|||||||
package log
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
nilLogger = func(prefix, timestamp, msg string, data ...any) {}
|
|
||||||
normalLogger = func(prefix, timestamp, msg string, data ...any) {
|
|
||||||
fmt.Printf(prefix+"| "+timestamp+" | "+msg+"\n", data...)
|
|
||||||
}
|
|
||||||
|
|
||||||
panicLogger = func(prefix, timestamp, msg string, data ...any) {
|
|
||||||
panic(fmt.Sprintf(prefix+"| "+timestamp+" | "+msg+"\n", data...))
|
|
||||||
}
|
|
||||||
|
|
||||||
fatalLogger = func(prefix, timestamp, msg string, data ...any) {
|
|
||||||
fmt.Printf(prefix+"| "+timestamp+" | "+msg+"\n", data...)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
DefaultLogger = &logger{
|
|
||||||
Mutex: sync.Mutex{},
|
|
||||||
timeFormat: "2006-01-02T15:04:05",
|
|
||||||
writer: os.Stdout,
|
|
||||||
level: LogLevelInfo,
|
|
||||||
debug: nilLogger,
|
|
||||||
info: normalLogger,
|
|
||||||
warn: normalLogger,
|
|
||||||
error: normalLogger,
|
|
||||||
panic: panicLogger,
|
|
||||||
fatal: fatalLogger,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func SetTimeFormat(format string) {
|
|
||||||
DefaultLogger.SetTimeFormat(format)
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetLogLevel(level LogLevel) {
|
|
||||||
DefaultLogger.SetLogLevel(level)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Debug(msg string, data ...any) {
|
|
||||||
DefaultLogger.Debug(msg, data...)
|
|
||||||
}
|
|
||||||
func Info(msg string, data ...any) {
|
|
||||||
DefaultLogger.Info(msg, data...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Warn(msg string, data ...any) {
|
|
||||||
DefaultLogger.Warn(msg, data...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Error(msg string, data ...any) {
|
|
||||||
DefaultLogger.Error(msg, data...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Panic(msg string, data ...any) {
|
|
||||||
DefaultLogger.Panic(msg, data...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Fatal(msg string, data ...any) {
|
|
||||||
DefaultLogger.Fatal(msg, data...)
|
|
||||||
}
|
|
117
pkg/log/log.go
117
pkg/log/log.go
@ -1,115 +1,36 @@
|
|||||||
package log
|
package log
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/fatih/color"
|
|
||||||
"io"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
|
||||||
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LogLevel uint32
|
|
||||||
|
|
||||||
const (
|
|
||||||
LogLevelDebug = iota
|
|
||||||
LogLevelInfo
|
|
||||||
LogLevelWarn
|
|
||||||
LogLevelError
|
|
||||||
LogLevelPanic
|
|
||||||
LogLevelFatal
|
|
||||||
)
|
|
||||||
|
|
||||||
type logger struct {
|
|
||||||
sync.Mutex
|
|
||||||
timeFormat string
|
|
||||||
writer io.Writer
|
|
||||||
level LogLevel
|
|
||||||
debug func(prefix, timestamp, msg string, data ...any)
|
|
||||||
info func(prefix, timestamp, msg string, data ...any)
|
|
||||||
warn func(prefix, timestamp, msg string, data ...any)
|
|
||||||
error func(prefix, timestamp, msg string, data ...any)
|
|
||||||
panic func(prefix, timestamp, msg string, data ...any)
|
|
||||||
fatal func(prefix, timestamp, msg string, data ...any)
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
red = color.New(color.FgRed)
|
Logger *zap.Logger
|
||||||
hired = color.New(color.FgHiRed)
|
locker = &sync.Mutex{}
|
||||||
green = color.New(color.FgGreen)
|
|
||||||
yellow = color.New(color.FgYellow)
|
|
||||||
white = color.New(color.FgWhite)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (l *logger) SetTimeFormat(format string) {
|
func init() {
|
||||||
l.Lock()
|
var err error
|
||||||
defer l.Unlock()
|
config := zap.NewProductionConfig()
|
||||||
l.timeFormat = format
|
Logger, err = config.Build()
|
||||||
}
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
func (l *logger) SetLogLevel(level LogLevel) {
|
|
||||||
l.Lock()
|
|
||||||
defer l.Unlock()
|
|
||||||
|
|
||||||
if level > LogLevelDebug {
|
|
||||||
l.debug = nilLogger
|
|
||||||
} else {
|
|
||||||
l.debug = normalLogger
|
|
||||||
}
|
|
||||||
|
|
||||||
if level > LogLevelInfo {
|
|
||||||
l.info = nilLogger
|
|
||||||
} else {
|
|
||||||
l.info = normalLogger
|
|
||||||
}
|
|
||||||
|
|
||||||
if level > LogLevelWarn {
|
|
||||||
l.warn = nilLogger
|
|
||||||
} else {
|
|
||||||
l.warn = normalLogger
|
|
||||||
}
|
|
||||||
|
|
||||||
if level > LogLevelError {
|
|
||||||
l.error = nilLogger
|
|
||||||
} else {
|
|
||||||
l.error = normalLogger
|
|
||||||
}
|
|
||||||
|
|
||||||
if level > LogLevelPanic {
|
|
||||||
l.panic = nilLogger
|
|
||||||
} else {
|
|
||||||
l.panic = panicLogger
|
|
||||||
}
|
|
||||||
|
|
||||||
if level > LogLevelFatal {
|
|
||||||
l.fatal = nilLogger
|
|
||||||
} else {
|
|
||||||
l.fatal = fatalLogger
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *logger) Debug(msg string, data ...any) {
|
func Debug() {
|
||||||
l.debug(white.Sprint("Debug "), time.Now().Format(l.timeFormat), msg, data...)
|
var err error
|
||||||
}
|
|
||||||
|
|
||||||
func (l *logger) Info(msg string, data ...any) {
|
config := zap.NewProductionConfig()
|
||||||
l.info(green.Sprint("Info "), time.Now().Format(l.timeFormat), msg, data...)
|
config.Level = zap.NewAtomicLevelAt(zap.DebugLevel)
|
||||||
}
|
|
||||||
|
|
||||||
func (l *logger) Warn(msg string, data ...any) {
|
locker.Lock()
|
||||||
l.warn(yellow.Sprint("Warn "), time.Now().Format(l.timeFormat), msg, data...)
|
defer locker.Unlock()
|
||||||
}
|
|
||||||
|
|
||||||
func (l *logger) Error(msg string, data ...any) {
|
Logger, err = config.Build()
|
||||||
l.error(red.Sprint("Error "), time.Now().Format(l.timeFormat), msg, data...)
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *logger) Panic(msg string, data ...any) {
|
|
||||||
l.panic(hired.Sprint("Panic "), time.Now().Format(l.timeFormat), msg, data...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *logger) Fatal(msg string, data ...any) {
|
|
||||||
l.fatal(hired.Sprint("Fatal "), time.Now().Format(l.timeFormat), msg, data...)
|
|
||||||
}
|
|
||||||
|
|
||||||
type WroteLogger interface {
|
|
||||||
Info(msg string, data ...any)
|
|
||||||
}
|
}
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
package log
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
func New() *logger {
|
|
||||||
return &logger{
|
|
||||||
Mutex: sync.Mutex{},
|
|
||||||
timeFormat: "2006-01-02T15:04:05",
|
|
||||||
writer: os.Stdout,
|
|
||||||
level: LogLevelInfo,
|
|
||||||
debug: nilLogger,
|
|
||||||
info: normalLogger,
|
|
||||||
warn: normalLogger,
|
|
||||||
error: normalLogger,
|
|
||||||
panic: panicLogger,
|
|
||||||
fatal: fatalLogger,
|
|
||||||
}
|
|
||||||
}
|
|
@ -5,7 +5,7 @@ import "github.com/loveuer/uzone/pkg/log"
|
|||||||
func Must(errs ...error) {
|
func Must(errs ...error) {
|
||||||
for _, err := range errs {
|
for _, err := range errs {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Panic(err.Error())
|
log.Logger.Panic(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,6 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/loveuer/uzone/pkg/log"
|
|
||||||
"golang.org/x/crypto/pbkdf2"
|
"golang.org/x/crypto/pbkdf2"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -21,26 +20,29 @@ func NewPassword(password string) string {
|
|||||||
return EncryptPassword(password, RandomString(8), int(RandomInt(50000)+100000))
|
return EncryptPassword(password, RandomString(8), int(RandomInt(50000)+100000))
|
||||||
}
|
}
|
||||||
|
|
||||||
func ComparePassword(in, db string) bool {
|
// ComparePassword
|
||||||
|
// if password in and db are same, return nil
|
||||||
|
func ComparePassword(in, db string) error {
|
||||||
strs := strings.Split(db, "$")
|
strs := strings.Split(db, "$")
|
||||||
if len(strs) != 3 {
|
if len(strs) != 3 {
|
||||||
log.Error("password in db invalid: %s", db)
|
return fmt.Errorf("password in db invalid: %s", db)
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
encs := strings.Split(strs[0], ":")
|
encs := strings.Split(strs[0], ":")
|
||||||
if len(encs) != 3 {
|
if len(encs) != 3 {
|
||||||
log.Error("password in db invalid: %s", db)
|
return fmt.Errorf("password in db invalid: %s", db)
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
encIteration, err := strconv.Atoi(encs[2])
|
encIteration, err := strconv.Atoi(encs[2])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("password in db invalid: %s, convert iter err: %s", db, err)
|
return fmt.Errorf("password in db invalid: %s, convert iter err: %s", db, err)
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return EncryptPassword(in, strs[1], encIteration) == db
|
if EncryptPassword(in, strs[1], encIteration) != db {
|
||||||
|
return fmt.Errorf("password input and db not same")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func EncryptPassword(password, salt string, iter int) string {
|
func EncryptPassword(password, salt string, iter int) string {
|
||||||
@ -66,7 +68,6 @@ func CheckPassword(password string) error {
|
|||||||
for idx, pattern := range patternList {
|
for idx, pattern := range patternList {
|
||||||
match, err = regexp.MatchString(pattern, password)
|
match, err = regexp.MatchString(pattern, password)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn("regex match string err, reg_str: %s, err: %v", pattern, err)
|
|
||||||
return errors.New("密码强度不够")
|
return errors.New("密码强度不够")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,8 +8,9 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/jedib0t/go-pretty/v6/table"
|
|
||||||
"github.com/loveuer/uzone/pkg/log"
|
"github.com/loveuer/uzone/pkg/log"
|
||||||
|
|
||||||
|
"github.com/jedib0t/go-pretty/v6/table"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TablePrinter(data any, writers ...io.Writer) {
|
func TablePrinter(data any, writers ...io.Writer) {
|
||||||
@ -81,8 +82,6 @@ Start:
|
|||||||
p := fmt.Sprintf("%s.%s", prefix, rv.Type().Field(i).Name)
|
p := fmt.Sprintf("%s.%s", prefix, rv.Type().Field(i).Name)
|
||||||
field := rv.Field(i)
|
field := rv.Field(i)
|
||||||
|
|
||||||
// log.Debug("TablePrinter: prefix: %s, field: %v", p, rv.Field(i))
|
|
||||||
|
|
||||||
if !field.CanInterface() {
|
if !field.CanInterface() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -95,7 +94,7 @@ Start:
|
|||||||
func TableMapPrinter(data []byte) {
|
func TableMapPrinter(data []byte) {
|
||||||
m := make(map[string]any)
|
m := make(map[string]any)
|
||||||
if err := json.Unmarshal(data, &m); err != nil {
|
if err := json.Unmarshal(data, &m); err != nil {
|
||||||
log.Warn(err.Error())
|
log.Logger.Warn(err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user