add dockercfg secret types

This commit is contained in:
deads2k
2015-05-06 10:09:18 -04:00
parent d404a17f0a
commit be0f2d2930
9 changed files with 158 additions and 7 deletions

View File

@@ -147,17 +147,17 @@ func readDockerConfigFileFromBytes(contents []byte) (cfg DockerConfig, err error
return
}
// dockerConfigEntryWithAuth is used solely for deserializing the Auth field
// DockerConfigEntryWithAuth is used solely for deserializing the Auth field
// into a dockerConfigEntry during JSON deserialization.
type dockerConfigEntryWithAuth struct {
Username string
Password string
Email string
Auth string
type DockerConfigEntryWithAuth struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
Email string `json:"email,omitempty"`
Auth string `json:"auth,omitempty"`
}
func (ident *DockerConfigEntry) UnmarshalJSON(data []byte) error {
var tmp dockerConfigEntryWithAuth
var tmp DockerConfigEntryWithAuth
err := json.Unmarshal(data, &tmp)
if err != nil {
return err
@@ -194,3 +194,16 @@ func decodeDockerConfigFieldAuth(field string) (username, password string, err e
return
}
func (ident DockerConfigEntry) ConvertToDockerConfigCompatible() DockerConfigEntryWithAuth {
ret := DockerConfigEntryWithAuth{ident.Username, ident.Password, ident.Email, ""}
ret.Auth = encodeDockerConfigFieldAuth(ident.Username, ident.Password)
return ret
}
func encodeDockerConfigFieldAuth(username, password string) string {
fieldValue := username + ":" + password
return base64.StdEncoding.EncodeToString([]byte(fieldValue))
}

View File

@@ -166,3 +166,33 @@ func TestDecodeDockerConfigFieldAuth(t *testing.T) {
}
}
}
func TestDockerConfigEntryJSONCompatibleEncode(t *testing.T) {
tests := []struct {
input DockerConfigEntry
expect []byte
}{
// simple case, just decode the fields
{
expect: []byte(`{"username":"foo","password":"bar","email":"foo@example.com","auth":"Zm9vOmJhcg=="}`),
input: DockerConfigEntry{
Username: "foo",
Password: "bar",
Email: "foo@example.com",
},
},
}
for i, tt := range tests {
toEncode := tt.input.ConvertToDockerConfigCompatible()
actual, err := json.Marshal(toEncode)
if err != nil {
t.Errorf("case %d: unexpected error: %v", i, err)
}
if string(tt.expect) != string(actual) {
t.Errorf("case %d: expected %v, got %v", i, string(tt.expect), string(actual))
}
}
}