mirror of
https://github.com/moonD4rk/HackBrowserData.git
synced 2026-05-19 18:58:03 +02:00
feat: replace log with stdout color
This commit is contained in:
+18
-33
@@ -36,40 +36,25 @@ func PickBrowser(name, profile string) ([]Browser, error) {
|
||||
return browsers, nil
|
||||
}
|
||||
|
||||
func PickBrowserByProfilePath(name, profile string) ([]Browser, error) {
|
||||
var browsers []Browser
|
||||
clist := pickChromium(name, profile)
|
||||
for _, b := range clist {
|
||||
if b != nil {
|
||||
browsers = append(browsers, b)
|
||||
}
|
||||
}
|
||||
flist := pickFirefox(name, profile)
|
||||
for _, b := range flist {
|
||||
if b != nil {
|
||||
browsers = append(browsers, b)
|
||||
}
|
||||
}
|
||||
return browsers, nil
|
||||
}
|
||||
|
||||
func pickChromium(name, profile string) []Browser {
|
||||
var browsers []Browser
|
||||
name = strings.ToLower(name)
|
||||
// TODO: add support for 「all」 flag and set profilePath
|
||||
if name == "all" {
|
||||
for _, c := range chromiumList {
|
||||
if b, err := chromium.New(c.name, c.storage, c.profilePath, c.items); err == nil {
|
||||
for _, v := range chromiumList {
|
||||
if b, err := chromium.New(v.name, v.storage, v.profilePath, v.items); err == nil {
|
||||
log.Infof("find browser %s success", b.Name())
|
||||
browsers = append(browsers, b)
|
||||
} else {
|
||||
// TODO: show which browser find failed
|
||||
if strings.Contains(err.Error(), "profile path is not exist") {
|
||||
log.Infof("find browser %s failed, profile path is not exist", v.name)
|
||||
continue
|
||||
} else {
|
||||
log.Error("new chromium error:", err)
|
||||
}
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
return browsers
|
||||
}
|
||||
if c, ok := chromiumList[name]; ok {
|
||||
if profile == "" {
|
||||
@@ -78,15 +63,14 @@ func pickChromium(name, profile string) []Browser {
|
||||
b, err := chromium.New(c.name, c.storage, profile, c.items)
|
||||
if err != nil {
|
||||
if strings.Contains(err.Error(), "profile path is not exist") {
|
||||
log.Error(err.Error())
|
||||
log.Infof("find browser %s failed, profile path is not exist", c.name)
|
||||
} else {
|
||||
panic(err)
|
||||
log.Error("new chromium error:", err)
|
||||
}
|
||||
}
|
||||
browsers = append(browsers, b)
|
||||
return browsers
|
||||
}
|
||||
return nil
|
||||
return browsers
|
||||
}
|
||||
|
||||
func pickFirefox(name, profile string) []Browser {
|
||||
@@ -99,18 +83,19 @@ func pickFirefox(name, profile string) []Browser {
|
||||
} else {
|
||||
profile = fileutil.ParentDir(profile)
|
||||
}
|
||||
multiFirefox, err := firefox.New(v.name, v.storage, profile, v.items)
|
||||
// TODO: Handle error
|
||||
if err != nil {
|
||||
if multiFirefox, err := firefox.New(v.name, v.storage, profile, v.items); err == nil {
|
||||
for _, b := range multiFirefox {
|
||||
log.Infof("find browser: %s success", b.Name())
|
||||
browsers = append(browsers, b)
|
||||
}
|
||||
} else {
|
||||
if strings.Contains(err.Error(), "profile path is not exist") {
|
||||
log.Error(err.Error())
|
||||
log.Infof("find browser: %s failed, profile path is not exist", v.name)
|
||||
} else {
|
||||
panic(err)
|
||||
log.Error(err)
|
||||
}
|
||||
}
|
||||
for _, browser := range multiFirefox {
|
||||
browsers = append(browsers, browser)
|
||||
}
|
||||
|
||||
}
|
||||
return browsers
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
"golang.org/x/crypto/pbkdf2"
|
||||
|
||||
"hack-browser-data/internal/item"
|
||||
"hack-browser-data/internal/log"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -52,5 +53,6 @@ func (c *chromium) GetMasterKey() ([]byte, error) {
|
||||
return nil, ErrWrongSecurityCommand
|
||||
}
|
||||
c.masterKey = key
|
||||
log.Infof("%s initialized master key success", c.name)
|
||||
return key, nil
|
||||
}
|
||||
|
||||
@@ -64,5 +64,6 @@ func (c *chromium) GetMasterKey() ([]byte, error) {
|
||||
// @https://source.chromium.org/chromium/chromium/src/+/master:components/os_crypt/os_crypt_linux.cc
|
||||
key := pbkdf2.Key(chromiumSecret, chromiumSalt, 1, 16, sha1.New)
|
||||
c.masterKey = key
|
||||
log.Infof("%s initialized master key success", c.name)
|
||||
return key, nil
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
|
||||
"hack-browser-data/internal/decrypter"
|
||||
"hack-browser-data/internal/item"
|
||||
"hack-browser-data/internal/log"
|
||||
"hack-browser-data/internal/utils/fileutil"
|
||||
)
|
||||
|
||||
@@ -29,6 +30,7 @@ func (c *chromium) GetMasterKey() ([]byte, error) {
|
||||
return nil, errDecodeMasterKeyFailed
|
||||
}
|
||||
c.masterKey, err = decrypter.DPApi(pureKey[5:])
|
||||
log.Infof("%s initialized master key success", c.name)
|
||||
return c.masterKey, err
|
||||
}
|
||||
return nil, nil
|
||||
|
||||
+89
-77
@@ -1,107 +1,119 @@
|
||||
package log
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/gookit/color"
|
||||
"github.com/gookit/slog"
|
||||
)
|
||||
|
||||
type Level int
|
||||
var std = &slog.SugaredLogger{}
|
||||
|
||||
const (
|
||||
LevelDebug Level = iota
|
||||
LevelWarn
|
||||
LevelError
|
||||
)
|
||||
|
||||
func (l Level) String() string {
|
||||
switch l {
|
||||
case LevelDebug:
|
||||
return "debug"
|
||||
case LevelError:
|
||||
return "error"
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
var (
|
||||
formatLogger *Logger
|
||||
levelMap = map[string]Level{
|
||||
"debug": LevelDebug,
|
||||
"error": LevelError,
|
||||
}
|
||||
)
|
||||
|
||||
func InitLog(l string) {
|
||||
formatLogger = newLog(os.Stdout).setLevel(levelMap[l]).setFlags(log.Lshortfile)
|
||||
}
|
||||
|
||||
type Logger struct {
|
||||
level Level
|
||||
l *log.Logger
|
||||
}
|
||||
|
||||
func newLog(w io.Writer) *Logger {
|
||||
return &Logger{
|
||||
l: log.New(w, "", 0),
|
||||
func Init(l string) {
|
||||
if l == "debug" {
|
||||
std = newStdLogger(slog.DebugLevel)
|
||||
} else {
|
||||
std = newStdLogger(slog.ErrorLevel)
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Logger) setFlags(flag int) *Logger {
|
||||
l.l.SetFlags(flag)
|
||||
return l
|
||||
const template = "[{{datetime}}] [{{level}}] [{{caller}}] {{message}} {{data}} {{extra}}\n"
|
||||
|
||||
// NewStdLogger instance
|
||||
func newStdLogger(level slog.Level) *slog.SugaredLogger {
|
||||
return slog.NewSugaredLogger(os.Stdout, level).Configure(func(sl *slog.SugaredLogger) {
|
||||
sl.SetName("stdLogger")
|
||||
sl.ReportCaller = true
|
||||
sl.CallerSkip = 3
|
||||
// auto enable console color
|
||||
sl.Formatter.(*slog.TextFormatter).EnableColor = color.SupportColor()
|
||||
sl.Formatter.(*slog.TextFormatter).SetTemplate(template)
|
||||
})
|
||||
}
|
||||
|
||||
func (l *Logger) setLevel(level Level) *Logger {
|
||||
l.level = level
|
||||
return l
|
||||
// Trace logs a message at level Trace
|
||||
func Trace(args ...interface{}) {
|
||||
std.Log(slog.TraceLevel, args...)
|
||||
}
|
||||
|
||||
func (l *Logger) doLog(level Level, v ...interface{}) bool {
|
||||
if level < l.level {
|
||||
return false
|
||||
// Tracef logs a message at level Trace
|
||||
func Tracef(format string, args ...interface{}) {
|
||||
std.Logf(slog.TraceLevel, format, args...)
|
||||
}
|
||||
|
||||
// Info logs a message at level Info
|
||||
func Info(args ...interface{}) {
|
||||
std.Log(slog.InfoLevel, args...)
|
||||
}
|
||||
|
||||
// Infof logs a message at level Info
|
||||
func Infof(format string, args ...interface{}) {
|
||||
std.Logf(slog.InfoLevel, format, args...)
|
||||
}
|
||||
|
||||
// Notice logs a message at level Notice
|
||||
func Notice(args ...interface{}) {
|
||||
std.Log(slog.NoticeLevel, args...)
|
||||
}
|
||||
|
||||
// Noticef logs a message at level Notice
|
||||
func Noticef(format string, args ...interface{}) {
|
||||
std.Logf(slog.NoticeLevel, format, args...)
|
||||
}
|
||||
|
||||
// Warn logs a message at level Warn
|
||||
func Warn(args ...interface{}) {
|
||||
std.Log(slog.WarnLevel, args...)
|
||||
}
|
||||
|
||||
// Warnf logs a message at level Warn
|
||||
func Warnf(format string, args ...interface{}) {
|
||||
std.Logf(slog.WarnLevel, format, args...)
|
||||
}
|
||||
|
||||
// Error logs a message at level Error
|
||||
func Error(args ...interface{}) {
|
||||
std.Log(slog.ErrorLevel, args...)
|
||||
}
|
||||
|
||||
// ErrorT logs a error type at level Error
|
||||
func ErrorT(err error) {
|
||||
if err != nil {
|
||||
std.Log(slog.ErrorLevel, err)
|
||||
}
|
||||
l.l.Output(3, level.String()+" "+fmt.Sprintln(v...))
|
||||
return true
|
||||
}
|
||||
|
||||
func (l *Logger) doLogf(level Level, format string, v ...interface{}) bool {
|
||||
if level < l.level {
|
||||
return false
|
||||
}
|
||||
l.l.Output(3, level.String()+" "+fmt.Sprintln(fmt.Sprintf(format, v...)))
|
||||
return true
|
||||
// Errorf logs a message at level Error
|
||||
func Errorf(format string, args ...interface{}) {
|
||||
std.Logf(slog.ErrorLevel, format, args...)
|
||||
}
|
||||
|
||||
func Debug(v ...interface{}) {
|
||||
formatLogger.doLog(LevelDebug, v...)
|
||||
// Debug logs a message at level Debug
|
||||
func Debug(args ...interface{}) {
|
||||
std.Log(slog.DebugLevel, args...)
|
||||
}
|
||||
|
||||
func Warn(v ...interface{}) {
|
||||
formatLogger.doLog(LevelWarn, v...)
|
||||
// Debugf logs a message at level Debug
|
||||
func Debugf(format string, args ...interface{}) {
|
||||
std.Logf(slog.DebugLevel, format, args...)
|
||||
}
|
||||
|
||||
func Error(v ...interface{}) {
|
||||
formatLogger.doLog(LevelError, v...)
|
||||
// Fatal logs a message at level Fatal
|
||||
func Fatal(args ...interface{}) {
|
||||
std.Log(slog.FatalLevel, args...)
|
||||
}
|
||||
|
||||
func Errorf(format string, v ...interface{}) {
|
||||
formatLogger.doLogf(LevelError, format, v...)
|
||||
// Fatalf logs a message at level Fatal
|
||||
func Fatalf(format string, args ...interface{}) {
|
||||
std.Logf(slog.FatalLevel, format, args...)
|
||||
}
|
||||
|
||||
func Warnf(format string, v ...interface{}) {
|
||||
formatLogger.doLogf(LevelWarn, format, v...)
|
||||
// Panic logs a message at level Panic
|
||||
func Panic(args ...interface{}) {
|
||||
std.Log(slog.PanicLevel, args...)
|
||||
}
|
||||
|
||||
func Debugf(format string, v ...interface{}) {
|
||||
formatLogger.doLogf(LevelDebug, format, v...)
|
||||
// Panicf logs a message at level Panic
|
||||
func Panicf(format string, args ...interface{}) {
|
||||
std.Logf(slog.PanicLevel, format, args...)
|
||||
}
|
||||
|
||||
// NewSugaredLogger(os.Stdout, DebugLevel).Configure(func(sl *SugaredLogger) {
|
||||
// sl.SetName("stdLogger")
|
||||
// sl.ReportCaller = true
|
||||
// // auto enable console color
|
||||
// sl.Formatter.(*TextFormatter).EnableColor = color.SupportColor()
|
||||
// sl.Formatter.SetCallerSkip(1)
|
||||
// })
|
||||
|
||||
Reference in New Issue
Block a user