The `docker login -e` / `docker login --email` option was deprecated in Docker 1.11 (https://github.com/moby/moby/releases/tag/v1.11.0) through aee260d4eb3aa0fc86ee5038010b7bbc24512ae5 (April 2016), and when used has been outputing a deprecation warning since; Flag --email has been deprecated, will be removed in 17.06. Originally this option was scheduled to be removed in docker 1.13, but extended to docker 17.06 due to a change in our deprecation policy. Given that only docker 1.10 and older use this flag (which is EOL, including for CS versions, as of February 2017), will now be removed. With this patch, `docker login` will now produce an Error if the flag is used. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
84 lines
2.0 KiB
Go
84 lines
2.0 KiB
Go
package registry
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"golang.org/x/net/context"
|
|
|
|
"github.com/docker/cli/cli"
|
|
"github.com/docker/cli/cli/command"
|
|
"github.com/docker/docker/registry"
|
|
"github.com/pkg/errors"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
type loginOptions struct {
|
|
serverAddress string
|
|
user string
|
|
password string
|
|
email string
|
|
}
|
|
|
|
// NewLoginCommand creates a new `docker login` command
|
|
func NewLoginCommand(dockerCli command.Cli) *cobra.Command {
|
|
var opts loginOptions
|
|
|
|
cmd := &cobra.Command{
|
|
Use: "login [OPTIONS] [SERVER]",
|
|
Short: "Log in to a Docker registry",
|
|
Long: "Log in to a Docker registry.\nIf no server is specified, the default is defined by the daemon.",
|
|
Args: cli.RequiresMaxArgs(1),
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
if len(args) > 0 {
|
|
opts.serverAddress = args[0]
|
|
}
|
|
return runLogin(dockerCli, opts)
|
|
},
|
|
}
|
|
|
|
flags := cmd.Flags()
|
|
|
|
flags.StringVarP(&opts.user, "username", "u", "", "Username")
|
|
flags.StringVarP(&opts.password, "password", "p", "", "Password")
|
|
|
|
return cmd
|
|
}
|
|
|
|
func runLogin(dockerCli command.Cli, opts loginOptions) error {
|
|
ctx := context.Background()
|
|
clnt := dockerCli.Client()
|
|
|
|
var (
|
|
serverAddress string
|
|
authServer = command.ElectAuthServer(ctx, dockerCli)
|
|
)
|
|
if opts.serverAddress != "" && opts.serverAddress != registry.DefaultNamespace {
|
|
serverAddress = opts.serverAddress
|
|
} else {
|
|
serverAddress = authServer
|
|
}
|
|
|
|
isDefaultRegistry := serverAddress == authServer
|
|
|
|
authConfig, err := command.ConfigureAuth(dockerCli, opts.user, opts.password, serverAddress, isDefaultRegistry)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
response, err := clnt.RegistryLogin(ctx, authConfig)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if response.IdentityToken != "" {
|
|
authConfig.Password = ""
|
|
authConfig.IdentityToken = response.IdentityToken
|
|
}
|
|
if err := dockerCli.CredentialsStore(serverAddress).Store(authConfig); err != nil {
|
|
return errors.Errorf("Error saving credentials: %v", err)
|
|
}
|
|
|
|
if response.Status != "" {
|
|
fmt.Fprintln(dockerCli.Out(), response.Status)
|
|
}
|
|
return nil
|
|
}
|