diff --git a/pkg/cmd/user.go b/pkg/cmd/user.go index 7e9411a9b..56512f684 100644 --- a/pkg/cmd/user.go +++ b/pkg/cmd/user.go @@ -18,11 +18,13 @@ package cmd import ( + "code.vikunja.io/api/pkg/db" "fmt" "os" "strconv" "strings" "time" + "xorm.io/xorm" "code.vikunja.io/api/pkg/initialize" "code.vikunja.io/api/pkg/log" @@ -91,7 +93,7 @@ func getPasswordFromFlagOrInput() (pw string) { return } -func getUserFromArg(arg string) *user.User { +func getUserFromArg(s *xorm.Session, arg string) *user.User { id, err := strconv.ParseInt(arg, 10, 64) if err != nil { log.Fatalf("Invalid user id: %s", err) @@ -116,8 +118,16 @@ var userListCmd = &cobra.Command{ initialize.FullInit() }, Run: func(cmd *cobra.Command, args []string) { + s := db.NewSession() + defer s.Close() + users, err := user.ListUsers(s, "") if err != nil { + _ = s.Rollback() + log.Fatalf("Error getting users: %s", err) + } + + if err := s.Commit(); err != nil { log.Fatalf("Error getting users: %s", err) } @@ -153,6 +163,9 @@ var userCreateCmd = &cobra.Command{ initialize.FullInit() }, Run: func(cmd *cobra.Command, args []string) { + s := db.NewSession() + defer s.Close() + u := &user.User{ Username: userFlagUsername, Email: userFlagEmail, @@ -160,14 +173,20 @@ var userCreateCmd = &cobra.Command{ } newUser, err := user.CreateUser(s, u) if err != nil { + _ = s.Rollback() log.Fatalf("Error creating new user: %s", err) } err = models.CreateNewNamespaceForUser(s, newUser) if err != nil { + _ = s.Rollback() log.Fatalf("Error creating new namespace for user: %s", err) } + if err := s.Commit(); err != nil { + log.Fatalf("Error saving everything: %s", err) + } + fmt.Printf("\nUser was created successfully.\n") }, } @@ -180,7 +199,10 @@ var userUpdateCmd = &cobra.Command{ initialize.FullInit() }, Run: func(cmd *cobra.Command, args []string) { - u := getUserFromArg(args[0]) + s := db.NewSession() + defer s.Close() + + u := getUserFromArg(s, args[0]) if userFlagUsername != "" { u.Username = userFlagUsername @@ -194,9 +216,14 @@ var userUpdateCmd = &cobra.Command{ _, err := user.UpdateUser(s, u) if err != nil { + _ = s.Rollback() log.Fatalf("Error updating the user: %s", err) } + if err := s.Commit(); err != nil { + log.Fatalf("Error saving everything: %s", err) + } + fmt.Println("User updated successfully.") }, } @@ -209,22 +236,31 @@ var userResetPasswordCmd = &cobra.Command{ }, Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { - u := getUserFromArg(args[0]) + s := db.NewSession() + defer s.Close() + + u := getUserFromArg(s, args[0]) // By default we reset as usual, only with specific flag directly. if userFlagResetPasswordDirectly { err := user.UpdateUserPassword(s, u, getPasswordFromFlagOrInput()) if err != nil { + _ = s.Rollback() log.Fatalf("Could not update user password: %s", err) } fmt.Println("Password updated successfully.") } else { err := user.RequestUserPasswordResetToken(s, u) if err != nil { + _ = s.Rollback() log.Fatalf("Could not send password reset email: %s", err) } fmt.Println("Password reset email sent successfully.") } + + if err := s.Commit(); err != nil { + log.Fatalf("Could not send password reset email: %s", err) + } }, } @@ -236,7 +272,10 @@ var userChangeEnabledCmd = &cobra.Command{ }, Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { - u := getUserFromArg(args[0]) + s := db.NewSession() + defer s.Close() + + u := getUserFromArg(s, args[0]) if userFlagEnableUser { u.IsActive = true @@ -247,9 +286,14 @@ var userChangeEnabledCmd = &cobra.Command{ } _, err := user.UpdateUser(s, u) if err != nil { + _ = s.Rollback() log.Fatalf("Could not enable the user") } + if err := s.Commit(); err != nil { + log.Fatalf("Error saving everything: %s", err) + } + fmt.Printf("User status successfully changed, user is now active: %t.\n", u.IsActive) }, }