[
https://issues.apache.org/jira/browse/CAMEL-26559?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-26559 started by Andrea Cosentino.
------------------------------------------------
> camel-opa/openfga/spiffe - add the security policy beans to the bean catalog
> ----------------------------------------------------------------------------
>
> Key: CAMEL-26559
> URL: https://issues.apache.org/jira/browse/CAMEL-26559
> Project: Camel
> Issue Type: Improvement
> Components: camel-jbang, camel-spiffe
> Reporter: Andrea Cosentino
> Assignee: Andrea Cosentino
> Priority: Minor
> Fix For: 4.24.0
>
>
> Found while checking how well the camel-spiffe, camel-opa and camel-openfga
> configuration can be written in YAML.
> h4. What happens
> A YAML route that declares one of these classes under {{beans:}} fails under
> {{camel run}} unless the component is added with {{--dep}}:
> {code:yaml}
> - beans:
> - name: opaPolicy
> type: org.apache.camel.component.opa.security.OpaSecurityPolicy
> properties:
> serverUrl: http://localhost:8181
> policyPath: authz/allow
> - route:
> from:
> uri: timer:tick?repeatCount=1
> steps:
> - policy:
> ref: opaPolicy
> steps:
> - log: "allowed"
> {code}
> {noformat}
> $ camel run policy.yaml --camel-version=4.23.0
> Error creating bean: opaPolicy of type:
> #class:org.apache.camel.component.opa.security.OpaSecurityPolicy: class
> org.apache.camel.component.opa.security.OpaSecurityPolicy was not found
> (check the package name; a class from another library needs its dependency
> added)
> Caused by: java.lang.ClassNotFoundException:
> org.apache.camel.component.opa.security.OpaSecurityPolicy
> {noformat}
> It still fails when the same file also has an {{opa:}} endpoint: YAML beans
> are created while the file is pre-parsed, before any endpoint downloads its
> component. {{OpenFgaSecurityPolicy}}, {{SpiffeSecurityPolicy}} and
> {{SpiffeSSLContextParameters}} behave the same. With {{--dep=camel:opa}} (or
> {{camel:openfga}}, {{camel:spiffe}}) every option binds and the routes start.
> h4. Why
> When a class is missing, {{DependencyDownloaderClassResolver}}
> (camel-kamelet-main) finds its jar through the known dependencies, which list
> each component by its component class only, or through the pojo-bean metadata
> in the catalog ({{CamelCatalog.pojoBeanModel}}). None of the four classes has
> a bean entry, so nothing tells {{camel run}} which jar to download.
> h4. Proposed fix
> Mark the four classes as catalog beans, the way
> {{ThrottlingExceptionRoutePolicy}} and the aggregation and idempotent
> repositories are: {{@Metadata(label = "bean", ...)}} on the class and
> {{@Metadata}} on each option, so they appear under the catalog's {{beans}}
> with their Maven coordinates and their options. That also documents the
> options for {{camel doc}}, the catalog MCP tools and other tooling that reads
> the catalog.
> {{OpenFgaSecurityPolicy}} keeps its options in an {{OpenFgaConfiguration}},
> and the bean generator reads annotated fields only, so the policy needs
> fields of its own, as {{OpaSecurityPolicy}} has.
> No other security policy ({{KeycloakSecurityPolicy}},
> {{ShiroSecurityPolicy}}, ...) is in the bean catalog either. That is left out
> of this issue.
> _Claude Code on behalf of oscerd_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)