Skip to content

[Bug]: An invalid vhost on a platform-api deployment returns 500 instead of a validation error #4166

Open

Description

@randilt

Please select the area the issue is related to

Platform API

Please select the aspect the issue is related to

Aspect/API (API backends, definitions, contracts, interfaces, OpenAPI)

Description

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: "bad_host": 500 {"code":"INTERNAL_ERROR","message":"An unexpected error occurred."}
  • 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

  1. Create a REST API in platform-api and attach a connected gateway to it (POST /api/v0.9/rest-apis/{id}/gateways).
  2. Send POST /api/v0.9/rest-apis/{id}/deployments with {"name": "d1", "base": "current", "gatewayId": "<gateway id>", "metadata": {"vhostMain": "bad_host"}}.
  3. 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions