diff --git a/internal/validators/utils.go b/internal/validators/utils.go index 1cc83b3..512020b 100644 --- a/internal/validators/utils.go +++ b/internal/validators/utils.go @@ -43,7 +43,7 @@ func IsValidURL(rawURL string) bool { return false } - if u.Host == "" { + if u.Host == "" || u.Hostname() == "localhost" { return false } return true diff --git a/internal/validators/validators_test.go b/internal/validators/validators_test.go index af9cd0b..577a336 100644 --- a/internal/validators/validators_test.go +++ b/internal/validators/validators_test.go @@ -179,6 +179,46 @@ func TestValidate(t *testing.T) { }, expectedError: validators.ErrInvalidRemoteURL.Error(), }, + { + name: "remote with localhost url", + serverDetail: apiv0.ServerJSON{ + Name: "com.example/test-server", + Description: "A test server", + Repository: model.Repository{ + URL: "https://github.com/owner/repo", + Source: "github", + }, + VersionDetail: model.VersionDetail{ + Version: "1.0.0", + }, + Remotes: []model.Remote{ + { + URL: "http://localhost", + }, + }, + }, + expectedError: validators.ErrInvalidRemoteURL.Error(), + }, + { + name: "remote with localhost url with port", + serverDetail: apiv0.ServerJSON{ + Name: "com.example/test-server", + Description: "A test server", + Repository: model.Repository{ + URL: "https://github.com/owner/repo", + Source: "github", + }, + VersionDetail: model.VersionDetail{ + Version: "1.0.0", + }, + Remotes: []model.Remote{ + { + URL: "http://localhost:3000", + }, + }, + }, + expectedError: validators.ErrInvalidRemoteURL.Error(), + }, { name: "multiple remotes with one invalid", serverDetail: apiv0.ServerJSON{ @@ -311,16 +351,6 @@ func TestValidate_RemoteNamespaceMatch(t *testing.T) { expectError: true, errorMsg: "remote URL host api.github.com does not match publisher domain microsoft.com", }, - { - name: "localhost URLs allowed with any namespace", - serverDetail: apiv0.ServerJSON{ - Name: "com.example/test-server", - Remotes: []model.Remote{ - {URL: "http://localhost:3000/sse"}, - }, - }, - expectError: false, - }, { name: "invalid URL format", serverDetail: apiv0.ServerJSON{