OSDN Git Service

Plugin::Users: add generate password/mail related token functions
authorhylom <hylom@users.sourceforge.jp>
Wed, 7 Nov 2018 12:15:16 +0000 (21:15 +0900)
committerhylom <hylom@users.sourceforge.jp>
Wed, 7 Nov 2018 12:15:16 +0000 (21:15 +0900)
src/newslash_web/lib/Newslash/Plugin/Users.pm

index 9b046ba..5a0f54d 100644 (file)
@@ -60,6 +60,61 @@ sub reset_password {
     return 1;
 }
 
+sub generate_password_reset_token {
+    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->last_error($users->last_error);
+        return;
+    }
+
+    return $token;
+}
+
+sub generate_email_change_token {
+    my ($self, $uid, $email) = @_;
+    my $users = $self->app->model('users');
+
+    # generate new token
+    my $token = $users->passwords->generate_random_password;
+    my $hashed_token = $users->passwords->encrypt_password($token);
+
+    # insert token into users_param
+    $users->param->start_transaction;
+    my $rs = $users->param->set(uid => $uid,
+                                name => "new_email_token",
+                                value => $hashed_token);
+    if (!defined $rs) {
+        # error !
+        $self->last_error($users->param->last_error);
+        $users->param->rollback;
+        return;
+    }
+
+    # insert token_ts intro users_param
+    $rs = $users->param->set(uid => $uid,
+                             name => "new_email_token_ts",
+                             value => {function => "NOW()"});
+    if (!defined $rs) {
+        # error !
+        $self->last_error($users->param->last_error);
+        $users->param->rollback;
+        return;
+    }
+    $users->param->commit;
+
+    return $token;
+}
+
+
 sub cancel_activation {
     my ($self, $user) = @_;
     if (!$user || $user->{uid}) {