Add more validation for free-form server fields (#272)
<!-- Provide a brief summary of your changes --> The changes are intended to create validators for all the free-form fields. Please find the details of the validation of different field below. - Repository.Source: only github and gitlab is accepted. - Repository.Url - It should be a valid github or gitlab URL. Created regex for both. - Server.Name - Max 200 char can be there. Reverse domain name verification is part of another PR (not owned by me). - Package.Name - Max 200 char and no spaces. - Server.Description - Max 100 char. - Remote.Url - It should be valid URL. ## Motivation and Context <!-- Why is this change needed? What problem does it solve? --> The motivation was to make the code clean and add base code for more validator for different objects like Repository etc. https://github.com/modelcontextprotocol/registry/issues/97 ## How Has This Been Tested? It's tested via UTs. Added UT's for all the validations. ## Breaking Changes Yes ## Types of changes <!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [x] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update ## Checklist <!-- Go over all the following points, and put an `x` in all the boxes that apply. --> - [x] I have read the [MCP Documentation](https://modelcontextprotocol.io) - [ ] My code follows the repository's style guidelines - [x] New and existing tests pass locally - [x] I have added appropriate error handling - [ ] I have added or updated documentation as needed Co-authored-by: Avish Porwal <avishporwal@microsoft.com> Co-authored-by: Adam Jones <adamj+git@anthropic.com>
This commit is contained in:
parent
5fb6ee2982
commit
c3b72ef3a6
1 changed files with 484 additions and 12 deletions
50
internal/validators/utils.go
Normal file
50
internal/validators/utils.go
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
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 == "" {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
Loading…
Reference in a new issue