@@ -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.
6799func builtinYAMLDecode (_ * starlark.Thread , _ * starlark.Builtin , args starlark.Tuple , _ []starlark.Tuple ) (starlark.Value , error ) {
68100 var s starlark.String
0 commit comments