diff --git a/CHANGELOG.md b/CHANGELOG.md index 94a1a7cd07..f46b7955c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ All notable changes to `src-cli` are documented in this file. ### Added +- `src users delete` now asks for confirmation to delete all users when no user ID is provided. [#470](https://github.com/sourcegraph/src-cli/pull/470) + ### Changed ### Fixed diff --git a/cmd/src/users_delete.go b/cmd/src/users_delete.go index e46a47a2fb..e929814f05 100644 --- a/cmd/src/users_delete.go +++ b/cmd/src/users_delete.go @@ -1,9 +1,13 @@ package main import ( + "bufio" "context" "flag" "fmt" + "os" + "strconv" + "strings" "github.com/sourcegraph/src-cli/internal/api" ) @@ -44,6 +48,37 @@ Examples: client := cfg.apiClient(apiFlags, flagSet.Output()) + if *userIDFlag == "" { + query := `query UsersTotalCountCountUsers { users { totalCount } }` + + var result struct { + Users struct { + TotalCount int + } + } + ok, err := client.NewQuery(query).Do(context.Background(), &result) + if err != nil || !ok { + return err + } + + fmt.Printf("No user ID specified. This would delete %d users.\nType in this number to confirm and hit return: ", result.Users.TotalCount) + reader := bufio.NewReader(os.Stdin) + text, err := reader.ReadString('\n') + if err != nil { + return err + } + + count, err := strconv.Atoi(strings.TrimSpace(text)) + if err != nil { + return err + } + + if count != result.Users.TotalCount { + fmt.Println("Number does not match. Aborting.") + return nil + } + } + query := `mutation DeleteUser( $user: ID! ) {