mirror of
https://github.com/ncarlier/webhookd.git
synced 2025-04-15 17:30:34 +00:00

- No external dependencies - No predefined directory structure - Able to launch any kind of shell script with custom parameters - Get script output as text event stream (SSE) - Using common Makefiles - Extends docker/dind Docker image
32 lines
786 B
Go
32 lines
786 B
Go
package tools
|
|
|
|
import (
|
|
"bytes"
|
|
"net/url"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
var matchFirstCap = regexp.MustCompile("(.)([A-Z][a-z]+)")
|
|
var matchAllCap = regexp.MustCompile("([a-z0-9])([A-Z])")
|
|
|
|
// ToSnakeCase convert string to snakecase.
|
|
func ToSnakeCase(str string) string {
|
|
snake := matchFirstCap.ReplaceAllString(str, "${1}_${2}")
|
|
snake = matchAllCap.ReplaceAllString(snake, "${1}_${2}")
|
|
return strings.ToLower(snake)
|
|
}
|
|
|
|
// 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
|
|
buf.WriteString(ToSnakeCase(k))
|
|
buf.WriteString("=")
|
|
buf.WriteString(url.QueryEscape(strings.Join(v[:], ",")))
|
|
params = append(params, buf.String())
|
|
}
|
|
return params
|
|
}
|