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;
}
my ($self, $item) = @_;
$self->app->log->debug("event user/logout processing... uid: $uid");
+ # do nothing
$self->inactivate_event($item->{event_id}, 0);
return;
}
$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);
$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 !
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) = @_;
$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);