🐛 fix: overrides error key in errsStr map

This commit is contained in:
Aykhan Shahsuvarov 2024-06-01 00:24:28 +04:00
parent f8e4180a15
commit 5d1b0626a9
2 changed files with 21 additions and 19 deletions

View File

@ -6,7 +6,6 @@ import (
"net/url" "net/url"
"strings" "strings"
"github.com/aykhans/dodo/config"
"github.com/go-playground/validator/v10" "github.com/go-playground/validator/v10"
) )
@ -24,36 +23,34 @@ func CobraErrorFormater(err error) error {
return err return err
} }
func shortenNamespace(namespace string) string {
return namespace[strings.Index(namespace, ".")+1:]
}
func ValidationErrorsFormater(errs validator.ValidationErrors) error { func ValidationErrorsFormater(errs validator.ValidationErrors) error {
errsStr := make(map[string]string) errsStr := make(map[string]string)
for _, err := range errs { for _, err := range errs {
switch err.Tag() { switch err.Tag() {
case "required": case "required":
errsStr[err.Field()] = fmt.Sprintf("Field \"%s\" is required", err.Field()) errsStr[shortenNamespace(err.Namespace())] = fmt.Sprintf("Field \"%s\" is required", err.Field())
case "gte": case "gte":
errsStr[err.Field()] = fmt.Sprintf("Value of \"%s\" must be greater than or equal to \"%s\"", err.Field(), err.Param()) errsStr[shortenNamespace(err.Namespace())] = fmt.Sprintf("Value of \"%s\" must be greater than or equal to \"%s\"", err.Field(), err.Param())
case "lte": case "lte":
errsStr[err.Field()] = fmt.Sprintf("Value of \"%s\" must be less than or equal to \"%s\"", err.Field(), err.Param()) errsStr[shortenNamespace(err.Namespace())] = fmt.Sprintf("Value of \"%s\" must be less than or equal to \"%s\"", err.Field(), err.Param())
case "filepath": case "filepath":
errsStr[err.Field()] = fmt.Sprintf("Invalid file path for \"%s\" field: \"%s\"", err.Field(), err.Value()) errsStr[shortenNamespace(err.Namespace())] = fmt.Sprintf("Invalid file path for \"%s\" field: \"%s\"", err.Field(), err.Value())
case "http_url": case "http_url":
errsStr[err.Field()] = fmt.Sprintf("Invalid URL for \"%s\" field: \"%s\"", err.Field(), err.Value()) errsStr[shortenNamespace(err.Namespace())] =
fmt.Sprintf("Invalid url for \"%s\" field: \"%s\"", err.Field(), err.Value())
// --------------------------------------| Custom validations |-------------------------------------- // --------------------------------------| Custom validations |--------------------------------------
case "http_method": case "http_method":
errsStr[err.Field()] = fmt.Sprintf("Invalid HTTP method for \"%s\" field: \"%s\"", err.Field(), err.Value()) errsStr[shortenNamespace(err.Namespace())] = fmt.Sprintf("Invalid HTTP method for \"%s\" field: \"%s\"", err.Field(), err.Value())
case "url_map_slice": case "proxy_url":
values := err.Value().(config.ProxySlice) errsStr[shortenNamespace(err.Namespace())] = fmt.Sprintf("Invalid proxy url for \"%s\" field: \"%s\" (it must be http, socks5 or socks5h)", err.Field(), err.Value())
for i, value := range values {
if _, ok := value["url"]; !ok {
errsStr[fmt.Sprintf("%s[%d]", err.Field(), i)] = fmt.Sprintf("Field \"url\" is required for \"%s\" field", err.Field())
} else {
errsStr[fmt.Sprintf("%s[%d]", err.Field(), i)] = fmt.Sprintf("Invalid url for \"%s\" field: \"%s\"", err.Field(), value["url"])
}
}
case "string_bool": case "string_bool":
errsStr[err.Field()] = fmt.Sprintf("Invalid value for \"%s\" field: \"%s\"", err.Field(), err.Value()) errsStr[shortenNamespace(err.Namespace())] = fmt.Sprintf("Invalid value for \"%s\" field: \"%s\"", err.Field(), err.Value())
default: default:
errsStr[err.Field()] = fmt.Sprintf("Invalid value for \"%s\" field: \"%s\"", err.Field(), err.Value()) errsStr[shortenNamespace(err.Namespace())] = fmt.Sprintf("Invalid value for \"%s\" field: \"%s\"", err.Field(), err.Value())
} }
} }
return NewValidationErrors(errsStr, errs) return NewValidationErrors(errsStr, errs)

View File

@ -2,6 +2,7 @@ package main
import ( import (
"os" "os"
"strings"
"time" "time"
"github.com/aykhans/dodo/config" "github.com/aykhans/dodo/config"
@ -35,7 +36,11 @@ func main() {
if err != nil { if err != nil {
utils.PrintErrAndExit(err) utils.PrintErrAndExit(err)
} }
if err := validator.StructPartial(jsonConfNew, "Proxies"); err != nil { if err := validator.StructFiltered(
jsonConfNew,
func(ns []byte) bool {
return strings.LastIndex(string(ns), "Proxies") == -1
}); err != nil {
utils.PrintErrAndExit( utils.PrintErrAndExit(
customerrors.ValidationErrorsFormater( customerrors.ValidationErrorsFormater(
err.(goValidator.ValidationErrors), err.(goValidator.ValidationErrors),