12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package registry
- import (
- "fmt"
- "golang.org/x/net/context"
- "github.com/docker/docker/cli"
- "github.com/docker/docker/cli/command"
- "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.DockerCli) *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")
- // Deprecated in 1.11: Should be removed in docker 1.13
- flags.StringVarP(&opts.email, "email", "e", "", "Email")
- flags.MarkDeprecated("email", "will be removed in 1.13.")
- return cmd
- }
- func runLogin(dockerCli *command.DockerCli, opts loginOptions) error {
- ctx := context.Background()
- clnt := dockerCli.Client()
- var (
- serverAddress string
- authServer = dockerCli.ElectAuthServer(ctx)
- )
- if opts.serverAddress != "" {
- serverAddress = opts.serverAddress
- } else {
- serverAddress = authServer
- }
- isDefaultRegistry := serverAddress == authServer
- authConfig, err := dockerCli.ConfigureAuth(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().Store(authConfig); err != nil {
- return fmt.Errorf("Error saving credentials: %v", err)
- }
- if response.Status != "" {
- fmt.Fprintln(dockerCli.Out(), response.Status)
- }
- return nil
- }
|