OSDN Git Service

implement /my/resetpassword API
authorhylom <hylom@users.sourceforge.jp>
Tue, 27 Nov 2018 12:01:46 +0000 (21:01 +0900)
committerhylom <hylom@users.sourceforge.jp>
Tue, 27 Nov 2018 12:01:46 +0000 (21:01 +0900)
src/newslash_web/lib/Newslash/Web.pm
src/newslash_web/lib/Newslash/Web/Controller/API/User.pm

index 2d24e76..f291e64 100644 (file)
@@ -298,7 +298,7 @@ sub startup {
     $r->post('/my/newuser')->to('login#newuser', captcha_check => 1);
     $r->get('/my/activation')->to('login#activation');
     $r->get('/my/resetpassword')->to('login#reset_password');
-    $r->post('/my/resetpassword')->to('login#reset_password');
+    $r->post('/my/resetpassword')->to('login#reset_password', captcha_check => 1);
 
     # Change Email
     $r->get('/my/change_email')->to('my#change_email', seclev => 1);
index 5071acc..adf10cb 100644 (file)
@@ -165,6 +165,10 @@ sub post {
         return $c->update_password($uid, $data);
     }
 
+    if ($data->{type} eq "reset_password") {
+        return $c->reset_password($uid, $data);
+    }
+
     $c->render(json => { error => 1, message => "invalid_request" });
     $c->rendered(400);
     return;
@@ -351,6 +355,37 @@ sub newuser_password {
     return;
 }
 
+sub reset_password {
+    my $c = shift;
+    my $params = $c->req->json;
+
+    if ($params->{email}) {
+        my $users = $c->model('users');
+        my $user = $users->select(realemail => $email);
+        if (!$user) {
+            if ($rs->last_error eq "INVALID_USER") {
+                # mask invalid_user error
+                $c->render(json => {});
+                return;
+            }
+            $c->render(json => { error => 1, message => $rs->last_error || 1 });
+            $c->rendered(400);
+            return;
+        }
+        my $rs = $c->users->reste_password($user);
+        if (!$rs) {
+            $c->render(json => { error => 1, message => $c->users->last_error || 1 });
+            $c->rendered(400);
+            return;
+        }
+        $c->render(json => {});
+        return;
+    }
+    $c->render(json => { error => 1, message => "INVALID_EMAIL" });
+    $c->rendered(400);
+    return;
+}
+
 sub validate_new_user {
     my $c = shift;
     my $params = $c->req->json;