Skip to content

Commit

Permalink
cmd/config: dedup source/dest cli flags
Browse files Browse the repository at this point in the history
  • Loading branch information
vs49688 committed Jan 31, 2022
1 parent ec7c830 commit 9c6d00d
Showing 1 changed file with 61 additions and 101 deletions.
162 changes: 61 additions & 101 deletions cmd/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,18 +58,18 @@ type CliConfig struct {
FetchMaxInterval time.Duration `json:"fetch_max_interval"`
}

func defaultIMAPConfig() CliIMAPConfig {
return CliIMAPConfig{
TLSSkipVerify: false,
Transport: "persistent",
Debug: false,
}
}

func DefaultConfig() CliConfig {
return CliConfig{
Source: CliIMAPConfig{
TLSSkipVerify: false,
Transport: "persistent",
Debug: false,
},
Dest: CliIMAPConfig{
TLSSkipVerify: false,
Transport: "persistent",
Debug: false,
},
Source: defaultIMAPConfig(),
Dest: defaultIMAPConfig(),
LogLevel: "info",
LogFormat: "text",
IDLEFallbackInterval: time.Minute,
Expand All @@ -80,116 +80,74 @@ func DefaultConfig() CliConfig {
}
}

func (cfg *CliConfig) Parameters() []cli.Flag {
def := DefaultConfig()
func (cfg *CliIMAPConfig) makeIMAPParameters(lowerPrefix string) []cli.Flag {
def := defaultIMAPConfig()
upperPrefix := strings.ToUpper(lowerPrefix)

return []cli.Flag{
&cli.StringFlag{
Name: "source-url",
Usage: "source imap url",
EnvVars: []string{"MAILPUMP_SOURCE_URL"},
Destination: &cfg.Source.URL,
Name: fmt.Sprintf("%v-url", lowerPrefix),
Usage: fmt.Sprintf("%v imap url", lowerPrefix),
EnvVars: []string{fmt.Sprintf("MAILPUMP_%v_URL", upperPrefix)},
Destination: &cfg.URL,
Required: true,
Value: def.Source.URL,
Value: def.URL,
},
&cli.StringFlag{
Name: "source-username",
Usage: "destination imap username",
EnvVars: []string{"MAILPUMP_SOURCE_USERNAME"},
Destination: &cfg.Source.Username,
Name: fmt.Sprintf("%v-username", lowerPrefix),
Usage: fmt.Sprintf("%v imap username", lowerPrefix),
EnvVars: []string{fmt.Sprintf("MAILPUMP_%v_USERNAME", upperPrefix)},
Destination: &cfg.Username,
Required: true,
Value: def.Source.Username,
Value: def.Username,
},
&cli.StringFlag{
Name: "source-password",
Usage: "source imap password",
EnvVars: []string{"MAILPUMP_SOURCE_PASSWORD"},
Destination: &cfg.Source.Password,
Name: fmt.Sprintf("%v-password", lowerPrefix),
Usage: fmt.Sprintf("%v imap password", lowerPrefix),
EnvVars: []string{fmt.Sprintf("MAILPUMP_%v_PASSWORD", upperPrefix)},
Destination: &cfg.Password,
Required: false,
Value: def.Source.Password,
Value: def.Password,
},
&cli.StringFlag{
Name: "source-password-file",
Usage: "source imap password file",
EnvVars: []string{"MAILPUMP_SOURCE_PASSWORD_FILE"},
Destination: &cfg.Source.PasswordFile,
Name: fmt.Sprintf("%v-password-file", lowerPrefix),
Usage: fmt.Sprintf("%v imap password file", lowerPrefix),
EnvVars: []string{fmt.Sprintf("MAILPUMP_%v_PASSWORD_FILE", upperPrefix)},
Destination: &cfg.PasswordFile,
Required: false,
Value: def.Source.PasswordFile,
Value: def.PasswordFile,
},
&cli.BoolFlag{
Name: "source-tls-skip-verify",
Usage: "skip source tls verification",
EnvVars: []string{"MAILPUMP_SOURCE_TLS_SKIP_VERIFY"},
Destination: &cfg.Source.TLSSkipVerify,
Value: def.Source.TLSSkipVerify,
Name: fmt.Sprintf("%v-tls-skip-verify", lowerPrefix),
Usage: fmt.Sprintf("skip %v tls verification", lowerPrefix),
EnvVars: []string{fmt.Sprintf("MAILPUMP_%v_TLS_SKIP_VERIFY", upperPrefix)},
Destination: &cfg.TLSSkipVerify,
Value: def.TLSSkipVerify,
},
&cli.StringFlag{
Name: "source-transport",
Usage: "source imap transport (persistent, standard)",
EnvVars: []string{"MAILPUMP_SOURCE_TRANSPORT"},
Destination: &cfg.Source.Transport,
Value: def.Source.Transport,
Name: fmt.Sprintf("%v-transport", lowerPrefix),
Usage: fmt.Sprintf("%v imap transport (persistent, standard)", lowerPrefix),
EnvVars: []string{fmt.Sprintf("MAILPUMP_%v_TRANSPORT", upperPrefix)},
Destination: &cfg.Transport,
Value: def.Transport,
},
&cli.BoolFlag{
Name: "source-debug",
Usage: "display source debug info",
EnvVars: []string{"MAILPUMP_SOURCE_DEBUG"},
Destination: &cfg.Source.Debug,
Value: def.Source.Debug,
},
&cli.StringFlag{
Name: "dest-url",
Usage: "destination imap url",
EnvVars: []string{"MAILPUMP_DEST_URL"},
Destination: &cfg.Dest.URL,
Required: true,
Value: def.Dest.URL,
},
&cli.StringFlag{
Name: "dest-username",
Usage: "destination imap username",
EnvVars: []string{"MAILPUMP_DEST_USERNAME"},
Destination: &cfg.Dest.Username,
Required: true,
Value: def.Dest.Username,
},
&cli.StringFlag{
Name: "dest-password",
Usage: "destination imap password",
EnvVars: []string{"MAILPUMP_DEST_PASSWORD"},
Destination: &cfg.Dest.Password,
Required: false,
Value: def.Dest.Password,
},
&cli.StringFlag{
Name: "dest-password-file",
Usage: "destination imap password file",
EnvVars: []string{"MAILPUMP_DEST_PASSWORD_FILE"},
Destination: &cfg.Dest.PasswordFile,
Required: false,
Value: def.Dest.PasswordFile,
},
&cli.BoolFlag{
Name: "dest-tls-skip-verify",
Usage: "skip destination tls Verification",
EnvVars: []string{"MAILPUMP_DEST_TLS_SKIP_VERIFY"},
Destination: &cfg.Dest.TLSSkipVerify,
Value: def.Dest.TLSSkipVerify,
},
&cli.StringFlag{
Name: "dest-transport",
Usage: "destination imap transport (persistent, standard)",
EnvVars: []string{"MAILPUMP_DEST_TRANSPORT"},
Destination: &cfg.Dest.Transport,
Value: def.Dest.Transport,
},
&cli.BoolFlag{
Name: "dest-debug",
Usage: "display destination debug info",
EnvVars: []string{"MAILPUMP_DEST_DEBUG"},
Destination: &cfg.Dest.Debug,
Value: def.Dest.Debug,
Name: fmt.Sprintf("%v-debug", lowerPrefix),
Usage: fmt.Sprintf("display %v debug info", lowerPrefix),
EnvVars: []string{fmt.Sprintf("MAILPUMP_%v_DEBUG", upperPrefix)},
Destination: &cfg.Debug,
Value: def.Debug,
},
}
}

func (cfg *CliConfig) Parameters() []cli.Flag {
def := DefaultConfig()

var flags []cli.Flag
flags = append(flags, cfg.Source.makeIMAPParameters("source")...)
flags = append(flags, cfg.Dest.makeIMAPParameters("dest")...)
flags = append(flags, []cli.Flag{
&cli.StringFlag{
Name: "log-level",
Usage: "logging level",
Expand Down Expand Up @@ -240,7 +198,9 @@ func (cfg *CliConfig) Parameters() []cli.Flag {
Destination: &cfg.FetchMaxInterval,
Value: def.FetchMaxInterval,
},
}
}...)

return flags
}

var (
Expand Down

0 comments on commit 9c6d00d

Please sign in to comment.