mirror of
https://github.com/kgretzky/evilginx2
synced 2026-06-08 15:15:53 +00:00
162 lines
3.3 KiB
Go
162 lines
3.3 KiB
Go
package log
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/chzyer/readline"
|
|
"github.com/fatih/color"
|
|
)
|
|
|
|
var stdout io.Writer = color.Output
|
|
var g_rl *readline.Instance = nil
|
|
var debug_output = true
|
|
var mtx_log *sync.Mutex = &sync.Mutex{}
|
|
|
|
const (
|
|
DEBUG = iota
|
|
INFO
|
|
IMPORTANT
|
|
WARNING
|
|
ERROR
|
|
FATAL
|
|
SUCCESS
|
|
)
|
|
|
|
var LogLabels = map[int]string{
|
|
DEBUG: "dbg",
|
|
INFO: "inf",
|
|
IMPORTANT: "imp",
|
|
WARNING: "war",
|
|
ERROR: "err",
|
|
FATAL: "!!!",
|
|
SUCCESS: "+++",
|
|
}
|
|
|
|
func DebugEnable(enable bool) {
|
|
debug_output = enable
|
|
}
|
|
|
|
func SetOutput(o io.Writer) {
|
|
stdout = o
|
|
}
|
|
|
|
func SetReadline(rl *readline.Instance) {
|
|
g_rl = rl
|
|
}
|
|
|
|
func GetOutput() io.Writer {
|
|
return stdout
|
|
}
|
|
|
|
func NullLogger() *log.Logger {
|
|
return log.New(io.Discard, "", 0)
|
|
}
|
|
|
|
func refreshReadline() {
|
|
if g_rl != nil {
|
|
g_rl.Refresh()
|
|
}
|
|
}
|
|
|
|
func Debug(format string, args ...interface{}) {
|
|
mtx_log.Lock()
|
|
defer mtx_log.Unlock()
|
|
|
|
if debug_output {
|
|
fmt.Fprint(stdout, format_msg(DEBUG, format+"\n", args...))
|
|
refreshReadline()
|
|
}
|
|
}
|
|
|
|
func Info(format string, args ...interface{}) {
|
|
mtx_log.Lock()
|
|
defer mtx_log.Unlock()
|
|
|
|
fmt.Fprint(stdout, format_msg(INFO, format+"\n", args...))
|
|
refreshReadline()
|
|
}
|
|
|
|
func Important(format string, args ...interface{}) {
|
|
mtx_log.Lock()
|
|
defer mtx_log.Unlock()
|
|
|
|
fmt.Fprint(stdout, format_msg(IMPORTANT, format+"\n", args...))
|
|
refreshReadline()
|
|
}
|
|
|
|
func Warning(format string, args ...interface{}) {
|
|
mtx_log.Lock()
|
|
defer mtx_log.Unlock()
|
|
|
|
fmt.Fprint(stdout, format_msg(WARNING, format+"\n", args...))
|
|
refreshReadline()
|
|
}
|
|
|
|
func Error(format string, args ...interface{}) {
|
|
mtx_log.Lock()
|
|
defer mtx_log.Unlock()
|
|
|
|
fmt.Fprint(stdout, format_msg(ERROR, format+"\n", args...))
|
|
refreshReadline()
|
|
}
|
|
|
|
func Fatal(format string, args ...interface{}) {
|
|
mtx_log.Lock()
|
|
defer mtx_log.Unlock()
|
|
|
|
fmt.Fprint(stdout, format_msg(FATAL, format+"\n", args...))
|
|
refreshReadline()
|
|
}
|
|
|
|
func Success(format string, args ...interface{}) {
|
|
mtx_log.Lock()
|
|
defer mtx_log.Unlock()
|
|
|
|
fmt.Fprint(stdout, format_msg(SUCCESS, format+"\n", args...))
|
|
refreshReadline()
|
|
}
|
|
|
|
func Printf(format string, args ...interface{}) {
|
|
mtx_log.Lock()
|
|
defer mtx_log.Unlock()
|
|
|
|
fmt.Fprintf(stdout, format, args...)
|
|
refreshReadline()
|
|
}
|
|
|
|
func format_msg(lvl int, format string, args ...interface{}) string {
|
|
t := time.Now()
|
|
var sign, msg *color.Color
|
|
switch lvl {
|
|
case DEBUG:
|
|
sign = color.New(color.FgBlack, color.BgHiBlack)
|
|
msg = color.New(color.Reset, color.FgHiBlack)
|
|
case INFO:
|
|
sign = color.New(color.FgGreen, color.BgBlack)
|
|
msg = color.New(color.Reset)
|
|
case IMPORTANT:
|
|
sign = color.New(color.FgWhite, color.BgHiBlue)
|
|
//msg = color.New(color.Reset, color.FgHiBlue)
|
|
msg = color.New(color.Reset)
|
|
case WARNING:
|
|
sign = color.New(color.FgHiYellow, color.BgBlack)
|
|
//msg = color.New(color.Reset, color.FgYellow)
|
|
msg = color.New(color.Reset)
|
|
case ERROR:
|
|
sign = color.New(color.FgWhite, color.BgRed)
|
|
msg = color.New(color.Reset, color.FgRed)
|
|
case FATAL:
|
|
sign = color.New(color.FgBlack, color.BgRed)
|
|
msg = color.New(color.Reset, color.FgRed, color.Bold)
|
|
case SUCCESS:
|
|
sign = color.New(color.FgWhite, color.BgGreen)
|
|
msg = color.New(color.Reset, color.FgGreen)
|
|
}
|
|
time_clr := color.New(color.Reset)
|
|
return "\r[" + time_clr.Sprintf("%02d:%02d:%02d", t.Hour(), t.Minute(), t.Second()) + "] [" + sign.Sprintf("%s", LogLabels[lvl]) + "] " + msg.Sprintf(format, args...)
|
|
}
|