chore(api): code cleanup with generics

This commit is contained in:
Nicolas Carlier 2022-10-26 08:35:59 +02:00
parent 43c0885d0a
commit 109768f785
3 changed files with 10 additions and 27 deletions

View File

@ -11,10 +11,10 @@ import (
"github.com/ncarlier/webhookd/pkg/strcase" "github.com/ncarlier/webhookd/pkg/strcase"
) )
// URLValuesToShellVars convert URL values to shell vars. // HTTPParamsToShellVars convert URL values to shell vars.
func URLValuesToShellVars(q url.Values) []string { func HTTPParamsToShellVars[T url.Values | http.Header](params T) []string {
var params []string var result []string
for k, v := range q { for k, v := range params {
var buf bytes.Buffer var buf bytes.Buffer
value, err := url.QueryUnescape(strings.Join(v[:], ",")) value, err := url.QueryUnescape(strings.Join(v[:], ","))
if err != nil { if err != nil {
@ -23,26 +23,9 @@ func URLValuesToShellVars(q url.Values) []string {
buf.WriteString(strcase.ToSnake(k)) buf.WriteString(strcase.ToSnake(k))
buf.WriteString("=") buf.WriteString("=")
buf.WriteString(value) buf.WriteString(value)
params = append(params, buf.String()) result = append(result, buf.String())
} }
return params return result
}
// HTTPHeadersToShellVars convert HTTP headers to shell vars.
func HTTPHeadersToShellVars(h http.Header) []string {
var params []string
for k, v := range h {
var buf bytes.Buffer
value, err := url.QueryUnescape(strings.Join(v[:], ","))
if err != nil {
continue
}
buf.WriteString(strcase.ToSnake(k))
buf.WriteString("=")
buf.WriteString(value)
params = append(params, buf.String())
}
return params
} }
func nextRequestID() string { func nextRequestID() string {

View File

@ -90,8 +90,8 @@ func triggerWebhook(w http.ResponseWriter, r *http.Request) {
} }
} }
params := URLValuesToShellVars(r.Form) params := HTTPParamsToShellVars(r.Form)
params = append(params, HTTPHeadersToShellVars(r.Header)...) params = append(params, HTTPParamsToShellVars(r.Header)...)
// logger.Debug.Printf("API REQUEST: \"%s\" with params %s...\n", p, params) // logger.Debug.Printf("API REQUEST: \"%s\" with params %s...\n", p, params)

View File

@ -14,7 +14,7 @@ func TestQueryParamsToShellVars(t *testing.T) {
"string": []string{"foo"}, "string": []string{"foo"},
"list": []string{"foo", "bar"}, "list": []string{"foo", "bar"},
} }
values := api.URLValuesToShellVars(tc) values := api.HTTPParamsToShellVars(tc)
assert.ContainsStr(t, "string=foo", values, "") assert.ContainsStr(t, "string=foo", values, "")
assert.ContainsStr(t, "list=foo,bar", values, "") assert.ContainsStr(t, "list=foo,bar", values, "")
} }
@ -24,7 +24,7 @@ func TestHTTPHeadersToShellVars(t *testing.T) {
"Content-Type": []string{"text/plain"}, "Content-Type": []string{"text/plain"},
"X-Foo-Bar": []string{"foo", "bar"}, "X-Foo-Bar": []string{"foo", "bar"},
} }
values := api.HTTPHeadersToShellVars(tc) values := api.HTTPParamsToShellVars(tc)
assert.ContainsStr(t, "content_type=text/plain", values, "") assert.ContainsStr(t, "content_type=text/plain", values, "")
assert.ContainsStr(t, "x_foo_bar=foo,bar", values, "") assert.ContainsStr(t, "x_foo_bar=foo,bar", values, "")
} }