diff --git a/go.mod b/go.mod index 4077f64..554c0d7 100644 --- a/go.mod +++ b/go.mod @@ -9,8 +9,14 @@ require ( golang.org/x/net v0.35.0 ) +require ( + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect +) + require ( github.com/andybalholm/brotli v1.1.1 // indirect + github.com/fatih/color v1.18.0 github.com/gabriel-vasile/mimetype v1.4.8 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect diff --git a/go.sum b/go.sum index 33d0bab..c566760 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7X github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -18,6 +20,11 @@ github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IX github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -37,6 +44,8 @@ golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= diff --git a/main.go b/main.go index 714a2ff..ea79550 100644 --- a/main.go +++ b/main.go @@ -16,6 +16,7 @@ import ( "github.com/aykhans/dodo/requests" "github.com/aykhans/dodo/utils" "github.com/aykhans/dodo/validation" + "github.com/fatih/color" goValidator "github.com/go-playground/validator/v10" ) @@ -109,13 +110,13 @@ func main() { responses, err := requests.Run(ctx, requestConf) if err != nil { if customerrors.Is(err, customerrors.ErrInterrupt) { - utils.PrintlnC(utils.Colors.Yellow, err.Error()) + color.Yellow(err.Error()) return } else if customerrors.Is(err, customerrors.ErrNoInternet) { utils.PrintAndExit("No internet connection") return } - panic(err) + utils.PrintErrAndExit(err) } responses.Print() diff --git a/readers/cli.go b/readers/cli.go index af887c6..1047013 100644 --- a/readers/cli.go +++ b/readers/cli.go @@ -7,7 +7,7 @@ import ( "github.com/aykhans/dodo/config" . "github.com/aykhans/dodo/types" - "github.com/aykhans/dodo/utils" + "github.com/fatih/color" ) const usageText = `Usage: @@ -114,7 +114,7 @@ func CLIConfigReader() (*config.CLIConfig, error) { case "timeout", "t": var maxUint32 uint = 4294967295 if timeout > maxUint32 { - utils.PrintfC(utils.Colors.Yellow, "timeout value is too large, setting to %d\n", maxUint32) + color.Yellow("timeout value is too large, setting to %d", maxUint32) timeout = maxUint32 } cliConfig.Timeout = uint32(timeout) diff --git a/requests/client.go b/requests/client.go index 36a9859..3cbd281 100644 --- a/requests/client.go +++ b/requests/client.go @@ -11,6 +11,7 @@ import ( "github.com/aykhans/dodo/config" "github.com/aykhans/dodo/readers" "github.com/aykhans/dodo/utils" + "github.com/fatih/color" "github.com/valyala/fasthttp" "github.com/valyala/fasthttp/fasthttpproxy" ) @@ -73,18 +74,9 @@ func getClients( var yesOrNoDefault bool if activeProxyClientsCount == 0 { yesOrNoDefault = false - yesOrNoMessage = utils.Colored( - utils.Colors.Yellow, - "No active proxies found. Do you want to continue?", - ) + yesOrNoMessage = color.YellowString("No active proxies found. Do you want to continue?") } else { - yesOrNoMessage = utils.Colored( - utils.Colors.Yellow, - fmt.Sprintf( - "Found %d active proxies. Do you want to continue?", - activeProxyClientsCount, - ), - ) + yesOrNoMessage = color.YellowString("Found %d active proxies. Do you want to continue?", activeProxyClientsCount) } if !yes { response := readers.CLIYesOrNoReader("\n"+yesOrNoMessage, yesOrNoDefault) diff --git a/utils/print.go b/utils/print.go index b6fde8c..b4c9e00 100644 --- a/utils/print.go +++ b/utils/print.go @@ -3,46 +3,12 @@ package utils import ( "fmt" "os" + + "github.com/fatih/color" ) -var Colors = struct { - reset string - Red string - Green string - Yellow string - Orange string - Blue string - Magenta string - Cyan string - Gray string - White string -}{ - reset: "\033[0m", - Red: "\033[31m", - Green: "\033[32m", - Yellow: "\033[33m", - Orange: "\033[38;5;208m", - Blue: "\033[34m", - Magenta: "\033[35m", - Cyan: "\033[36m", - Gray: "\033[37m", - White: "\033[97m", -} - -func Colored(color string, a ...any) string { - return color + fmt.Sprint(a...) + Colors.reset -} - -func PrintfC(color string, format string, a ...any) { - fmt.Printf(Colored(color, format), a...) -} - -func PrintlnC(color string, a ...any) { - fmt.Println(Colored(color, a...)) -} - func PrintErr(err error) { - PrintlnC(Colors.Red, err.Error()) + color.New(color.FgRed).Fprintln(os.Stderr, err.Error()) } func PrintErrAndExit(err error) {