Skip to content

Commit 00c7731

Browse files
committed
fix(#4916): Improve component resolver
- Support URL query parameters when resolving components by given scheme - Do not resolve URLs that use parameter placeholder as a scheme - Properly extract scheme from URL that has query parameters
1 parent ecdda13 commit 00c7731

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

pkg/util/camel/camel_runtime_catalog.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,12 @@ func (c *RuntimeCatalog) IsResolvable(uri string) bool {
203203
return false
204204
}
205205

206-
if scheme := uriSplit[0]; strings.HasPrefix(scheme, "{{") && strings.HasSuffix(scheme, "}}") {
206+
scheme := uriSplit[0]
207+
if strings.Contains(scheme, "?") {
208+
scheme = strings.SplitN(scheme, "?", 2)[0]
209+
}
210+
211+
if strings.HasPrefix(scheme, "{{") && strings.HasSuffix(scheme, "}}") {
207212
// scheme is a property placeholder (e.g. {{url}}) which is not resolvable
208213
return false
209214
}

pkg/util/camel/camel_runtime_catalog_test.go

+25
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,28 @@ func TestHasLoaderByArtifact(t *testing.T) {
4646
assert.True(t, catalog.HasLoaderByArtifact("yaml-dsl"))
4747
assert.False(t, catalog.HasLoaderByArtifact("python-dsl"))
4848
}
49+
50+
func TestIsResolvable(t *testing.T) {
51+
catalog, err := DefaultCatalog()
52+
require.NoError(t, err)
53+
54+
testCases := []struct {
55+
desc string
56+
uri string
57+
expected bool
58+
}{
59+
{desc: "Basic", uri: "{{url}}", expected: false},
60+
{desc: "With query param placeholder", uri: "{{url}}?authMethod={{authMethod}}", expected: false},
61+
{desc: "With query param", uri: "{{url}}?authMethod=Basic", expected: false},
62+
{desc: "With masked AND url-encoded query params", uri: "{{url}}?authMethod=%7B%7BauthMethod%7D%7D", expected: false},
63+
}
64+
65+
for _, testCase := range testCases {
66+
t.Run(testCase.desc, func(t *testing.T) {
67+
if got := catalog.IsResolvable(testCase.uri); got != testCase.expected {
68+
t.Errorf("IsResolvable(%v) = %v, want %v", testCase.uri, got, testCase.expected)
69+
70+
}
71+
})
72+
}
73+
}

0 commit comments

Comments
 (0)