diff --git a/cmd/setup.go b/cmd/setup.go index 7340f94..86f0f16 100644 --- a/cmd/setup.go +++ b/cmd/setup.go @@ -273,13 +273,15 @@ func newSetup(setupOpts setupOpts) error { return fmt.Errorf("issue selecting if verification is to be run: %w", err) } if verifyChoice { - username, err := operatingsystem.PromptAndVerifyUser() + username, skip, err := operatingsystem.PromptAndVerifyUser() if err != nil { return err } - err = workbench.VerifyInstallation(username) - if err != nil { - return fmt.Errorf("issue running verification: %w", err) + if !skip { + err = workbench.VerifyInstallation(username) + if err != nil { + return fmt.Errorf("issue running verification: %w", err) + } } } step = "done" diff --git a/internal/operatingsystem/user.go b/internal/operatingsystem/user.go index 906206d..e8018ac 100644 --- a/internal/operatingsystem/user.go +++ b/internal/operatingsystem/user.go @@ -2,28 +2,37 @@ package operatingsystem import ( "fmt" + "strings" "github.com/sol-eng/wbi/internal/system" ) -func PromptAndVerifyUser() (string, error) { - userAccount, err := PromptUserAccount() - if err != nil { - return "", err +func PromptAndVerifyUser() (string, bool, error) { + var overallSkip bool + var userAccount string + for { + username, err := PromptUserAccount() + userAccount = username + if err != nil { + return "", false, err + } + if strings.Contains(userAccount, "skip") { + overallSkip = true + break + } + // lookup user account details + user, err := UserLookup(userAccount) + if err != nil { + system.PrintAndLogInfo(fmt.Sprintf(`The user account "%s" you entered cannot be found. Please try again. To skip this section type "skip".`, userAccount)) + } else if user.Uid == "0" { + system.PrintAndLogInfo(fmt.Sprintf(`The user account "%s" is root. A non-root user is required. Please try again. To skip this section type "skip".`, userAccount)) + } else if user.HomeDir == "" { + system.PrintAndLogInfo(fmt.Sprintf(`The user account "%s" does not have a home directory. A home directory is required. Please try again. To skip this section type "skip".`, userAccount)) + } else { + system.PrintAndLogInfo(fmt.Sprintf("user %s account found and validated", userAccount)) + break + } } - // lookup user account details - user, err := UserLookup(userAccount) - if err != nil { - return "", fmt.Errorf("user %s account not found", userAccount) - } - // verify non-root and a home directory exists - if user.Uid == "0" { - return "", fmt.Errorf("user %s account is root. A non-root user is required", userAccount) - } - if user.HomeDir == "" { - return "", fmt.Errorf("user %s account does not have a home directory. A home directory is required", userAccount) - } - system.PrintAndLogInfo(fmt.Sprintf("user %s account found and validated", userAccount)) - return user.Username, nil + return userAccount, overallSkip, nil }