diff --git a/.travis.yml b/.travis.yml index d6fcf63..1c8a520 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,7 @@ jobs: - docker build -t elyby/chrly:$DOCKER_TAG . - docker push elyby/chrly:$DOCKER_TAG - | - if [ -z ${TRAVIS_TAG+x} ]; then + if [ ! -z ${TRAVIS_TAG+x} ] && [[ "$TRAVIS_TAG" != *"-"* ]]; then docker tag elyby/chrly:$DOCKER_TAG elyby/chrly:latest docker push elyby/chrly:latest fi diff --git a/http/api.go b/http/api.go index ac737f1..0282f7a 100644 --- a/http/api.go +++ b/http/api.go @@ -18,20 +18,11 @@ import ( "github.com/thedevsaddam/govalidator" ) +//noinspection GoSnakeCaseUsage +const UUID_ANY = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" +var regexUuidAny = regexp.MustCompile(UUID_ANY) + func init() { - govalidator.AddCustomRule("md5", func(field string, rule string, message string, value interface{}) error { - val := []byte(value.(string)) - if ok, _ := regexp.Match(`^[a-f0-9]{32}$`, val); !ok { - if message == "" { - message = fmt.Sprintf("The %s field must be a valid md5 hash", field) - } - - return errors.New(message) - } - - return nil - }) - govalidator.AddCustomRule("skinUploadingNotAvailable", func(field string, rule string, message string, value interface{}) error { if message == "" { message = "Skin uploading is temporary unavailable" @@ -39,6 +30,20 @@ func init() { return errors.New(message) }) + + // Add ability to validate any possible uuid form + govalidator.AddCustomRule("uuid_any", func(field string, rule string, message string, value interface{}) error { + str := value.(string) + if !regexUuidAny.MatchString(str) { + if message == "" { + message = fmt.Sprintf("The %s field must contain valid UUID", field) + } + + return errors.New(message) + } + + return nil + }) } func (cfg *Config) PostSkin(resp http.ResponseWriter, req *http.Request) { @@ -152,11 +157,11 @@ func validatePostSkinRequest(request *http.Request) map[string][]string { validationRules := govalidator.MapData{ "identityId": {"required", "numeric", "min:1"}, "username": {"required"}, - "uuid": {"required", "uuid"}, + "uuid": {"required", "uuid_any"}, "skinId": {"required", "numeric", "min:1"}, "url": {"url"}, "file:skin": {"ext:png", "size:24576", "mime:image/png"}, - "hash": {"md5"}, + "hash": {}, "is1_8": {"bool"}, "isSlim": {"bool"}, } diff --git a/http/api_test.go b/http/api_test.go index e0f2fee..cc2cf6f 100644 --- a/http/api_test.go +++ b/http/api_test.go @@ -268,7 +268,6 @@ func TestConfig_PostSkin_RequiredFields(t *testing.T) { config, mocks := setupMocks(ctrl) form := url.Values{ - "hash": {"this is not md5"}, "mojangTextures": {"someBase64EncodedString"}, } @@ -307,9 +306,6 @@ func TestConfig_PostSkin_RequiredFields(t *testing.T) { "The uuid field is required", "The uuid field must contain valid UUID" ], - "hash": [ - "The hash field must be a valid md5 hash" - ], "url": [ "One of url or skin should be provided, but not both" ],