You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Bug]: An invalid vhost on a platform-api deployment returns 500 instead of a validation error #4166
Deploying a REST API through platform-api with an invalid metadata.vhostMain or metadata.vhostSandbox returns 500 INTERNAL_ERROR ("An unexpected error occurred."). It should return a 400 that names the invalid vhost. The value is a caller mistake, but the caller is told the server failed and is given no hint about what to fix.
Observed (POST /api/v0.9/rest-apis/{id}/deployments with base: current and a gatewayId)
metadata.vhostMain: "-api.example.com" (leading hyphen): the same 500.
metadata.vhostMain with a 64-character label: the same 500.
metadata.vhostSandbox: "bad_host": the same 500.
metadata.vhostMain: "_gateway_default_": 201, as expected.
Expected
A 400 with a validation error code and a message that says which vhost is invalid and why, as other deployment validation errors do (for example REST_API_DEPLOYMENT_VALIDATION_FAILED).
Cause platform-api/internal/service/deployment.go:331-357 rejects the value with a plain fmt.Errorf("invalid vhostMain in metadata: %s", …) (and the same for vhostSandbox, and for a non-string value). That is not a catalog error, so serviceError (platform-api/internal/handler/service_error.go:41-46) maps it to apperror.Internal. Using apperror.RESTAPIDeploymentValidationFailed.New(...) there, as deployment.go:188-191 already does for base, would return a 400.
Steps to Reproduce
Create a REST API in platform-api and attach a connected gateway to it (POST /api/v0.9/rest-apis/{id}/gateways).
Send POST /api/v0.9/rest-apis/{id}/deployments with {"name": "d1", "base": "current", "gatewayId": "<gateway id>", "metadata": {"vhostMain": "bad_host"}}.
The response is 500 INTERNAL_ERROR.
Severity Level of the Issue
Severity/Minor (Non-critical functionality. Can be fixed in future releases)
Environment Details (with versions)
Current main (e90cde4). Platform-api and gateway built from source and run by the IT suite (tests/framework), on macOS with Rancher Desktop.
Activity