51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
package cliutil
|
|
|
|
import (
|
|
"github.com/urfave/cli/v2"
|
|
"github.com/urfave/cli/v2/altsrc"
|
|
|
|
"github.com/cloudflare/cloudflared/config"
|
|
"github.com/cloudflare/cloudflared/logger"
|
|
)
|
|
|
|
func Action(actionFunc cli.ActionFunc) cli.ActionFunc {
|
|
return WithErrorHandler(actionFunc)
|
|
}
|
|
|
|
func ConfiguredAction(actionFunc cli.ActionFunc) cli.ActionFunc {
|
|
// Adapt actionFunc to the type signature required by ConfiguredActionWithWarnings
|
|
f := func(context *cli.Context, _ string) error {
|
|
return actionFunc(context)
|
|
}
|
|
|
|
return ConfiguredActionWithWarnings(f)
|
|
}
|
|
|
|
// Just like ConfiguredAction, but accepts a second parameter with configuration warnings.
|
|
func ConfiguredActionWithWarnings(actionFunc func(*cli.Context, string) error) cli.ActionFunc {
|
|
return WithErrorHandler(func(c *cli.Context) error {
|
|
warnings, err := setFlagsFromConfigFile(c)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return actionFunc(c, warnings)
|
|
})
|
|
}
|
|
|
|
func setFlagsFromConfigFile(c *cli.Context) (configWarnings string, err error) {
|
|
const errorExitCode = 1
|
|
log := logger.CreateLoggerFromContext(c, logger.EnableTerminalLog)
|
|
inputSource, warnings, err := config.ReadConfigFile(c, log)
|
|
if err != nil {
|
|
if err == config.ErrNoConfigFile {
|
|
return "", nil
|
|
}
|
|
return "", cli.Exit(err, errorExitCode)
|
|
}
|
|
|
|
if err := altsrc.ApplyInputSource(c, inputSource); err != nil {
|
|
return "", cli.Exit(err, errorExitCode)
|
|
}
|
|
return warnings, nil
|
|
}
|