## Summary Added validation to reject server names with multiple slashes, ensuring consistency between JSON schema pattern and API validation. - Count slashes in parseServerName() and reject if > 1 - Add ErrMultipleSlashesInServerName error constant - Add unit tests in validators_test.go - Add integration test in publish_test.go ## Motivation and Context Fixes #471. The JSON schema regex pattern `^[^/]+/[^/]+$` only allows a single slash in server names, but the API validation was not enforcing this constraint. This inconsistency allowed invalid server names like `com.example/server/path` to be published. ## How Has This Been Tested? - Unit tests added to verify slash validation logic - Integration tests added to verify the publish endpoint rejects multi-slash names - Tested various edge cases: trailing slashes, consecutive slashes, URL-like paths - All existing tests pass ## Breaking Changes None. This change only adds validation to reject previously invalid server names that shouldn't have been accepted. ## Types of changes - [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 ## Checklist - [x] I have read the [MCP Documentation](https://modelcontextprotocol.io) - [x] My code follows the repository's style guidelines - [x] New and existing tests pass locally - [x] I have added appropriate error handling - [x] I have added or updated documentation as needed ## Additional context - The fix ensures server names follow the intended format: `namespace/name` (e.g., `com.example/my-server`) - This validation aligns the API behavior with the existing JSON schema regex pattern - Test coverage includes edge cases like `com.example//server`, `com.example/server/`, and `a/b/c/d/e/f` - The error message clearly indicates the issue: "server name cannot contain multiple slashes"
This commit is contained in:
parent
b77e382b98
commit
63cf08efad
1 changed files with 342 additions and 5 deletions
|
|
@ -402,6 +402,12 @@ func parseServerName(serverJSON apiv0.ServerJSON) (string, error) {
|
|||
return "", fmt.Errorf("server name must be in format 'dns-namespace/name' (e.g., 'com.example.api/server')")
|
||||
}
|
||||
|
||||
// Check for multiple slashes - reject if found
|
||||
slashCount := strings.Count(name, "/")
|
||||
if slashCount > 1 {
|
||||
return "", ErrMultipleSlashesInServerName
|
||||
}
|
||||
|
||||
parts := strings.SplitN(name, "/", 2)
|
||||
if len(parts) != 2 || parts[0] == "" || parts[1] == "" {
|
||||
return "", fmt.Errorf("server name must be in format 'dns-namespace/name' with non-empty namespace and name parts")
|
||||
|
|
@ -504,4 +510,4 @@ func isValidHostForDomain(hostname, publisherDomain string) bool {
|
|||
}
|
||||
|
||||
return false
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue