github.com/panekj/cli@v0.0.0-20230304125325-467dd2f3797e/cmd/docker/aliases.go (about)

     1  package main
     2  
     3  import (
     4  	"os"
     5  	"strings"
     6  
     7  	pluginmanager "github.com/docker/cli/cli-plugins/manager"
     8  	"github.com/docker/cli/cli/command"
     9  	"github.com/pkg/errors"
    10  	"github.com/spf13/cobra"
    11  )
    12  
    13  const (
    14  	keyBuilderAlias = "builder"
    15  )
    16  
    17  var allowedAliases = map[string]struct{}{
    18  	keyBuilderAlias: {},
    19  }
    20  
    21  func processAliases(dockerCli command.Cli, cmd *cobra.Command, args, osArgs []string) ([]string, []string, []string, error) {
    22  	var err error
    23  	var envs []string
    24  	aliasMap := dockerCli.ConfigFile().Aliases
    25  	aliases := make([][2][]string, 0, len(aliasMap))
    26  
    27  	for k, v := range aliasMap {
    28  		if _, ok := allowedAliases[k]; !ok {
    29  			return args, osArgs, envs, errors.Errorf("not allowed to alias %q (allowed: %#v)", k, allowedAliases)
    30  		}
    31  		if c, _, err := cmd.Find(strings.Split(v, " ")); err == nil {
    32  			if !pluginmanager.IsPluginCommand(c) {
    33  				return args, osArgs, envs, errors.Errorf("not allowed to alias with builtin %q as target", v)
    34  			}
    35  		}
    36  		aliases = append(aliases, [2][]string{{k}, {v}})
    37  	}
    38  
    39  	args, osArgs, envs, err = processBuilder(dockerCli, cmd, args, os.Args)
    40  	if err != nil {
    41  		return args, os.Args, envs, err
    42  	}
    43  
    44  	for _, al := range aliases {
    45  		var didChange bool
    46  		args, didChange = command.StringSliceReplaceAt(args, al[0], al[1], 0)
    47  		if didChange {
    48  			osArgs, _ = command.StringSliceReplaceAt(osArgs, al[0], al[1], -1)
    49  			break
    50  		}
    51  	}
    52  
    53  	return args, osArgs, envs, nil
    54  }