diff --git a/channel.go b/channel.go
index d64394cca..7a71a40d1 100644
--- a/channel.go
+++ b/channel.go
@@ -52,6 +52,9 @@ const (
// ConfigUseNational is a constant key for channel configs
ConfigUseNational = "use_national"
+
+ // ConfigSendHeaders is a constant key for channel configs
+ ConfigSendHeaders = "headers"
)
// ChannelType is our typing of the two char channel types
diff --git a/handlers/external/external.go b/handlers/external/external.go
index c447228d2..62ee86876 100644
--- a/handlers/external/external.go
+++ b/handlers/external/external.go
@@ -358,6 +358,14 @@ func (h *handler) SendMsg(ctx context.Context, msg courier.Msg) (courier.MsgStat
req.Header.Set("Authorization", authorization)
}
+ headers := msg.Channel().ConfigForKey(courier.ConfigSendHeaders, map[string]interface{}{}).(map[string]interface{})
+
+ if len(headers) > 0 {
+ for hKey, hValue := range headers {
+ req.Header.Set(hKey, fmt.Sprint(hValue))
+ }
+ }
+
rr, err := utils.MakeHTTPRequest(req)
// record our status and log
diff --git a/handlers/external/external_test.go b/handlers/external/external_test.go
index 1c4b84685..8a9343c68 100644
--- a/handlers/external/external_test.go
+++ b/handlers/external/external_test.go
@@ -423,11 +423,11 @@ func TestSending(t *testing.T) {
var jsonChannel = courier.NewMockChannel("8eb23e93-5ecb-45ba-b726-3b064e0c56ab", "EX", "2020", "US",
map[string]interface{}{
- "send_path": "",
- courier.ConfigSendBody: `{ "to":{{to}}, "text":{{text}}, "from":{{from}}, "quick_replies":{{quick_replies}} }`,
- courier.ConfigContentType: contentJSON,
- courier.ConfigSendMethod: http.MethodPost,
- courier.ConfigSendAuthorization: "Token ABCDEF",
+ "send_path": "",
+ courier.ConfigSendBody: `{ "to":{{to}}, "text":{{text}}, "from":{{from}}, "quick_replies":{{quick_replies}} }`,
+ courier.ConfigContentType: contentJSON,
+ courier.ConfigSendMethod: http.MethodPost,
+ courier.ConfigSendHeaders: map[string]interface{}{"Authorization": "Token ABCDEF", "foo": "bar"},
})
var xmlChannel = courier.NewMockChannel("8eb23e93-5ecb-45ba-b726-3b064e0c56ab", "EX", "2020", "US",
@@ -472,22 +472,22 @@ func TestSending(t *testing.T) {
var jsonChannel30IntLength = courier.NewMockChannel("8eb23e93-5ecb-45ba-b726-3b064e0c56ab", "EX", "2020", "US",
map[string]interface{}{
- "send_path": "",
- "max_length": 30,
- courier.ConfigSendBody: `{ "to":{{to}}, "text":{{text}}, "from":{{from}}, "quick_replies":{{quick_replies}} }`,
- courier.ConfigContentType: contentJSON,
- courier.ConfigSendMethod: http.MethodPost,
- courier.ConfigSendAuthorization: "Token ABCDEF",
+ "send_path": "",
+ "max_length": 30,
+ courier.ConfigSendBody: `{ "to":{{to}}, "text":{{text}}, "from":{{from}}, "quick_replies":{{quick_replies}} }`,
+ courier.ConfigContentType: contentJSON,
+ courier.ConfigSendMethod: http.MethodPost,
+ courier.ConfigSendHeaders: map[string]interface{}{"Authorization": "Token ABCDEF", "foo": "bar"},
})
var xmlChannel30IntLength = courier.NewMockChannel("8eb23e93-5ecb-45ba-b726-3b064e0c56ab", "EX", "2020", "US",
map[string]interface{}{
- "send_path": "",
- "max_length": 30,
- courier.ConfigSendBody: `{{to}}{{text}}{{from}}{{quick_replies}}`,
- courier.ConfigContentType: contentXML,
- courier.ConfigSendMethod: http.MethodPost,
- courier.ConfigSendAuthorization: "Token ABCDEF",
+ "send_path": "",
+ "max_length": 30,
+ courier.ConfigSendBody: `{{to}}{{text}}{{from}}{{quick_replies}}`,
+ courier.ConfigContentType: contentXML,
+ courier.ConfigSendMethod: http.MethodPost,
+ courier.ConfigSendHeaders: map[string]interface{}{"Authorization": "Token ABCDEF", "foo": "bar"},
})
RunChannelSendTestCases(t, getChannel30IntLength, newHandler(), longSendTestCases, nil)
@@ -503,4 +503,14 @@ func TestSending(t *testing.T) {
RunChannelSendTestCases(t, nationalChannel, newHandler(), nationalGetSendTestCases, nil)
+ var jsonChannelWithSendAuthorization = courier.NewMockChannel("8eb23e93-5ecb-45ba-b726-3b064e0c56ab", "EX", "2020", "US",
+ map[string]interface{}{
+ "send_path": "",
+ courier.ConfigSendBody: `{ "to":{{to}}, "text":{{text}}, "from":{{from}}, "quick_replies":{{quick_replies}} }`,
+ courier.ConfigContentType: contentJSON,
+ courier.ConfigSendMethod: http.MethodPost,
+ courier.ConfigSendAuthorization: "Token ABCDEF",
+ })
+ RunChannelSendTestCases(t, jsonChannelWithSendAuthorization, newHandler(), jsonSendTestCases, nil)
+
}