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 }