mirror of https://github.com/hashicorp/terraform
Merge pull request #10871 from curtisallen/issue_10786
provider/aws: fix double base64 encode Fixes #10786.pull/10944/head
commit
fce99df7fb
@ -0,0 +1,19 @@
|
||||
package aws
|
||||
|
||||
import "encoding/base64"
|
||||
|
||||
// Base64Encode encodes data if the input isn't already encoded using base64.StdEncoding.EncodeToString.
|
||||
// If the input is already base64 encoded, return the original input unchanged.
|
||||
func base64Encode(data []byte) string {
|
||||
// Check whether the data is already Base64 encoded; don't double-encode
|
||||
if isBase64Encoded(data) {
|
||||
return string(data)
|
||||
}
|
||||
// data has not been encoded encode and return
|
||||
return base64.StdEncoding.EncodeToString(data)
|
||||
}
|
||||
|
||||
func isBase64Encoded(data []byte) bool {
|
||||
_, err := base64.StdEncoding.DecodeString(string(data))
|
||||
return err == nil
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package aws
|
||||
|
||||
import "testing"
|
||||
|
||||
var base64encodingTests = []struct {
|
||||
in []byte
|
||||
out string
|
||||
}{
|
||||
// normal encoding case
|
||||
{[]byte("data should be encoded"), "ZGF0YSBzaG91bGQgYmUgZW5jb2RlZA=="},
|
||||
// base64 encoded input should result in no change of output
|
||||
{[]byte("ZGF0YSBzaG91bGQgYmUgZW5jb2RlZA=="), "ZGF0YSBzaG91bGQgYmUgZW5jb2RlZA=="},
|
||||
}
|
||||
|
||||
func TestBase64Encode(t *testing.T) {
|
||||
for _, tt := range base64encodingTests {
|
||||
out := base64Encode(tt.in)
|
||||
if out != tt.out {
|
||||
t.Errorf("base64Encode(%s) => %s, want %s", tt.in, out, tt.out)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue