Add B64decode expr helper (#2183)
This commit is contained in:
parent
8f71edaadd
commit
a753ea6981
3 changed files with 72 additions and 1 deletions
|
@ -384,6 +384,13 @@ var exprFuncs = []exprCustomFunc{
|
|||
new(func(string, ...interface{}) bool),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "B64Decode",
|
||||
function: B64Decode,
|
||||
signature: []interface{}{
|
||||
new(func(string) string),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
//go 1.20 "CutPrefix": strings.CutPrefix,
|
||||
|
|
|
@ -1304,5 +1304,59 @@ func TestToString(t *testing.T) {
|
|||
require.Equal(t, tc.expected, output)
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestB64Decode(t *testing.T) {
|
||||
err := Init(nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
value interface{}
|
||||
expected string
|
||||
expr string
|
||||
expectedBuildErr bool
|
||||
expectedRuntimeErr bool
|
||||
}{
|
||||
{
|
||||
name: "B64Decode() test: valid string",
|
||||
value: "Zm9v",
|
||||
expected: "foo",
|
||||
expr: `B64Decode(value)`,
|
||||
expectedBuildErr: false,
|
||||
},
|
||||
{
|
||||
name: "B64Decode() test: invalid string",
|
||||
value: "foo",
|
||||
expected: "",
|
||||
expr: `B64Decode(value)`,
|
||||
expectedBuildErr: false,
|
||||
expectedRuntimeErr: true,
|
||||
},
|
||||
{
|
||||
name: "B64Decode() test: invalid type",
|
||||
value: 1,
|
||||
expected: "",
|
||||
expr: `B64Decode(value)`,
|
||||
expectedBuildErr: true,
|
||||
},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
tc := tc
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
vm, err := expr.Compile(tc.expr, GetExprOptions(map[string]interface{}{"value": tc.value})...)
|
||||
if tc.expectedBuildErr {
|
||||
assert.Error(t, err)
|
||||
return
|
||||
}
|
||||
assert.NoError(t, err)
|
||||
output, err := expr.Run(vm, map[string]interface{}{"value": tc.value})
|
||||
if tc.expectedRuntimeErr {
|
||||
assert.Error(t, err)
|
||||
return
|
||||
}
|
||||
assert.NoError(t, err)
|
||||
require.Equal(t, tc.expected, output)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package exprhelpers
|
|||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/url"
|
||||
|
@ -585,3 +586,12 @@ func Match(params ...any) (any, error) {
|
|||
}
|
||||
return matched, nil
|
||||
}
|
||||
|
||||
func B64Decode(params ...any) (any, error) {
|
||||
encoded := params[0].(string)
|
||||
decoded, err := base64.StdEncoding.DecodeString(encoded)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(decoded), nil
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue