diff --git a/app/http/endpoints/api/forms/updateinputs.go b/app/http/endpoints/api/forms/updateinputs.go index d53b68a..95adc11 100644 --- a/app/http/endpoints/api/forms/updateinputs.go +++ b/app/http/endpoints/api/forms/updateinputs.go @@ -11,7 +11,6 @@ import ( "github.com/rxdn/gdl/objects/interaction/component" "sort" "strconv" - "strings" ) type ( @@ -59,12 +58,7 @@ func UpdateInputs(ctx *gin.Context) { return } - formatted := "Your input contained the following errors:" - for _, validationError := range validationErrors { - formatted += fmt.Sprintf("\n%s", validationError.Error()) - } - - formatted = strings.TrimSuffix(formatted, "\n") + formatted := "Your input contained the following errors:\n" + utils.FormatValidationErrors(validationErrors) ctx.JSON(400, utils.ErrorStr(formatted)) return } diff --git a/app/http/endpoints/api/integrations/createintegration.go b/app/http/endpoints/api/integrations/createintegration.go index 2a9819e..48807cf 100644 --- a/app/http/endpoints/api/integrations/createintegration.go +++ b/app/http/endpoints/api/integrations/createintegration.go @@ -1,13 +1,11 @@ package api import ( - "fmt" dbclient "github.com/TicketsBot/GoPanel/database" "github.com/TicketsBot/GoPanel/utils" "github.com/TicketsBot/database" "github.com/gin-gonic/gin" "github.com/go-playground/validator/v10" - "strings" ) type integrationCreateBody struct { @@ -64,12 +62,7 @@ func CreateIntegrationHandler(ctx *gin.Context) { return } - formatted := "Your input contained the following errors:" - for _, validationError := range validationErrors { - formatted += fmt.Sprintf("\n%s", validationError.Error()) - } - - formatted = strings.TrimSuffix(formatted, "\n") + formatted := "Your input contained the following errors:\n" + utils.FormatValidationErrors(validationErrors) ctx.JSON(400, utils.ErrorStr(formatted)) return } diff --git a/app/http/endpoints/api/panel/panelcreate.go b/app/http/endpoints/api/panel/panelcreate.go index 074e2bd..958dc4e 100644 --- a/app/http/endpoints/api/panel/panelcreate.go +++ b/app/http/endpoints/api/panel/panelcreate.go @@ -2,7 +2,6 @@ package api import ( "errors" - "fmt" "github.com/TicketsBot/GoPanel/botcontext" dbclient "github.com/TicketsBot/GoPanel/database" "github.com/TicketsBot/GoPanel/rpc" @@ -234,20 +233,14 @@ var urlRegex = regexp.MustCompile(`^https?://([-a-zA-Z0-9@:%._+~#=]{1,256})\.[a- var validate = validator.New() func (p *panelBody) doValidations(ctx *gin.Context, guildId uint64) bool { - err := validate.Struct(p) - if err != nil { + if err := validate.Struct(p); err != nil { validationErrors, ok := err.(validator.ValidationErrors) if !ok { ctx.JSON(500, utils.ErrorStr("An error occurred while validating the panel")) return false } - formatted := "Your input contained the following errors:" - for _, validationError := range validationErrors { - formatted += fmt.Sprintf("\n%s", validationError.Error()) - } - - formatted = strings.TrimSuffix(formatted, "\n") + formatted := "Your input contained the following errors:\n" + utils.FormatValidationErrors(validationErrors) ctx.JSON(400, utils.ErrorStr(formatted)) return false } diff --git a/app/http/endpoints/api/tags/tagcreate.go b/app/http/endpoints/api/tags/tagcreate.go index 24ce765..c79c7d1 100644 --- a/app/http/endpoints/api/tags/tagcreate.go +++ b/app/http/endpoints/api/tags/tagcreate.go @@ -1,7 +1,6 @@ package api import ( - "fmt" dbclient "github.com/TicketsBot/GoPanel/database" "github.com/TicketsBot/GoPanel/utils" "github.com/TicketsBot/GoPanel/utils/types" @@ -58,12 +57,7 @@ func CreateTag(ctx *gin.Context) { return } - formatted := "Your input contained the following errors:" - for _, validationError := range validationErrors { - formatted += fmt.Sprintf("\n%s", validationError.Error()) - } - - formatted = strings.TrimSuffix(formatted, "\n") + formatted := "Your input contained the following errors:\n" + utils.FormatValidationErrors(validationErrors) ctx.JSON(400, utils.ErrorStr(formatted)) return } diff --git a/utils/validationutils.go b/utils/validationutils.go new file mode 100644 index 0000000..9c23d5c --- /dev/null +++ b/utils/validationutils.go @@ -0,0 +1,39 @@ +package utils + +import ( + "fmt" + "github.com/go-playground/validator/v10" + "reflect" + "strings" +) + +func FormatValidationError(err validator.FieldError) string { + switch err.Tag() { + case "max": + if err.Type() == reflect.TypeOf("") { + return fmt.Sprintf("Field \"%s\" cannot exceed %s characters in length", err.Field(), err.Param()) + } else { + return fmt.Sprintf("Field \"%s\" cannot be greater than %s", err.Field(), err.Param()) + } + case "min": + if err.Type() == reflect.TypeOf("") { + return fmt.Sprintf("Field \"%s\" must be at least %s characters in length", err.Field(), err.Param()) + } else { + return fmt.Sprintf("Field \"%s\" cannot be less than %s", err.Field(), err.Param()) + } + case "required": + return fmt.Sprintf("Field \"%s\" is required", err.Field()) + default: + return err.Error() + } +} + +func FormatValidationErrors(errors validator.ValidationErrors) string { + var formatted string + for _, err := range errors { + formatted += FormatValidationError(err) + "\n" + } + + formatted = strings.TrimSuffix(formatted, "\n") + return formatted +}