diff --git a/config/interpolate_funcs.go b/config/interpolate_funcs.go index 5538763c0..0ca16b56c 100644 --- a/config/interpolate_funcs.go +++ b/config/interpolate_funcs.go @@ -2,7 +2,9 @@ package config import ( "bytes" + "crypto/sha1" "encoding/base64" + "encoding/hex" "errors" "fmt" "io/ioutil" @@ -38,6 +40,7 @@ func init() { "lower": interpolationFuncLower(), "replace": interpolationFuncReplace(), "split": interpolationFuncSplit(), + "sha1": interpolationFuncSha1(), "base64encode": interpolationFuncBase64Encode(), "base64decode": interpolationFuncBase64Decode(), "upper": interpolationFuncUpper(), @@ -586,3 +589,17 @@ func interpolationFuncUpper() ast.Function { }, } } + +func interpolationFuncSha1() ast.Function { + return ast.Function{ + ArgTypes: []ast.Type{ast.TypeString}, + ReturnType: ast.TypeString, + Callback: func(args []interface{}) (interface{}, error) { + s := args[0].(string) + h := sha1.New() + h.Write([]byte(s)) + hash := hex.EncodeToString(h.Sum(nil)) + return hash, nil + }, + } +} diff --git a/config/interpolate_funcs_test.go b/config/interpolate_funcs_test.go index 3aeb50db1..8c633361d 100644 --- a/config/interpolate_funcs_test.go +++ b/config/interpolate_funcs_test.go @@ -834,6 +834,18 @@ func TestInterpolateFuncUpper(t *testing.T) { }) } +func TestInterpolateFuncSha1(t *testing.T) { + testFunction(t, testFunctionConfig{ + Cases: []testFunctionCase{ + { + `${sha1("test")}`, + "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3", + false, + }, + }, + }) +} + type testFunctionConfig struct { Cases []testFunctionCase Vars map[string]ast.Variable