Skip to content

Commit

Permalink
Merge pull request #30 from buildtool/base64_buildtoolscontent
Browse files Browse the repository at this point in the history
bug: BUILDTOOLS_CONTENT from environment should always be base64 encoded
  • Loading branch information
peter-svensson authored Jan 10, 2020
2 parents 32c77ce + 4ef7d28 commit 19a1998
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
10 changes: 8 additions & 2 deletions pkg/config/config.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package config

import (
"encoding/base64"
"fmt"
"github.com/buildtool/build-tools/pkg/ci"
"github.com/buildtool/build-tools/pkg/registry"
"github.com/buildtool/build-tools/pkg/vcs"
"github.com/caarlos0/env"
"github.com/imdario/mergo"
"github.com/liamg/tml"
"github.com/pkg/errors"
"gopkg.in/yaml.v2"
"io"
"io/ioutil"
Expand Down Expand Up @@ -56,8 +58,12 @@ func Load(dir string, out io.Writer) (*Config, error) {

if content, ok := os.LookupEnv("BUILDTOOLS_CONTENT"); ok {
_, _ = fmt.Fprintln(out, "Parsing config from env: BUILDTOOLS_CONTENT")
if err := parseConfig([]byte(content), cfg); err != nil {
return cfg, err
if decoded, err := base64.StdEncoding.DecodeString(content); err != nil {
return nil, errors.Wrap(err, "Failed to decode content")
} else {
if err := parseConfig([]byte(decoded), cfg); err != nil {
return cfg, err
}
}
} else {
err := parseConfigFiles(dir, out, func(dir string) error {
Expand Down
21 changes: 19 additions & 2 deletions pkg/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package config

import (
"bytes"
"encoding/base64"
"errors"
"fmt"
"github.com/buildtool/build-tools/pkg"
Expand Down Expand Up @@ -140,7 +141,7 @@ func TestLoad_BrokenYAML_From_Env(t *testing.T) {
defer func() { _ = os.RemoveAll(name) }()
yaml := `ci: []
`
defer pkg.SetEnv("BUILDTOOLS_CONTENT", yaml)()
defer pkg.SetEnv("BUILDTOOLS_CONTENT", base64.StdEncoding.EncodeToString([]byte(yaml)))()

out := &bytes.Buffer{}
cfg, err := Load(name, out)
Expand All @@ -152,6 +153,22 @@ func TestLoad_BrokenYAML_From_Env(t *testing.T) {
assert.Equal(t, "Parsing config from env: BUILDTOOLS_CONTENT\n", out.String())
}

func TestLoad_YAML_From_Env_Invalid_Base64(t *testing.T) {
name, _ := ioutil.TempDir(os.TempDir(), "build-tools")
defer func() { _ = os.RemoveAll(name) }()
yaml := `
environments:
local:
context: docker-desktop
`
defer pkg.SetEnv("BUILDTOOLS_CONTENT", yaml)()

out := &bytes.Buffer{}
_, err := Load(name, out)
assert.Error(t, err)
assert.EqualError(t, err, "Failed to decode content: illegal base64 data at input byte 13")
}

func TestLoad_YAML_From_Env(t *testing.T) {
name, _ := ioutil.TempDir(os.TempDir(), "build-tools")
defer func() { _ = os.RemoveAll(name) }()
Expand All @@ -163,7 +180,7 @@ environments:
context: docker-desktop
namespace: dev
`
defer pkg.SetEnv("BUILDTOOLS_CONTENT", yaml)()
defer pkg.SetEnv("BUILDTOOLS_CONTENT", base64.StdEncoding.EncodeToString([]byte(yaml)))()

out := &bytes.Buffer{}
cfg, err := Load(name, out)
Expand Down

0 comments on commit 19a1998

Please sign in to comment.