Merge branch 'master' into snssqs-cert-test-1971-deadletter
Signed-off-by: Roberto J Rojas <robertojrojas@gmail.com>
This commit is contained in:
commit
0e05463af9
|
@ -45,6 +45,8 @@ const (
|
||||||
TraceparentHeaderKey = "traceparent"
|
TraceparentHeaderKey = "traceparent"
|
||||||
TracestateHeaderKey = "tracestate"
|
TracestateHeaderKey = "tracestate"
|
||||||
TraceMetadataKey = "traceHeaders"
|
TraceMetadataKey = "traceHeaders"
|
||||||
|
securityToken = "securityToken"
|
||||||
|
securityTokenHeader = "securityTokenHeader"
|
||||||
)
|
)
|
||||||
|
|
||||||
// HTTPSource is a binding for an http url endpoint invocation
|
// HTTPSource is a binding for an http url endpoint invocation
|
||||||
|
@ -58,10 +60,12 @@ type HTTPSource struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type httpMetadata struct {
|
type httpMetadata struct {
|
||||||
URL string `mapstructure:"url"`
|
URL string `mapstructure:"url"`
|
||||||
MTLSClientCert string `mapstructure:"mtlsClientCert"`
|
MTLSClientCert string `mapstructure:"mtlsClientCert"`
|
||||||
MTLSClientKey string `mapstructure:"mtlsClientKey"`
|
MTLSClientKey string `mapstructure:"mtlsClientKey"`
|
||||||
MTLSRootCA string `mapstructure:"mtlsRootCA"`
|
MTLSRootCA string `mapstructure:"mtlsRootCA"`
|
||||||
|
SecurityToken string `mapstructure:"securityToken"`
|
||||||
|
SecurityTokenHeader string `mapstructure:"securityTokenHeader"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewHTTP returns a new HTTPSource.
|
// NewHTTP returns a new HTTPSource.
|
||||||
|
@ -233,6 +237,11 @@ func (h *HTTPSource) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*
|
||||||
request.Header.Set("Accept", "application/json; charset=utf-8")
|
request.Header.Set("Accept", "application/json; charset=utf-8")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set security token values if set.
|
||||||
|
if h.metadata.SecurityToken != "" && h.metadata.SecurityTokenHeader != "" {
|
||||||
|
request.Header.Set(h.metadata.SecurityTokenHeader, h.metadata.SecurityToken)
|
||||||
|
}
|
||||||
|
|
||||||
// Any metadata keys that start with a capital letter
|
// Any metadata keys that start with a capital letter
|
||||||
// are treated as request headers
|
// are treated as request headers
|
||||||
for mdKey, mdValue := range req.Metadata {
|
for mdKey, mdValue := range req.Metadata {
|
||||||
|
|
|
@ -11,7 +11,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package http_test
|
package http
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
@ -31,13 +31,12 @@ import (
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/dapr/components-contrib/bindings"
|
"github.com/dapr/components-contrib/bindings"
|
||||||
bindingHttp "github.com/dapr/components-contrib/bindings/http"
|
|
||||||
"github.com/dapr/components-contrib/metadata"
|
"github.com/dapr/components-contrib/metadata"
|
||||||
"github.com/dapr/kit/logger"
|
"github.com/dapr/kit/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestOperations(t *testing.T) {
|
func TestOperations(t *testing.T) {
|
||||||
opers := (*bindingHttp.HTTPSource)(nil).Operations()
|
opers := (*HTTPSource)(nil).Operations()
|
||||||
assert.Equal(t, []bindings.OperationKind{
|
assert.Equal(t, []bindings.OperationKind{
|
||||||
bindings.CreateOperation,
|
bindings.CreateOperation,
|
||||||
"get",
|
"get",
|
||||||
|
@ -132,7 +131,7 @@ func InitBinding(s *httptest.Server, extraProps map[string]string) (bindings.Out
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hs := bindingHttp.NewHTTP(logger.NewLogger("test"))
|
hs := NewHTTP(logger.NewLogger("test"))
|
||||||
err := hs.Init(m)
|
err := hs.Init(m)
|
||||||
return hs, err
|
return hs, err
|
||||||
}
|
}
|
||||||
|
@ -166,6 +165,44 @@ func TestNon2XXErrorsSuppressed(t *testing.T) {
|
||||||
verifyNon2XXErrorsSuppressed(t, hs, handler)
|
verifyNon2XXErrorsSuppressed(t, hs, handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSecurityTokenHeaderForwarded(t *testing.T) {
|
||||||
|
handler := NewHTTPHandler()
|
||||||
|
s := httptest.NewServer(handler)
|
||||||
|
defer s.Close()
|
||||||
|
|
||||||
|
t.Run("security token headers are forwarded", func(t *testing.T) {
|
||||||
|
hs, err := InitBinding(s, map[string]string{securityTokenHeader: "X-Token", securityToken: "12345"})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
req := TestCase{
|
||||||
|
input: "GET",
|
||||||
|
operation: "get",
|
||||||
|
path: "/",
|
||||||
|
err: "",
|
||||||
|
statusCode: 200,
|
||||||
|
}.ToInvokeRequest()
|
||||||
|
_, err = hs.Invoke(context.Background(), &req)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, "12345", handler.Headers["X-Token"])
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("security token headers are forwarded", func(t *testing.T) {
|
||||||
|
hs, err := InitBinding(s, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
req := TestCase{
|
||||||
|
input: "GET",
|
||||||
|
operation: "get",
|
||||||
|
path: "/",
|
||||||
|
err: "",
|
||||||
|
statusCode: 200,
|
||||||
|
}.ToInvokeRequest()
|
||||||
|
_, err = hs.Invoke(context.Background(), &req)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Empty(t, handler.Headers["X-Token"])
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestTraceHeadersForwarded(t *testing.T) {
|
func TestTraceHeadersForwarded(t *testing.T) {
|
||||||
handler := NewHTTPHandler()
|
handler := NewHTTPHandler()
|
||||||
s := httptest.NewServer(handler)
|
s := httptest.NewServer(handler)
|
||||||
|
@ -231,7 +268,7 @@ func InitBindingForHTTPS(s *httptest.Server, extraProps map[string]string) (bind
|
||||||
for k, v := range extraProps {
|
for k, v := range extraProps {
|
||||||
m.Properties[k] = v
|
m.Properties[k] = v
|
||||||
}
|
}
|
||||||
hs := bindingHttp.NewHTTP(logger.NewLogger("test"))
|
hs := NewHTTP(logger.NewLogger("test"))
|
||||||
err := hs.Init(m)
|
err := hs.Init(m)
|
||||||
return hs, err
|
return hs, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,3 +54,14 @@ metadata:
|
||||||
description: "The client certificate key to present to server to enable client verification"
|
description: "The client certificate key to present to server to enable client verification"
|
||||||
binding:
|
binding:
|
||||||
output: true
|
output: true
|
||||||
|
- name: securityToken
|
||||||
|
required: false
|
||||||
|
description: "The security token to include on an outgoing HTTP request as a header"
|
||||||
|
binding:
|
||||||
|
output: true
|
||||||
|
- name: securityTokenHeader
|
||||||
|
required: false
|
||||||
|
description: "The header name on an outgoing HTTP request for a security token"
|
||||||
|
binding:
|
||||||
|
output: true
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue