From 0ab7654bc6de8b8f3a991c204bec8a9e4248d6b3 Mon Sep 17 00:00:00 2001 From: hylom Date: Wed, 7 Nov 2018 21:15:55 +0900 Subject: [PATCH] Eventd::Hander::User: add change_email handler --- .../lib/Newslash/Eventd/Handler/User.pm | 95 ++++++++++++++++------ 1 file changed, 68 insertions(+), 27 deletions(-) diff --git a/src/newslash_web/lib/Newslash/Eventd/Handler/User.pm b/src/newslash_web/lib/Newslash/Eventd/Handler/User.pm index 32871d48..e7830ed5 100644 --- a/src/newslash_web/lib/Newslash/Eventd/Handler/User.pm +++ b/src/newslash_web/lib/Newslash/Eventd/Handler/User.pm @@ -1,31 +1,14 @@ package Newslash::Eventd::Handler::User; use Mojo::Base 'Newslash::Eventd::Handler'; use Data::Dumper; +use Email::Valid; -sub _reset_password { - my ($self, $uid) = @_; - my $users = $self->app->model('users'); - - # generate new token - my $token = $users->passwords->generate_random_password; - my $hashed_token = $users->passwords->encrypt_password($token); - - my $rs = $users->update(uid => $uid, - newpasswd => $hashed_token, - newpasswd_ts => { function => "NOW()" }); - if (!$rs) { - $self->app->log->error("Users: password reset error! uid: $uid"); - return; - } - - return $token; -} - sub login { my ($self, $item) = @_; $self->app->log->debug("event user/login processing... uid: $uid"); + # do nothing $self->inactivate_event($item->{event_id}, 0); return; } @@ -34,6 +17,7 @@ sub logout { my ($self, $item) = @_; $self->app->log->debug("event user/logout processing... uid: $uid"); + # do nothing $self->inactivate_event($item->{event_id}, 0); return; } @@ -52,10 +36,10 @@ sub create { $self->inactivate_event($item->{event_id}, -1); return; } - $self->app->log->debug("event user create processing... uid: $uid"); + $self->app->log->debug("event user/create processing... uid: $uid"); # generate new token - my $token = $self->_reset_password($uid); + my $token = $self->app->users->generate_password_reset_token($uid); if (!$token) { $self->app->log->error("event user/create failed: password reset failed, uid: $uid"); $self->inactivate_event($item->{event_id}, -1); @@ -93,13 +77,13 @@ sub update_password { $self->inactivate_event($item->{event_id}, -1); return; } - $self->app->log->debug("event user updatepw processing... uid: $uid"); + $self->app->log->debug("event user/updatepw processing... uid: $uid"); # send message my $render_params = { nickname => $the_user->{nickname} }; - my $rs = $self->app->sendmail(to => $the_user, - template => "message/password_update", - params => $render_params); + my $rs = $self->send_email(to => $the_user, + template => "message/password_update", + params => $render_params); if (!$rs) { # error ! @@ -112,6 +96,63 @@ sub update_password { return; } +sub change_email { + my ($self, $item) = @_; + my $users = $self->app->model('users'); + my $uid = $item->{source_user_id}; + my $the_user = $users->select(uid => $uid); + + # check the user exists + if (!$the_user) { + # error ! + $self->app->log->error("event user/change_email faild: no uid $uid"); + $self->inactivate_event($item->{event_id}, -1); + return; + } + $self->app->log->debug("event user/change_email processing... uid: $uid"); + + my $param = $users->param->select(uid => $uid); + my $email = $param->{new_email}; + + # check new email address + if (!$email || !Email::Valid->address($email)) { + $self->app->log->error("event user/change_email faild: invalid email, uid: $uid"); + $self->inactivate_event($item->{event_id}, -1); + return; + } + + my $token = $self->app->users->generate_email_change_token($uid, $email); + if (!$token) { + $self->app->log->error("event user/updatepw faild: token generation error, uid: $uid"); + $self->inactivate_event($item->{event_id}, -1); + return; + } + + # send notify message + my $render_params = { nickname => $the_user->{nickname}, + token => $token + }; + my $rs = $self->send_email(to => $the_user, + template => "message/change_email_notify", + params => $render_params); + + if (!$rs) { + # error ! + $self->app->log->error("event user/updatepw faild: sendmail error, uid: $uid"); + $self->inactivate_event($item->{event_id}, -1); + return; + } + + # send message to new address + my $rs = $self->send_email(to => $email, + template => "message/change_email", + params => $render_params); + + # done + $self->inactivate_event($item->{event_id}, 0); + return; +} + sub reset_password { my ($self, $item) = @_; @@ -126,10 +167,10 @@ sub reset_password { $self->inactivate_event($item->{event_id}, -1); return; } - $self->app->log->debug("event user resetpw processing... uid: $uid"); + $self->app->log->debug("event user/resetpw processing... uid: $uid"); # generate new token - my $token = $self->_reset_password($uid); + my $token = $self->app->users->generate_password_reset_token($uid); if (!$token) { $self->app->log->error("event user/resetpw failed: password reset failed, uid: $uid"); $self->inactivate_event($item->{event_id}, -1); -- 2.11.0