package cli import ( "log" "time" "code.crute.us/mcrute/golib/vault" "github.com/spf13/pflag" ) type VaultCredential struct { Path, Username, Password string } type TolerantPflagSet struct { *pflag.FlagSet } func (f *TolerantPflagSet) MayGetInt(n string) int { v, _ := f.GetInt(n) return v } func (f *TolerantPflagSet) MayGetBool(n string) bool { v, _ := f.GetBool(n) return v } func (f *TolerantPflagSet) MayGetString(n string) string { v, _ := f.GetString(n) return v } func (f *TolerantPflagSet) MayGetDuration(n string) time.Duration { v, _ := f.GetDuration(n) return v } func (f *TolerantPflagSet) MayGetStringSlice(n string) []string { v, _ := f.GetStringSlice(n) return v } func (f *TolerantPflagSet) MayGetVaultCredential(n string) VaultCredential { p := f.MayGetString(n) vk, err := vault.GetVaultKey(p) if err != nil { return VaultCredential{} } return VaultCredential{p, vk.Username, vk.Password} } func (f *TolerantPflagSet) MustGetVaultCredential(n string) VaultCredential { p := f.MayGetString(n) vk, err := vault.GetVaultKey(p) if err != nil { log.Fatalf("Error getting %s from vault: %w", n, err) } return VaultCredential{p, vk.Username, vk.Password} }