Browse Source

Merge pull request #2000 from visuddhinanda/laravel

forgot-password
visuddhinanda 2 years ago
parent
commit
934dfd3b39

+ 84 - 0
app/Http/Controllers/ForgotPasswordController.php

@@ -0,0 +1,84 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\UserInfo;
+use Illuminate\Http\Request;
+use Illuminate\Support\Str;
+use Mail;
+use App\Mail\ForgotPassword;
+
+class ForgotPasswordController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+        $user = UserInfo::where('email',$request->get('email'))->first();
+        if(!$user){
+            return $this->error('no user',404,404);
+        }
+        $resetToken = Str::uuid();
+        $user->reset_password_token = $resetToken;
+        $ok = $user->save();
+        if(!$ok){
+            return $this->error('fail on update reset_password_token',500,500);
+        }
+
+        Mail::to($request->get('email'))
+            ->send(new ForgotPassword($resetToken,$request->get('lang'),$request->get('dashboard')));
+        if(Mail::failures()){
+            return $this->error('send email fail',[],200);
+        }
+        return $this->ok('');
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\Models\UserInfo  $userInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function show(UserInfo $userInfo)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\UserInfo  $userInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, UserInfo $userInfo)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\UserInfo  $userInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(UserInfo $userInfo)
+    {
+        //
+    }
+}

+ 88 - 0
app/Http/Controllers/ResetPasswordController.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\UserInfo;
+use Illuminate\Http\Request;
+
+class ResetPasswordController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+        $user = UserInfo::where('reset_password_token',$request->get('token'))
+                        ->where('username',$request->get('username'))
+                        ->first();
+        if(!$user){
+        return $this->error('no token',404,404);
+        }
+        if(mb_strlen($request->get('password'),'UTF-8')<6){
+            return $this->error('input is invalid',402,402);
+        }
+        $user->password = md5($request->get('password'));
+        $user->reset_password_token = null;
+        $ok = $user->save();
+        if($ok){
+            return $this->ok($user);
+        }else{
+            return $this->error('fail to set password',500,500);
+        }
+
+    }
+
+    /**
+     * 根据token获取用户名.
+     *
+     * @param  string  $token
+     * @return \Illuminate\Http\Response
+     */
+    public function show($token)
+    {
+        //
+        $user = UserInfo::where('reset_password_token',$token)
+                        ->select(['username'])->first();
+        if(!$user){
+            return $this->error('no token',404,404);
+        }
+        return $this->ok($user);
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\UserInfo  $userInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, UserInfo $userInfo)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\UserInfo  $userInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(UserInfo $userInfo)
+    {
+        //
+    }
+}

+ 2 - 1
app/Http/Controllers/SentenceController.php

@@ -513,8 +513,9 @@ class SentenceController extends Controller
                         if(!empty($factorMeaning[$key])){
                             $newData['wbw_word'] = $factor;
                             $newData['data'] = $factorMeaning[$key];
+                            $newData['type'] = 5;
                             WbwAnalysis::insert($newData);
-                            RedisClusters::put("{$prefix}/{$factor}/3/{$editorId}",$factorMeaning[$key]);
+                            RedisClusters::put("{$prefix}/{$factor}/5/{$editorId}",$factorMeaning[$key]);
                         }
                     }
                 }

+ 14 - 4
app/Http/Controllers/WbwLookupController.php

@@ -71,6 +71,7 @@ class WbwLookupController extends Controller
                           "time"=>(int)($endAt-$startAt)]);
     }
 
+    //查用户字典获取全部结果
     public function lookup($words,$bases,$deep){
 		$wordPool = array();
 		$output  = array();
@@ -275,7 +276,7 @@ class WbwLookupController extends Controller
                         $factors = $this->insertValue([$value->factors],$factors,$increment);
                     }
                     if(isset($data['factorMeaning']) && $data['factorMeaning']['status'] < 50){
-                        $factorMeaning = $this->insertValue([$value->factormean],$factorMeaning,$increment);
+                        $factorMeaning = $this->insertValue([$value->factormean],$factorMeaning,$increment,false);
                     }
 
                     if($data['meaning']['status'] < 50){
@@ -314,19 +315,25 @@ class WbwLookupController extends Controller
                 }
                 //拆分意思
                 if(count($factorMeaning) === 0){
-                    $autoMeaning = '';
                     //生成自动的拆分意思
+                    $autoMeaning = '';
                     $currFactors = explode('+',$data['factors']['value']) ;
                     $autoFM = [];
                     foreach ($currFactors as $factor) {
                         $subFactors = explode('-',$factor) ;
                         $autoSubFM = [];
                         foreach ($subFactors as $subFactor) {
-                            $preference = $this->wbwPreference($subFactor,'meaning',$user['user_id']);
+                            $preference = $this->wbwPreference($subFactor,'factorMeaning',$user['user_id']);
                             if($preference !== false){
                                 $autoSubFM[] = $preference['value'];
                             }else{
-                                $autoSubFM[] = '';
+                                $preference = $this->wbwPreference($subFactor,'meaning',$user['user_id']);
+                                if($preference !== false){
+                                    $autoSubFM[] = $preference['value'];
+                                }else{
+                                    $autoSubFM[] = '';
+                                }
+
                             }
                         }
                         $autoFM[] = implode('-',$autoSubFM);
@@ -526,6 +533,9 @@ class WbwLookupController extends Controller
         return $indexed;
     }
 
+    /**
+     * $empty:是否允许空值
+     */
     private function insertValue($value,$container,$increment,$empty=true){
         foreach ($value as $one) {
             if($empty === false){

+ 47 - 0
app/Mail/ForgotPassword.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace App\Mail;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Mail\Mailable;
+use Illuminate\Queue\SerializesModels;
+
+class ForgotPassword extends Mailable
+{
+    use Queueable, SerializesModels;
+
+    protected $uuid;
+    protected $lang;
+    protected $dashboard_url;
+
+    /**
+     * Create a new message instance.
+     *
+     * @return void
+     */
+    public function __construct(string $uuid,string $lang='en-US',string $dashboard=null)
+    {
+        //
+        $this->uuid = $uuid;
+        $this->lang = $lang;
+        if($dashboard && !empty($dashboard)){
+            $this->dashboard_url = $dashboard;
+        }else{
+            $this->dashboard_url = config('mint.server.dashboard_base_path');
+        }
+    }
+
+    /**
+     * Build the message.
+     *
+     * @return $this
+     */
+    public function build()
+    {
+        return $this->view('emails.reset_password.'.$this->lang)
+                    ->with([
+                        'url' => $this->dashboard_url.'/anonymous/users/reset-password/'.$this->uuid,
+                    ]);
+    }
+}

+ 13 - 0
resources/views/emails/reset_password/en-US.blade.php

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>reset password</title>
+    </head>
+<body>
+<div>wikipali reset password</div>
+<div>We receive request of reset password. If you </div>
+<div>click link reset password</div>
+<div><a href='{{ $url }}'>{{ $url }}</a></div>
+<div>This email is sent automatically by system, please don't reply.</div>
+</body>
+</html>

+ 13 - 0
resources/views/emails/reset_password/en.blade.php

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>reset password</title>
+    </head>
+<body>
+<div>wikipali reset password</div>
+<div>We receive request of reset password. If you </div>
+<div>click link reset password</div>
+<div><a href='{{ $url }}'>{{ $url }}</a></div>
+<div>This email is sent automatically by system, please don't reply.</div>
+</body>
+</html>

+ 14 - 0
resources/views/emails/reset_password/zh-Hans.blade.php

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>重置密码</title>
+    </head>
+<body>
+<div>wikipali 重置密码</div>
+<div>您收到此邮件是因为有人提交了密码重置请求,如果您没有做此操作,请忽略此邮件。</div>
+<div>点击此链接重置密码。</div>
+<div><a href='{{ $url }}'>{{ $url }}</a></div>
+<div>此链接包涵重置账户密码的全部信息,请勿转发。</div>
+<div>此邮件为系统自动发送,请勿回复。</div>
+</body>
+</html>

+ 13 - 0
resources/views/emails/reset_password/zh-Hant.blade.php

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>重置密碼</title>
+    </head>
+<body>
+<div>wikipali 重置密碼</div>
+<div>您收到此郵件是因為有人提交了密碼重置請求,如果您冇有做此操作,請忽略此郵件。</div>
+<div>點選此鏈接重置密碼。</div>
+<div><a href='{{ $url }}'>{{ $url }}</a></div>
+<div>此郵件為係統自動發送,請勿回複。</div>
+</body>
+</html>

+ 4 - 0
routes/api.php

@@ -89,6 +89,8 @@ use App\Http\Controllers\InteractiveController;
 use App\Http\Controllers\ChapterIndexController;
 use App\Http\Controllers\WbwSentenceController;
 use App\Http\Controllers\SnowFlakeIdController;
+use App\Http\Controllers\ForgotPasswordController;
+use App\Http\Controllers\ResetPasswordController;
 
 /*
 |--------------------------------------------------------------------------
@@ -146,6 +148,8 @@ Route::group(['prefix' => 'v2'],function(){
 
     Route::get('auth/current',[AuthController::class,'getUserInfoByToken']);
     Route::post('sign-in',[AuthController::class,'signIn']);
+    Route::apiResource('auth/forgot-password',ForgotPasswordController::class);
+    Route::apiResource('auth/reset-password',ResetPasswordController::class);
 
     Route::apiResource('corpus',CorpusController::class);
     Route::get('corpus-sent/{id}',[CorpusController::class,'showSent']);