mirror of
https://github.com/ncarlier/webhookd.git
synced 2025-04-08 00:55:53 +00:00
60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
package tools
|
|
|
|
import (
|
|
"bytes"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
"unicode"
|
|
)
|
|
|
|
// ToSnakeCase convert string to snakecase.
|
|
func ToSnakeCase(in string) string {
|
|
runes := []rune(in)
|
|
length := len(runes)
|
|
|
|
var out []rune
|
|
for i := 0; i < length; i++ {
|
|
if i > 0 && unicode.IsUpper(runes[i]) && ((i+1 < length && unicode.IsLower(runes[i+1])) || unicode.IsLower(runes[i-1])) {
|
|
out = append(out, '_')
|
|
}
|
|
out = append(out, unicode.ToLower(runes[i]))
|
|
}
|
|
|
|
return strings.Replace(string(out), "-", "", -1)
|
|
}
|
|
|
|
// QueryParamsToShellVars convert URL query parameters to shell vars.
|
|
func QueryParamsToShellVars(q url.Values) []string {
|
|
var params []string
|
|
for k, v := range q {
|
|
var buf bytes.Buffer
|
|
value, err := url.QueryUnescape(strings.Join(v[:], ","))
|
|
if err != nil {
|
|
continue
|
|
}
|
|
buf.WriteString(ToSnakeCase(k))
|
|
buf.WriteString("=")
|
|
buf.WriteString(value)
|
|
params = append(params, buf.String())
|
|
}
|
|
return params
|
|
}
|
|
|
|
// 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(ToSnakeCase(k))
|
|
buf.WriteString("=")
|
|
buf.WriteString(value)
|
|
params = append(params, buf.String())
|
|
}
|
|
return params
|
|
}
|