// getCredentialsFromStore executes the command to get the credentials from the native store. func (c *nativeStore) getCredentialsFromStore(serverAddress string) (types.AuthConfig, error) { var ret types.AuthConfig cmd := c.commandFn("get") cmd.Input(strings.NewReader(serverAddress)) out, err := cmd.Output() if err != nil { t := strings.TrimSpace(string(out)) // do not return an error if the credentials are not // in the keyckain. Let docker ask for new credentials. if t == errCredentialsNotFound.Error() { return ret, nil } logrus.Debugf("error getting credentials - err: %v, out: `%s`", err, t) return ret, fmt.Errorf(t) } var resp credentialsGetResponse if err := json.NewDecoder(bytes.NewReader(out)).Decode(&resp); err != nil { return ret, err } ret.Username = resp.Username ret.Password = resp.Password ret.ServerAddress = serverAddress return ret, nil }
// Store saves the given credentials in the file store. func (c *nativeStore) Store(authConfig types.AuthConfig) error { if err := c.storeCredentialsInStore(authConfig); err != nil { return err } authConfig.Username = "" authConfig.Password = "" // Fallback to old credential in plain text to save only the email return c.fileStore.Store(authConfig) }
// getCredentialsFromStore executes the command to get the credentials from the native store. func (c *nativeStore) getCredentialsFromStore(serverAddress string) (types.AuthConfig, error) { var ret types.AuthConfig creds, err := client.Get(c.programFunc, serverAddress) if err != nil { if credentials.IsErrCredentialsNotFound(err) { // do not return an error if the credentials are not // in the keyckain. Let docker ask for new credentials. return ret, nil } return ret, err } if creds.Username == tokenUsername { ret.IdentityToken = creds.Secret } else { ret.Password = creds.Secret ret.Username = creds.Username } ret.ServerAddress = serverAddress return ret, nil }