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
Ship credential validation for 8.10 using direct REST from the Hub to the connector runtime (Option 1 in the parent epic). A connector author declares a check once on a configuration class; the Hub calls a runtime endpoint that resolves the stored configuration, runs the check, and returns SUCCESS / FAILURE / UNSUPPORTED at credential-creation time.
This is a complete, correctly engineered solution to a deliberately smaller problem: validating a credential for a runtime the cluster can reach directly. The typed SDK contract connector authors write against does not change when 8.11 swaps the transport for an engine-mediated channel — only the private endpoint underneath it does.
The design is already built and proven on the PoC branch; this ticket tracks hardening it to shippable quality and rolling out adoption.
In scope
Typed SDK contract ConfigurationValidator (returns success() / failure(code, message); a thrown exception becomes a failure result).
ConfigurationValidationRegistry — discovers, at startup, every @ConfigurationTemplate class that implements ConfigurationValidator, keyed by template id; duplicate ids fail the registry at startup.
ConfigurationValidationService — resolves the credentialRef FEEL expression, replaces secrets, deserializes into the registered class, calls validate().
POST /outbound/configurations/validate — private REST endpoint the Hub calls.
Element Template Generator changes: @ConfigurationTemplate and PropertyType.Configuration, DSL support, schema validation.
Connector adoption for the three reference connectors: AWS (via AwsCredentialConfiguration), REST (RestAuthenticationConfiguration), JDBC (JdbcConnectionConfiguration).
Trigger from Web Modeler or Desktop Modeler (Hub-triggered only, for cross-surface consistency).
Re-validation / "last checked" freshness.
Metadata lookup (dropdowns from live connector data) — removed from PDP-3433 scope.
Changes to configuration storage or template format (owned by PDP-3396).
Plain (non-connector) job workers.
Acceptance criteria
A configuration class can opt into validation by implementing ConfigurationValidator and nothing else.
At startup, the registry discovers all declared @ConfigurationTemplate + ConfigurationValidator classes; two classes claiming the same template id fail the registry at startup (not at request time).
POST /outbound/configurations/validate accepts {credentialId, credentialRef, tenantId} and returns {status: SUCCESS | FAILURE | UNSUPPORTED, code?, message?}.
An unregistered template id returns UNSUPPORTED; a resolution failure or a thrown validator exception returns FAILURE with a code and message.
Secrets are resolved for the request's tenant; tenant isolation holds (see security note below).
AWS: AwsCredentialConfiguration.validate() runs a real check (STS GetCallerIdentity) once; bound auth overrides inline auth, bound region drives config, an inline endpoint override is still respected.
JDBC: bound connection replaces inline connection fields entirely; exactly one of inline vs bound is present (enforced by a bean-validation constraint).
A bound configuration overrides the inline value; inline is the fallback — consistent across all three connectors.
Unit + integration test coverage for registry startup, endpoint contract, secret resolution, and each of the three connectors.
Technical breakdown
Owners are a starting proposal — please confirm/reassign. Only the epic DRI is currently known.
Out-of-band validation runs with no process instance and no element, so there is nothing to scope secret resolution against. ConfigurationValidationService resolves secrets for the request's tenant with SecretFilter.allowAll(). Tenant isolation still applies; process/element-level restriction does not, and cannot, in this path. This is a trade-off inherent to validating outside any process — it needs explicit security sign-off before GA, not a default-into.
Summary
Ship credential validation for 8.10 using direct REST from the Hub to the connector runtime (Option 1 in the parent epic). A connector author declares a check once on a configuration class; the Hub calls a runtime endpoint that resolves the stored configuration, runs the check, and returns
SUCCESS/FAILURE/UNSUPPORTEDat credential-creation time.This is a complete, correctly engineered solution to a deliberately smaller problem: validating a credential for a runtime the cluster can reach directly. The typed SDK contract connector authors write against does not change when 8.11 swaps the transport for an engine-mediated channel — only the private endpoint underneath it does.
The design is already built and proven on the PoC branch; this ticket tracks hardening it to shippable quality and rolling out adoption.
In scope
ConfigurationValidator(returnssuccess()/failure(code, message); a thrown exception becomes a failure result).ConfigurationValidationRegistry— discovers, at startup, every@ConfigurationTemplateclass that implementsConfigurationValidator, keyed by template id; duplicate ids fail the registry at startup.ConfigurationValidationService— resolves thecredentialRefFEEL expression, replaces secrets, deserializes into the registered class, callsvalidate().POST /outbound/configurations/validate— private REST endpoint the Hub calls.@ConfigurationTemplateandPropertyType.Configuration, DSL support, schema validation.AwsCredentialConfiguration), REST (RestAuthenticationConfiguration), JDBC (JdbcConnectionConfiguration).Out of scope (8.10)
Acceptance criteria
ConfigurationValidatorand nothing else.@ConfigurationTemplate+ConfigurationValidatorclasses; two classes claiming the same template id fail the registry at startup (not at request time).POST /outbound/configurations/validateaccepts{credentialId, credentialRef, tenantId}and returns{status: SUCCESS | FAILURE | UNSUPPORTED, code?, message?}.UNSUPPORTED; a resolution failure or a thrown validator exception returnsFAILUREwith a code and message.AwsCredentialConfiguration.validate()runs a real check (STSGetCallerIdentity) once; bound auth overrides inline auth, bound region drives config, an inline endpoint override is still respected.Technical breakdown
ConfigurationValidationRegistry,ConfigurationValidationService, REST controller, Spring wiring. DRI: ?@ConfigurationTemplate,PropertyType.Configuration, DSL, schema validation. DRI: ?SDK contract (for reference)
Security note (needs conscious sign-off)
Out-of-band validation runs with no process instance and no element, so there is nothing to scope secret resolution against.
ConfigurationValidationServiceresolves secrets for the request's tenant withSecretFilter.allowAll(). Tenant isolation still applies; process/element-level restriction does not, and cannot, in this path. This is a trade-off inherent to validating outside any process — it needs explicit security sign-off before GA, not a default-into.Links