Skip to content

Commit ca00d6a

Browse files
committed
[Starlark] Add base64_encode and base64_decode builtins
Signed-off-by: s3rj1k <evasive.gyron@gmail.com>
1 parent cbe5e55 commit ca00d6a

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

pkg/provisioner/starlark/starlib/builtins.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"context"
2020
"crypto/tls"
2121
"crypto/x509"
22+
"encoding/base64"
2223
"encoding/json"
2324
"errors"
2425
"fmt"
@@ -59,10 +60,41 @@ func Builtins() starlark.StringDict {
5960
"read_file": starlark.NewBuiltin("read_file", builtinReadFile),
6061
"yaml_decode": starlark.NewBuiltin("yaml_decode", builtinYAMLDecode),
6162
"yaml_encode": starlark.NewBuiltin("yaml_encode", builtinYAMLEncode),
63+
"base64_encode": starlark.NewBuiltin("base64_encode", builtinBase64Encode),
64+
"base64_decode": starlark.NewBuiltin("base64_decode", builtinBase64Decode),
6265
"read_host_secret": starlark.NewBuiltin("read_host_secret", builtinReadHostSecret),
6366
}
6467
}
6568

69+
// Starlark base64_encode(string): return standard base64 of the input (UTF-8 / byte string).
70+
func builtinBase64Encode(_ *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, _ []starlark.Tuple) (starlark.Value, error) {
71+
var s starlark.String
72+
73+
err := starlark.UnpackPositionalArgs("base64_encode", args, nil, 1, &s)
74+
if err != nil {
75+
return starlark.None, err
76+
}
77+
78+
return starlark.String(base64.StdEncoding.EncodeToString([]byte(string(s)))), nil
79+
}
80+
81+
// Starlark base64_decode(string): return the raw bytes as a Starlark string; errors on invalid input.
82+
func builtinBase64Decode(_ *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, _ []starlark.Tuple) (starlark.Value, error) {
83+
var s starlark.String
84+
85+
err := starlark.UnpackPositionalArgs("base64_decode", args, nil, 1, &s)
86+
if err != nil {
87+
return starlark.None, err
88+
}
89+
90+
decoded, err := base64.StdEncoding.DecodeString(string(s))
91+
if err != nil {
92+
return starlark.None, fmt.Errorf("base64_decode: %w", err)
93+
}
94+
95+
return starlark.String(string(decoded)), nil
96+
}
97+
6698
// Starlark yaml_decode(string): parse YAML/JSON into a Starlark value.
6799
func builtinYAMLDecode(_ *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, _ []starlark.Tuple) (starlark.Value, error) {
68100
var s starlark.String

0 commit comments

Comments
 (0)