github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/flag/registry_flags.go (about)

     1  package flag
     2  
     3  import (
     4  	"strings"
     5  
     6  	"golang.org/x/xerrors"
     7  
     8  	"github.com/devseccon/trivy/pkg/fanal/types"
     9  )
    10  
    11  var (
    12  	UsernameFlag = Flag{
    13  		Name:       "username",
    14  		ConfigName: "registry.username",
    15  		Default:    []string{},
    16  		Usage:      "username. Comma-separated usernames allowed.",
    17  	}
    18  	PasswordFlag = Flag{
    19  		Name:       "password",
    20  		ConfigName: "registry.password",
    21  		Default:    []string{},
    22  		Usage:      "password. Comma-separated passwords allowed. TRIVY_PASSWORD should be used for security reasons.",
    23  	}
    24  	RegistryTokenFlag = Flag{
    25  		Name:       "registry-token",
    26  		ConfigName: "registry.token",
    27  		Default:    "",
    28  		Usage:      "registry token",
    29  	}
    30  )
    31  
    32  type RegistryFlagGroup struct {
    33  	Username      *Flag
    34  	Password      *Flag
    35  	RegistryToken *Flag
    36  }
    37  
    38  type RegistryOptions struct {
    39  	Credentials   []types.Credential
    40  	RegistryToken string
    41  }
    42  
    43  func NewRegistryFlagGroup() *RegistryFlagGroup {
    44  	return &RegistryFlagGroup{
    45  		Username:      &UsernameFlag,
    46  		Password:      &PasswordFlag,
    47  		RegistryToken: &RegistryTokenFlag,
    48  	}
    49  }
    50  
    51  func (f *RegistryFlagGroup) Name() string {
    52  	return "Registry"
    53  }
    54  
    55  func (f *RegistryFlagGroup) Flags() []*Flag {
    56  	return []*Flag{
    57  		f.Username,
    58  		f.Password,
    59  		f.RegistryToken,
    60  	}
    61  }
    62  
    63  func (f *RegistryFlagGroup) ToOptions() (RegistryOptions, error) {
    64  	var credentials []types.Credential
    65  	users := getStringSlice(f.Username)
    66  	passwords := getStringSlice(f.Password)
    67  	if len(users) != len(passwords) {
    68  		return RegistryOptions{}, xerrors.New("the length of usernames and passwords must match")
    69  	}
    70  	for i, user := range users {
    71  		credentials = append(credentials, types.Credential{
    72  			Username: strings.TrimSpace(user),
    73  			Password: strings.TrimSpace(passwords[i]),
    74  		})
    75  	}
    76  
    77  	return RegistryOptions{
    78  		Credentials:   credentials,
    79  		RegistryToken: getString(f.RegistryToken),
    80  	}, nil
    81  }