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 }