Skip to content

Commit b0310a9

Browse files
authored
Feat: Allow custom headers in CueX providers (#112)
Signed-off-by: Brian Kane <[email protected]>
1 parent 48aa9bb commit b0310a9

File tree

5 files changed

+51
-1
lines changed

5 files changed

+51
-1
lines changed

apis/cue/v1alpha1/package_types.go

+3
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ const (
5656
type Provider struct {
5757
Protocol ProviderProtocol `json:"protocol"`
5858
Endpoint string `json:"endpoint"`
59+
// +optional
60+
// +kubebuilder:default={}
61+
Header map[string]string `json:"header,omitempty"`
5962
}
6063

6164
// PackageList list for Package

apis/cue/v1alpha1/zz_generated.deepcopy.go

+8-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crds/cue.oam.dev_packages.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ spec:
6262
properties:
6363
endpoint:
6464
type: string
65+
header:
66+
additionalProperties:
67+
type: string
68+
default: {}
69+
type: object
6570
protocol:
6671
description: ProviderProtocol the protocol type for external Provider
6772
type: string

cue/cuex/runtime/provider.go

+3
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ func (in *ExternalProviderFn) Call(ctx context.Context, value cue.Value) (cue.Va
9494
return value, err
9595
}
9696
req.Header.Set("Content-Type", runtime.ContentTypeJSON)
97+
for k, v := range in.Header {
98+
req.Header.Set(k, v)
99+
}
97100
resp, err := DefaultClient.Get().Do(req.WithContext(ctx))
98101
if err != nil {
99102
return value, err

cue/cuex/runtime/provider_test.go

+32
Original file line numberDiff line numberDiff line change
@@ -187,3 +187,35 @@ func TestNativeProviderFn(t *testing.T) {
187187
require.NoError(t, err)
188188
require.Equal(t, "s", s)
189189
}
190+
191+
func TestProviderCustomHeader(t *testing.T) {
192+
headerVal := "123"
193+
headers := map[string]string{
194+
"x-api-key": headerVal,
195+
}
196+
197+
server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
198+
apiKeyFromHeader := request.Header.Get("x-api-key")
199+
require.Equal(t, headerVal, apiKeyFromHeader)
200+
writer.WriteHeader(200)
201+
writer.Write([]byte("{}"))
202+
}))
203+
defer server.Close()
204+
205+
prd := runtime.ExternalProviderFn{
206+
Provider: v1alpha1.Provider{
207+
Protocol: v1alpha1.ProtocolHTTP,
208+
Endpoint: server.URL,
209+
Header: headers,
210+
},
211+
}
212+
v := cuecontext.New().CompileString(`{
213+
$params: input: "value"
214+
$returns?: {
215+
output?: string
216+
...
217+
}
218+
}`)
219+
_, err := prd.Call(context.Background(), v)
220+
require.NoError(t, err, "call to ExternalProviderFn failed")
221+
}

0 commit comments

Comments
 (0)