From 8ee7ad2209502f43496ff65e32fbcd7573b13c26 Mon Sep 17 00:00:00 2001 From: Arnaud Porterie Date: Wed, 3 Feb 2016 10:30:17 -0800 Subject: [PATCH] Enable cross-platforms logout from Registry Signed-off-by: Arnaud Porterie --- api/client/login.go | 12 +----------- api/client/logout.go | 5 ++--- api/client/utils.go | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/api/client/login.go b/api/client/login.go index 7ea23d7809..f224ff98b1 100644 --- a/api/client/login.go +++ b/api/client/login.go @@ -11,7 +11,6 @@ import ( Cli "github.com/docker/docker/cli" flag "github.com/docker/docker/pkg/mflag" "github.com/docker/docker/pkg/term" - "github.com/docker/docker/registry" "github.com/docker/engine-api/client" "github.com/docker/engine-api/types" ) @@ -36,16 +35,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { cli.in = os.Stdin } - // The daemon `/info` endpoint informs us of the default registry being - // used. This is essential in cross-platforms environment, where for - // example a Linux client might be interacting with a Windows daemon, hence - // the default registry URL might be Windows specific. - serverAddress := registry.IndexServer - if info, err := cli.client.Info(); err != nil { - fmt.Fprintf(cli.out, "Warning: failed to get default registry endpoint from daemon (%v). Using system default: %s\n", err, serverAddress) - } else { - serverAddress = info.IndexServerAddress - } + serverAddress := cli.electAuthServer() if len(cmd.Args()) > 0 { serverAddress = cmd.Arg(0) } diff --git a/api/client/logout.go b/api/client/logout.go index 3753cbbe74..556f40faff 100644 --- a/api/client/logout.go +++ b/api/client/logout.go @@ -5,7 +5,6 @@ import ( Cli "github.com/docker/docker/cli" flag "github.com/docker/docker/pkg/mflag" - "github.com/docker/docker/registry" ) // CmdLogout logs a user out from a Docker registry. @@ -14,12 +13,12 @@ import ( // // Usage: docker logout [SERVER] func (cli *DockerCli) CmdLogout(args ...string) error { - cmd := Cli.Subcmd("logout", []string{"[SERVER]"}, Cli.DockerCommands["logout"].Description+".\nIf no server is specified \""+registry.IndexServer+"\" is the default.", true) + cmd := Cli.Subcmd("logout", []string{"[SERVER]"}, Cli.DockerCommands["logout"].Description+".\nIf no server is specified, the default is defined by the daemon.", true) cmd.Require(flag.Max, 1) cmd.ParseFlags(args, true) - serverAddress := registry.IndexServer + serverAddress := cli.electAuthServer() if len(cmd.Args()) > 0 { serverAddress = cmd.Arg(0) } diff --git a/api/client/utils.go b/api/client/utils.go index 7d1cc73500..913955983c 100644 --- a/api/client/utils.go +++ b/api/client/utils.go @@ -21,6 +21,20 @@ import ( registrytypes "github.com/docker/engine-api/types/registry" ) +func (cli *DockerCli) electAuthServer() string { + // The daemon `/info` endpoint informs us of the default registry being + // used. This is essential in cross-platforms environment, where for + // example a Linux client might be interacting with a Windows daemon, hence + // the default registry URL might be Windows specific. + serverAddress := registry.IndexServer + if info, err := cli.client.Info(); err != nil { + fmt.Fprintf(cli.out, "Warning: failed to get default registry endpoint from daemon (%v). Using system default: %s\n", err, serverAddress) + } else { + serverAddress = info.IndexServerAddress + } + return serverAddress +} + // encodeAuthToBase64 serializes the auth configuration as JSON base64 payload func encodeAuthToBase64(authConfig types.AuthConfig) (string, error) { buf, err := json.Marshal(authConfig)