diff --git a/cli/auth/authProvider.go b/cli/auth/authProvider.go index c5f2d0e39..6a45625d7 100644 --- a/cli/auth/authProvider.go +++ b/cli/auth/authProvider.go @@ -6,7 +6,6 @@ import ( "fmt" "net" "net/http" - "os" "time" "github.com/google/uuid" @@ -33,19 +32,8 @@ func Login() error { Token: token.AccessToken, } - configFile, defaultConfigErr := config.GetConfigWithDefaults() - if defaultConfigErr != nil { - return fmt.Errorf("failed getting config with defaults, err: %v", defaultConfigErr) - } - - if err := config.LoadConfigFile(config.Config.ConfigFilePath, configFile); err != nil && !os.IsNotExist(err) { - return fmt.Errorf("failed getting config file, err: %v", err) - } - - configFile.Auth = authConfig - - if err := config.WriteConfig(configFile); err != nil { - return fmt.Errorf("failed writing config with auth, err: %v", err) + if err := config.UpdateConfig(func(configStruct *config.ConfigStruct) { configStruct.Auth = authConfig }); err != nil { + return fmt.Errorf("failed updating config with auth, err: %v", err) } config.Config.Auth = authConfig diff --git a/cli/cmd/tap.go b/cli/cmd/tap.go index 82aa8d545..38adef8ad 100644 --- a/cli/cmd/tap.go +++ b/cli/cmd/tap.go @@ -80,10 +80,19 @@ Supported protocols are HTTP and gRPC.`, func askConfirmation(flagName string) { logger.Log.Infof(fmt.Sprintf(uploadTrafficMessageToConfirm, flagName)) + + if !config.Config.Tap.AskUploadConfirmation { + return + } + if !uiUtils.AskForConfirmation("Would you like to proceed [Y/n]: ") { logger.Log.Infof("You can always run mizu without %s, aborting", flagName) os.Exit(0) } + + if err := config.UpdateConfig(func(configStruct *config.ConfigStruct) { configStruct.Tap.AskUploadConfirmation = false }); err != nil { + logger.Log.Debugf("failed updating config with upload confirmation, err: %v", err) + } } func init() { diff --git a/cli/config/config.go b/cli/config/config.go index b44e9219f..64632fea9 100644 --- a/cli/config/config.go +++ b/cli/config/config.go @@ -40,7 +40,7 @@ func InitConfig(cmd *cobra.Command) error { configFilePathFlag := cmd.Flags().Lookup(ConfigFilePathCommandName) configFilePath := configFilePathFlag.Value.String() - if err := LoadConfigFile(configFilePath, &Config); err != nil { + if err := loadConfigFile(configFilePath, &Config); err != nil { if configFilePathFlag.Changed || !os.IsNotExist(err) { return fmt.Errorf("invalid config, %w\n"+ "you can regenerate the file by removing it (%v) and using `mizu config -r`", err, configFilePath) @@ -81,7 +81,27 @@ func WriteConfig(config *ConfigStruct) error { return nil } -func LoadConfigFile(configFilePath string, config *ConfigStruct) error { +type updateConfigStruct func(*ConfigStruct) +func UpdateConfig(updateConfigStruct updateConfigStruct) error { + configFile, err := GetConfigWithDefaults() + if err != nil { + return fmt.Errorf("failed getting config with defaults, err: %v", err) + } + + if err := loadConfigFile(Config.ConfigFilePath, configFile); err != nil && !os.IsNotExist(err) { + return fmt.Errorf("failed getting config file, err: %v", err) + } + + updateConfigStruct(configFile) + + if err := WriteConfig(configFile); err != nil { + return fmt.Errorf("failed writing config, err: %v", err) + } + + return nil +} + +func loadConfigFile(configFilePath string, config *ConfigStruct) error { reader, openErr := os.Open(configFilePath) if openErr != nil { return openErr diff --git a/cli/config/configStructs/tapConfig.go b/cli/config/configStructs/tapConfig.go index de256fa0b..e2d4f1a81 100644 --- a/cli/config/configStructs/tapConfig.go +++ b/cli/config/configStructs/tapConfig.go @@ -38,6 +38,7 @@ type TapConfig struct { Workspace string `yaml:"workspace"` EnforcePolicyFile string `yaml:"traffic-validation-file"` ContractFile string `yaml:"contract"` + AskUploadConfirmation bool `yaml:"ask-upload-confirmation" default:"true"` ApiServerResources Resources `yaml:"api-server-resources"` TapperResources Resources `yaml:"tapper-resources"` }