Add check for localhost in remote url. https://github.com/modelcontextprotocol/registry/discussions/274#discussioncomment-14124511 ## Motivation and Context We don't want authors to publish server with remote url set as localhost. ## How Has This Been Tested? It has been tested using UTs. ## Types of changes <!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update --------- Co-authored-by: Avish Porwal <avishporwal@microsoft.com> Co-authored-by: Adam Jones <domdomegg+git@gmail.com> Co-authored-by: Claude <noreply@anthropic.com>
50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package validators
|
|
|
|
import (
|
|
"net/url"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
// Regular expressions for validating repository URLs
|
|
// These regex patterns ensure the URL is in the format of a valid GitHub or GitLab repository
|
|
// For example: // - GitHub: https://github.com/user/repo
|
|
githubURLRegex = regexp.MustCompile(`^https?://(www\.)?github\.com/[\w.-]+/[\w.-]+/?$`)
|
|
gitlabURLRegex = regexp.MustCompile(`^https?://(www\.)?gitlab\.com/[\w.-]+/[\w.-]+/?$`)
|
|
)
|
|
|
|
// IsValidRepositoryURL checks if the given URL is valid for the specified repository source
|
|
func IsValidRepositoryURL(source RepositorySource, url string) bool {
|
|
switch source {
|
|
case SourceGitHub:
|
|
return githubURLRegex.MatchString(url)
|
|
case SourceGitLab:
|
|
return gitlabURLRegex.MatchString(url)
|
|
}
|
|
return false
|
|
}
|
|
|
|
// HasNoSpaces checks if a string contains no spaces
|
|
func HasNoSpaces(s string) bool {
|
|
return !strings.Contains(s, " ")
|
|
}
|
|
|
|
// IsValidURL checks if a URL is in valid format
|
|
func IsValidURL(rawURL string) bool {
|
|
// Parse the URL
|
|
u, err := url.Parse(rawURL)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
// Check if scheme is present (http or https)
|
|
if u.Scheme != "http" && u.Scheme != "https" {
|
|
return false
|
|
}
|
|
|
|
if u.Host == "" || u.Hostname() == "localhost" {
|
|
return false
|
|
}
|
|
return true
|
|
}
|