Skip to content

Commit

Permalink
Merge pull request #4899 from TimeIncOSS/f-base64-sha256
Browse files Browse the repository at this point in the history
config: Add base64sha256() function
  • Loading branch information
radeksimko committed Jan 30, 2016
2 parents 150c588 + 1018af5 commit 9db941a
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 5 deletions.
17 changes: 17 additions & 0 deletions config/interpolate_funcs.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
// Funcs is the mapping of built-in functions for configuration.
func Funcs() map[string]ast.Function {
return map[string]ast.Function{
"base64sha256": interpolationFuncBase64Sha256(),
"cidrhost": interpolationFuncCidrHost(),
"cidrnetmask": interpolationFuncCidrNetmask(),
"cidrsubnet": interpolationFuncCidrSubnet(),
Expand Down Expand Up @@ -605,6 +606,7 @@ func interpolationFuncSha1() ast.Function {
}
}

// hexadecimal representation of sha256 sum
func interpolationFuncSha256() ast.Function {
return ast.Function{
ArgTypes: []ast.Type{ast.TypeString},
Expand All @@ -629,3 +631,18 @@ func interpolationFuncTrimSpace() ast.Function {
},
}
}

func interpolationFuncBase64Sha256() ast.Function {
return ast.Function{
ArgTypes: []ast.Type{ast.TypeString},
ReturnType: ast.TypeString,
Callback: func(args []interface{}) (interface{}, error) {
s := args[0].(string)
h := sha256.New()
h.Write([]byte(s))
shaSum := h.Sum(nil)
encoded := base64.StdEncoding.EncodeToString(shaSum[:])
return encoded, nil
},
}
}
19 changes: 18 additions & 1 deletion config/interpolate_funcs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -849,7 +849,7 @@ func TestInterpolateFuncSha1(t *testing.T) {
func TestInterpolateFuncSha256(t *testing.T) {
testFunction(t, testFunctionConfig{
Cases: []testFunctionCase{
{
{ // hexadecimal representation of sha256 sum
`${sha256("test")}`,
"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
false,
Expand All @@ -870,6 +870,23 @@ func TestInterpolateFuncTrimSpace(t *testing.T) {
})
}

func TestInterpolateFuncBase64Sha256(t *testing.T) {
testFunction(t, testFunctionConfig{
Cases: []testFunctionCase{
{
`${base64sha256("test")}`,
"n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
false,
},
{ // This will differ because we're base64-encoding hex represantiation, not raw bytes
`${base64encode(sha256("test"))}`,
"OWY4NmQwODE4ODRjN2Q2NTlhMmZlYWEwYzU1YWQwMTVhM2JmNGYxYjJiMGI4MjJjZDE1ZDZjMTViMGYwMGEwOA==",
false,
},
},
})
}

type testFunctionConfig struct {
Cases []testFunctionCase
Vars map[string]ast.Variable
Expand Down
13 changes: 9 additions & 4 deletions website/source/docs/configuration/interpolation.html.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,17 @@ The supported built-in functions are:
* `base64encode(string)` - Returns a base64-encoded representation of the
given string.

* `sha1(string)` - Returns a SHA-1 hash representation of the
given string.
* `base64sha256(string)` - Returns a base64-encoded representation of raw
SHA-256 sum of the given string.
**This is not equivalent** of `base64encode(sha256(string))`
since `sha256()` returns hexadecimal representation.

* `sha1(string)` - Returns a (conventional) hexadecimal representation of the
SHA-1 hash of the given string.
Example: `"${sha1(concat(aws_vpc.default.tags.customer, "-s3-bucket"))}"`

* `sha256(string)` - Returns a SHA-256 hash representation of the
given string.
* `sha256(string)` - Returns a (conventional) hexadecimal representation of the
SHA-256 hash of the given string.
Example: `"${sha256(concat(aws_vpc.default.tags.customer, "-s3-bucket"))}"`

* `cidrhost(iprange, hostnum)` - Takes an IP address range in CIDR notation
Expand Down

0 comments on commit 9db941a

Please sign in to comment.