From ec40d881348b9f22abebbcf6731cf0753b0d1a7c Mon Sep 17 00:00:00 2001 From: decentral1se Date: Sun, 5 Sep 2021 22:04:48 +0200 Subject: [PATCH] refactor: centralise app name validation --- cli/app/backup.go | 5 +---- cli/app/check.go | 6 +----- cli/app/config.go | 6 +----- cli/app/cp.go | 6 +----- cli/app/deploy.go | 6 +----- cli/app/logs.go | 6 +----- cli/app/ps.go | 6 +----- cli/app/remove.go | 6 +----- cli/app/restore.go | 5 +---- cli/app/run.go | 5 +---- cli/app/secret.go | 21 +++++---------------- cli/app/undeploy.go | 6 +----- cli/app/version.go | 7 ++----- cli/app/volume.go | 11 ++--------- cli/internal/validate.go | 21 +++++++++++++++++++++ 15 files changed, 41 insertions(+), 82 deletions(-) diff --git a/cli/app/backup.go b/cli/app/backup.go index f1fe6f88..da8d4327 100644 --- a/cli/app/backup.go +++ b/cli/app/backup.go @@ -31,10 +31,7 @@ var appBackupCommand = &cli.Command{ Flags: []cli.Flag{backupAllServicesFlag}, ArgsUsage: "", Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) if c.Args().Get(1) != "" && backupAllServices { internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '' and '--all' together")) diff --git a/cli/app/check.go b/cli/app/check.go index b329a4e4..f316319d 100644 --- a/cli/app/check.go +++ b/cli/app/check.go @@ -1,7 +1,6 @@ package app import ( - "errors" "os" "path" "strings" @@ -18,10 +17,7 @@ var appCheckCommand = &cli.Command{ Aliases: []string{"c"}, ArgsUsage: "", Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) appFiles, err := config.LoadAppFiles("") if err != nil { diff --git a/cli/app/config.go b/cli/app/config.go index 1921fe6e..4549a1b1 100644 --- a/cli/app/config.go +++ b/cli/app/config.go @@ -1,7 +1,6 @@ package app import ( - "errors" "os" "os/exec" @@ -17,10 +16,7 @@ var appConfigCommand = &cli.Command{ Aliases: []string{"c"}, Usage: "Edit app config", Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) appFiles, err := config.LoadAppFiles("") if err != nil { diff --git a/cli/app/cp.go b/cli/app/cp.go index 86c784a9..757e2c18 100644 --- a/cli/app/cp.go +++ b/cli/app/cp.go @@ -2,7 +2,6 @@ package app import ( "context" - "errors" "fmt" "os" "strings" @@ -23,10 +22,7 @@ var appCpCommand = &cli.Command{ ArgsUsage: " ", Usage: "Copy files to/from a running app service", Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) src := c.Args().Get(1) dst := c.Args().Get(2) diff --git a/cli/app/deploy.go b/cli/app/deploy.go index 15013aa8..262b2cf8 100644 --- a/cli/app/deploy.go +++ b/cli/app/deploy.go @@ -1,7 +1,6 @@ package app import ( - "errors" "fmt" "coopcloud.tech/abra/cli/internal" @@ -17,10 +16,7 @@ var appDeployCommand = &cli.Command{ Aliases: []string{"d"}, Usage: "Deploy an app", Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) appFiles, err := config.LoadAppFiles("") if err != nil { diff --git a/cli/app/logs.go b/cli/app/logs.go index 693d5de6..3781e804 100644 --- a/cli/app/logs.go +++ b/cli/app/logs.go @@ -2,7 +2,6 @@ package app import ( "context" - "errors" "fmt" "io" "os" @@ -64,10 +63,7 @@ var appLogsCommand = &cli.Command{ ArgsUsage: "[]", Usage: "Tail app logs", Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) appFiles, err := config.LoadAppFiles("") if err != nil { diff --git a/cli/app/ps.go b/cli/app/ps.go index b9cd9457..7869fb25 100644 --- a/cli/app/ps.go +++ b/cli/app/ps.go @@ -2,7 +2,6 @@ package app import ( "context" - "errors" "strings" abraFormatter "coopcloud.tech/abra/cli/formatter" @@ -21,10 +20,7 @@ var appPsCommand = &cli.Command{ Usage: "Check app status", Aliases: []string{"p"}, Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) appFiles, err := config.LoadAppFiles("") if err != nil { diff --git a/cli/app/remove.go b/cli/app/remove.go index 56d09e6d..680bce38 100644 --- a/cli/app/remove.go +++ b/cli/app/remove.go @@ -2,7 +2,6 @@ package app import ( "context" - "errors" "fmt" "os" @@ -35,10 +34,7 @@ var appRemoveCommand = &cli.Command{ internal.ForceFlag, }, Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) if !internal.Force { response := false diff --git a/cli/app/restore.go b/cli/app/restore.go index 17c0b485..ed1a091d 100644 --- a/cli/app/restore.go +++ b/cli/app/restore.go @@ -31,10 +31,7 @@ var appRestoreCommand = &cli.Command{ Flags: []cli.Flag{restoreAllServicesFlag}, ArgsUsage: " []", Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) if c.Args().Len() > 1 && restoreAllServices { internal.ShowSubcommandHelpAndError(c, errors.New("cannot use / and '--all' together")) diff --git a/cli/app/run.go b/cli/app/run.go index a0165ebd..d5551677 100644 --- a/cli/app/run.go +++ b/cli/app/run.go @@ -40,10 +40,7 @@ var appRunCommand = &cli.Command{ ArgsUsage: " ...", Usage: "Run a command in a service container", Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) if c.Args().Len() < 2 { internal.ShowSubcommandHelpAndError(c, errors.New("no provided")) diff --git a/cli/app/secret.go b/cli/app/secret.go index 300a55cf..7a4bf158 100644 --- a/cli/app/secret.go +++ b/cli/app/secret.go @@ -32,10 +32,7 @@ var appSecretGenerateCommand = &cli.Command{ ArgsUsage: " ", Flags: []cli.Flag{allSecretsFlag, internal.PassFlag}, Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) if c.Args().Get(1) != "" && allSecrets { internal.ShowSubcommandHelpAndError(c, errors.New("cannot use ' ' and '--all' together")) @@ -91,10 +88,7 @@ var appSecretInsertCommand = &cli.Command{ Flags: []cli.Flag{internal.PassFlag}, ArgsUsage: " ", Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) if c.Args().Len() != 4 { internal.ShowSubcommandHelpAndError(c, errors.New("missing arguments?")) @@ -137,10 +131,7 @@ var appSecretRmCommand = &cli.Command{ Flags: []cli.Flag{allSecretsFlag, internal.PassFlag}, ArgsUsage: "", Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) if c.Args().Get(1) != "" && allSecrets { internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '' and '--all' together")) @@ -210,10 +201,8 @@ var appSecretLsCommand = &cli.Command{ Usage: "List all secrets", Aliases: []string{"ls"}, Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) + appFiles, err := config.LoadAppFiles("") if err != nil { logrus.Fatal(err) diff --git a/cli/app/undeploy.go b/cli/app/undeploy.go index 6c51c917..23c94a22 100644 --- a/cli/app/undeploy.go +++ b/cli/app/undeploy.go @@ -2,7 +2,6 @@ package app import ( "context" - "errors" "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/pkg/client" @@ -22,10 +21,7 @@ vigilant, as your swarm installation will consider any previously attached volumes as eligiblef or pruning once undeployed. `, Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) appFiles, err := config.LoadAppFiles("") if err != nil { diff --git a/cli/app/version.go b/cli/app/version.go index 6ada7fd1..e7e07b5c 100644 --- a/cli/app/version.go +++ b/cli/app/version.go @@ -1,7 +1,6 @@ package app import ( - "errors" "fmt" "sort" "strings" @@ -46,10 +45,8 @@ var appVersionCommand = &cli.Command{ Aliases: []string{"v"}, Usage: "Show version of all services in app", Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) - } + appName := internal.ValidateAppNameArg(c) + appFiles, err := config.LoadAppFiles("") if err != nil { logrus.Fatal(err) diff --git a/cli/app/volume.go b/cli/app/volume.go index c4a5dbd8..8dadaa39 100644 --- a/cli/app/volume.go +++ b/cli/app/volume.go @@ -2,7 +2,6 @@ package app import ( "context" - "errors" abraFormatter "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" @@ -34,10 +33,7 @@ var appVolumeListCommand = &cli.Command{ Usage: "list volumes associated with an app", Aliases: []string{"ls"}, Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided!")) - } + appName := internal.ValidateAppNameArg(c) ctx := context.Background() server := getAppServer(appName) @@ -68,10 +64,7 @@ var appVolumeRemoveCommand = &cli.Command{ internal.ForceFlag, }, Action: func(c *cli.Context) error { - appName := c.Args().First() - if appName == "" { - internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided!")) - } + appName := internal.ValidateAppNameArg(c) server := getAppServer(appName) ctx := context.Background() volumeList, err := client.GetVolumes(ctx, server, appName) diff --git a/cli/internal/validate.go b/cli/internal/validate.go index d8f8df29..b77730ee 100644 --- a/cli/internal/validate.go +++ b/cli/internal/validate.go @@ -3,6 +3,7 @@ package internal import ( "errors" + "coopcloud.tech/abra/pkg/config" "coopcloud.tech/abra/pkg/recipe" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" @@ -22,3 +23,23 @@ func ValidateRecipeArg(c *cli.Context) string { return recipeName } + +// ValidateAppNameArg ensures the app name arg is valid. +func ValidateAppNameArg(c *cli.Context) string { + appName := c.Args().First() + + if appName == "" { + ShowSubcommandHelpAndError(c, errors.New("no app provided")) + } + + appFiles, err := config.LoadAppFiles("") + if err != nil { + logrus.Fatal(err) + } + + if _, ok := appFiles[appName]; !ok { + logrus.Fatalf("'%s' doesn't exist?", appName) + } + + return appName +}