Skip to content

Commit

Permalink
Enhance Decoder to cope with plaintext (gardener#7993)
Browse files Browse the repository at this point in the history
* Enhance Decoder to cope with plaintext

* Add godoc
  • Loading branch information
majst01 authored May 31, 2023
1 parent e85964a commit 80d8748
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,6 @@ func CloudConfigFromOperatingSystemConfig(
// DataForFileContent returns the content for a FileContent, retrieving from a Secret if necessary.
func DataForFileContent(ctx context.Context, c client.Client, namespace string, content *extensionsv1alpha1.FileContent) ([]byte, error) {
if inline := content.Inline; inline != nil {
if len(inline.Encoding) == 0 {
return []byte(inline.Data), nil
}
return extensionsv1alpha1helper.Decode(inline.Encoding, []byte(inline.Data))
}

Expand Down
17 changes: 15 additions & 2 deletions pkg/apis/extensions/v1alpha1/helper/filecodec.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
)

var validFileCodecIDs = map[extensionsv1alpha1.FileCodecID]struct{}{
extensionsv1alpha1.PlainFileCodecID: {},
extensionsv1alpha1.B64FileCodecID: {},
extensionsv1alpha1.GZIPFileCodecID: {},
extensionsv1alpha1.GZIPB64FileCodecID: {},
Expand All @@ -37,12 +38,23 @@ type FileCodec interface {
}

var (
// PlainFileCodec is a noop FileCodec.
PlainFileCodec FileCodec = plainFileCodec{}
// B64FileCodec is the base64 FileCodec.
B64FileCodec FileCodec = b64FileCodec{}
// GZIPFileCodec is the gzip FileCodec.
GZIPFileCodec FileCodec = gzipFileCodec{}
)

type plainFileCodec struct{}

func (plainFileCodec) Encode(data []byte) ([]byte, error) {
return data, nil
}
func (plainFileCodec) Decode(data []byte) ([]byte, error) {
return data, nil
}

type b64FileCodec struct{}

var encoding = base64.StdEncoding
Expand Down Expand Up @@ -92,8 +104,9 @@ func ParseFileCodecID(s string) (extensionsv1alpha1.FileCodecID, error) {
}

var fileCodecIDToFileCodec = map[extensionsv1alpha1.FileCodecID]FileCodec{
extensionsv1alpha1.B64FileCodecID: B64FileCodec,
extensionsv1alpha1.GZIPFileCodecID: GZIPFileCodec,
extensionsv1alpha1.PlainFileCodecID: PlainFileCodec,
extensionsv1alpha1.B64FileCodecID: B64FileCodec,
extensionsv1alpha1.GZIPFileCodecID: GZIPFileCodec,
}

// FileCodecForID retrieves the FileCodec for the given FileCodecID.
Expand Down
19 changes: 19 additions & 0 deletions pkg/apis/extensions/v1alpha1/helper/helper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,22 @@ var _ = Describe("helper", func() {
})
})
})

var _ = Describe("filecodec", func() {
DescribeTable("#EncodeDecode",
func(input extensionsv1alpha1.FileContentInline) {
codeID, err := ParseFileCodecID(input.Encoding)
Expect(err).To(BeNil())
encoded, err := FileCodecForID(codeID).Encode([]byte(input.Data))
Expect(err).To(BeNil())

decoded, err := Decode(input.Encoding, encoded)
Expect(err).To(BeNil())
Expect(input.Data).To(Equal(string(decoded)))
},

Entry("plain", extensionsv1alpha1.FileContentInline{Encoding: "", Data: "plain data input"}),
Entry("base64", extensionsv1alpha1.FileContentInline{Encoding: "b64", Data: "base64 data input"}),
Entry("gzip", extensionsv1alpha1.FileContentInline{Encoding: "gzip", Data: "gzip data input"}),
)
})
2 changes: 2 additions & 0 deletions pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,8 @@ const ContainerDRuntimeContainersBinFolder = "/var/bin/containerruntimes"
type FileCodecID string

const (
// PlainFileCodecID is the plain file codec id.
PlainFileCodecID FileCodecID = ""
// B64FileCodecID is the base64 file codec id.
B64FileCodecID FileCodecID = "b64"
// GZIPFileCodecID is the gzip file codec id.
Expand Down

0 comments on commit 80d8748

Please sign in to comment.