From 0951006063337d714d8363e486937ad3df350c31 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sun, 27 Aug 2023 22:48:26 +0800 Subject: [PATCH] add updating user email verified state utility --- cmd/user_data.go | 92 +++++++++++++++++++++++++++++++++++++------ pkg/cli/user_data.go | 34 ++++++++++++++++ pkg/services/users.go | 46 ++++++++++++++++++++++ 3 files changed, 159 insertions(+), 13 deletions(-) diff --git a/cmd/user_data.go b/cmd/user_data.go index 939aabfe..fdfcd881 100644 --- a/cmd/user_data.go +++ b/cmd/user_data.go @@ -86,19 +86,6 @@ var UserData = &cli.Command{ }, }, }, - { - Name: "send-password-reset-mail", - Usage: "Send password reset mail", - Action: sendPasswordResetMail, - Flags: []cli.Flag{ - &cli.StringFlag{ - Name: "username", - Aliases: []string{"n"}, - Required: true, - Usage: "Specific user name", - }, - }, - }, { Name: "user-enable", Usage: "Enable specified user", @@ -125,6 +112,32 @@ var UserData = &cli.Command{ }, }, }, + { + Name: "user-set-email-verified", + Usage: "Set user email address verified", + Action: setUserEmailVerified, + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "username", + Aliases: []string{"n"}, + Required: true, + Usage: "Specific user name", + }, + }, + }, + { + Name: "user-set-email-unverified", + Usage: "Set user email address unverified", + Action: setUserEmailUnverified, + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "username", + Aliases: []string{"n"}, + Required: true, + Usage: "Specific user name", + }, + }, + }, { Name: "user-delete", Usage: "Delete specified user", @@ -177,6 +190,19 @@ var UserData = &cli.Command{ }, }, }, + { + Name: "send-password-reset-mail", + Usage: "Send password reset mail", + Action: sendPasswordResetMail, + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "username", + Aliases: []string{"n"}, + Required: true, + Usage: "Specific user name", + }, + }, + }, { Name: "transaction-check", Usage: "Check whether user all transactions and accounts are correct", @@ -338,6 +364,46 @@ func disableUser(c *cli.Context) error { return nil } +func setUserEmailVerified(c *cli.Context) error { + _, err := initializeSystem(c) + + if err != nil { + return err + } + + username := c.String("username") + err = clis.UserData.SetUserEmailVerified(c, username) + + if err != nil { + log.BootErrorf("[user_data.setUserEmailVerified] error occurs when setting user email address verified") + return err + } + + log.BootInfof("[user_data.setUserEmailVerified] user \"%s\" email address has been set verified", username) + + return nil +} + +func setUserEmailUnverified(c *cli.Context) error { + _, err := initializeSystem(c) + + if err != nil { + return err + } + + username := c.String("username") + err = clis.UserData.SetUserEmailUnverified(c, username) + + if err != nil { + log.BootErrorf("[user_data.setUserEmailUnverified] error occurs when setting user email address unverified") + return err + } + + log.BootInfof("[user_data.setUserEmailUnverified] user \"%s\" email address has been set unverified", username) + + return nil +} + func deleteUser(c *cli.Context) error { _, err := initializeSystem(c) diff --git a/pkg/cli/user_data.go b/pkg/cli/user_data.go index 942b9d3c..c1eb333d 100644 --- a/pkg/cli/user_data.go +++ b/pkg/cli/user_data.go @@ -233,6 +233,40 @@ func (l *UserDataCli) DisableUser(c *cli.Context, username string) error { return nil } +// SetUserEmailVerified sets user email address verified +func (l *UserDataCli) SetUserEmailVerified(c *cli.Context, username string) error { + if username == "" { + log.BootErrorf("[user_data.SetUserEmailVerified] user name is empty") + return errs.ErrUsernameIsEmpty + } + + err := l.users.SetUserEmailVerified(username) + + if err != nil { + log.BootErrorf("[user_data.SetUserEmailVerified] failed to set user email address verified by user name \"%s\", because %s", username, err.Error()) + return err + } + + return nil +} + +// SetUserEmailUnverified sets user email address unverified +func (l *UserDataCli) SetUserEmailUnverified(c *cli.Context, username string) error { + if username == "" { + log.BootErrorf("[user_data.SetUserEmailUnverified] user name is empty") + return errs.ErrUsernameIsEmpty + } + + err := l.users.SetUserEmailUnverified(username) + + if err != nil { + log.BootErrorf("[user_data.SetUserEmailUnverified] failed to set user email address unverified by user name \"%s\", because %s", username, err.Error()) + return err + } + + return nil +} + // DeleteUser deletes user according to the specified user name func (l *UserDataCli) DeleteUser(c *cli.Context, username string) error { if username == "" { diff --git a/pkg/services/users.go b/pkg/services/users.go index a3b0a257..a4e759b0 100644 --- a/pkg/services/users.go +++ b/pkg/services/users.go @@ -302,6 +302,52 @@ func (s *UserService) DisableUser(username string) error { return nil } +// SetUserEmailVerified sets user email address verified +func (s *UserService) SetUserEmailVerified(username string) error { + if username == "" { + return errs.ErrUsernameIsEmpty + } + + now := time.Now().Unix() + + updateModel := &models.User{ + EmailVerified: true, + UpdatedUnixTime: now, + } + + updatedRows, err := s.UserDB().Cols("email_verified", "updated_unix_time").Where("username=? AND deleted=?", username, false).Update(updateModel) + + if err != nil { + return err + } else if updatedRows < 1 { + return errs.ErrUserNotFound + } + return nil +} + +// SetUserEmailUnverified sets user email address unverified +func (s *UserService) SetUserEmailUnverified(username string) error { + if username == "" { + return errs.ErrUsernameIsEmpty + } + + now := time.Now().Unix() + + updateModel := &models.User{ + EmailVerified: false, + UpdatedUnixTime: now, + } + + updatedRows, err := s.UserDB().Cols("email_verified", "updated_unix_time").Where("username=? AND deleted=?", username, false).Update(updateModel) + + if err != nil { + return err + } else if updatedRows < 1 { + return errs.ErrUserNotFound + } + return nil +} + // DeleteUser deletes an existed user from database func (s *UserService) DeleteUser(username string) error { if username == "" {