package libs import ( "errors" "github.com/gin-gonic/gin" "github.com/go-playground/validator/v10" "golang-test/types" "net/http" "strings" ) type ValidationErrorsType struct { Errors map[string]string `json:"errors"` } func GetValidationErrors(errs validator.ValidationErrors) ValidationErrorsType { errors := make(map[string]string) for _, err := range errs { errors[err.Field()] = err.Error() } return ValidationErrorsType{Errors: errors} } func ToSnakeCase(str string) string { var result []rune for i, r := range str { if i > 0 && 'A' <= r && r <= 'Z' { result = append(result, '_') } result = append(result, r) } return strings.ToLower(string(result)) } func GetTokenFromHeaders(c *gin.Context) (string, error) { if c.Request.Header["Authorization"] == nil { return "", errors.New("Authorization required") } if len(strings.Split(c.Request.Header["Authorization"][0], " ")) < 2 { c.JSON(http.StatusUnauthorized, types.ErrorResponse{Message: "Invalid token. Please login"}) return "", errors.New("Authorization required") } token := strings.Split(c.Request.Header["Authorization"][0], " ")[1] return token, nil }