From dc749170dfcd6221c8e5bf275b5992ce633ced86 Mon Sep 17 00:00:00 2001 From: Ibrahim Serdar Acikgoz Date: Tue, 12 Oct 2021 16:18:07 +0300 Subject: [PATCH] restore reset command as db reset (#18449) --- cmd/mattermost/commands/db.go | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/cmd/mattermost/commands/db.go b/cmd/mattermost/commands/db.go index c9f985820c..88be76eb90 100644 --- a/cmd/mattermost/commands/db.go +++ b/cmd/mattermost/commands/db.go @@ -9,6 +9,7 @@ import ( "github.com/pkg/errors" "github.com/spf13/cobra" + "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/config" "github.com/mattermost/mattermost-server/v6/store/sqlstore" ) @@ -36,9 +37,19 @@ This command should be run using a database configuration DSN.`, RunE: initDbCmdF, } +var ResetCmd = &cobra.Command{ + Use: "reset", + Short: "Reset the database to initial state", + Long: "Completely erases the database causing the loss of all data. This will reset Mattermost to its initial state.", + RunE: resetCmdF, +} + func init() { + ResetCmd.Flags().Bool("confirm", false, "Confirm you really want to delete everything and a DB backup has been performed.") + DbCmd.AddCommand( InitDbCmd, + ResetCmd, ) RootCmd.AddCommand( @@ -70,3 +81,35 @@ func initDbCmdF(command *cobra.Command, _ []string) error { return nil } + +func resetCmdF(command *cobra.Command, args []string) error { + a, err := InitDBCommandContextCobra(command) + if err != nil { + return err + } + defer a.Srv().Shutdown() + + confirmFlag, _ := command.Flags().GetBool("confirm") + if !confirmFlag { + var confirm string + CommandPrettyPrintln("Have you performed a database backup? (YES/NO): ") + fmt.Scanln(&confirm) + + if confirm != "YES" { + return errors.New("ABORTED: You did not answer YES exactly, in all capitals.") + } + CommandPrettyPrintln("Are you sure you want to delete everything? All data will be permanently deleted? (YES/NO): ") + fmt.Scanln(&confirm) + if confirm != "YES" { + return errors.New("ABORTED: You did not answer YES exactly, in all capitals.") + } + } + + a.Srv().Store.DropAllTables() + CommandPrettyPrintln("Database successfully reset") + + auditRec := a.MakeAuditRecord("reset", audit.Success) + a.LogAuditRec(auditRec, nil) + + return nil +}