From c288cee8000d0a8c496a563c492d7e385a5b2372 Mon Sep 17 00:00:00 2001 From: saeid_01 Date: Thu, 2 May 2019 23:43:17 +0430 Subject: [PATCH] Forgot Password BackEnd --- packages/Auth/SendsPasswordResetEmails.php | 79 +++++++++++++ .../src/Facades/MessageResponse.php | 0 .../{messaging => Messaging}/src/Message.php | 0 packages/SMSSender/SMSSender.php | 106 ++++++++++++++++++ routes/api.php | 6 +- routes/web.php | 13 +-- 6 files changed, 195 insertions(+), 9 deletions(-) create mode 100644 packages/Auth/SendsPasswordResetEmails.php rename packages/{messaging => Messaging}/src/Facades/MessageResponse.php (100%) rename packages/{messaging => Messaging}/src/Message.php (100%) create mode 100644 packages/SMSSender/SMSSender.php diff --git a/packages/Auth/SendsPasswordResetEmails.php b/packages/Auth/SendsPasswordResetEmails.php new file mode 100644 index 00000000..66fae030 --- /dev/null +++ b/packages/Auth/SendsPasswordResetEmails.php @@ -0,0 +1,79 @@ +validatePhone($request); + + // We will send the Disposable Password + // to send the Disposable Password , we will examine the response then see the message we + // need to show to the user. Finally, we'll send out a proper response. + return $this->generateAndSendCode($request); + } + + + /** + * Check Disposable Password And Login + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse + */ + public function checkDisposablePassword(Request $request) + { + if ( \Cache::has($request->code) ) { + $userid = \Cache::pull($request->code); + $user = User::where('id', $userid)->first(); + if($user) { + + $password = rand(10000000, 999999999); + $user->password = Hash::make($password); + $user->save(); + + $request->merge([ 'cell_number' => $user->cell_number, 'password' => $password ]); + + return (new LoginController())->login($request); + } + return \MessageResponse::error('User Not Found'); + } + return \MessageResponse::error('Error'); + } + + + protected function generateAndSendCode($request) + { + $user = User::where('cell_number', $request->cell_number)->where('verified', 'Verified')->first(); + if ($user) { + $code = rand(100000, 999999); + \Cache::put($code, $user->id, Carbon::now()->addMinutes(30)); + SMSSender::instance()->patternSend($request->cell_number, '121', ["activate-code" => $code]); + return \MessageResponse::success('Send Disposable Password'); + } + return \MessageResponse::error('User Not Found'); + } + + /** + * Validate the email for the given request. + * + * @param \Illuminate\Http\Request $request + * @return void + */ + protected function validatePhone(Request $request) + { + $request->validate(['cell_number' => 'required|digits:11']); + } + +} diff --git a/packages/messaging/src/Facades/MessageResponse.php b/packages/Messaging/src/Facades/MessageResponse.php similarity index 100% rename from packages/messaging/src/Facades/MessageResponse.php rename to packages/Messaging/src/Facades/MessageResponse.php diff --git a/packages/messaging/src/Message.php b/packages/Messaging/src/Message.php similarity index 100% rename from packages/messaging/src/Message.php rename to packages/Messaging/src/Message.php diff --git a/packages/SMSSender/SMSSender.php b/packages/SMSSender/SMSSender.php new file mode 100644 index 00000000..40a18247 --- /dev/null +++ b/packages/SMSSender/SMSSender.php @@ -0,0 +1,106 @@ + 'کد فعال سازی: %activate-code%', + ]; + + private function __construct() { } + + public static function instance() { + if (static::$panel === null) { + static::$panel = new static(); + } + return static::$panel; + } + + public function setUserName ($userName) + { + $this->userName = $userName; + return $this; + } + + public function setPassword ($password) + { + $this->password = $password; + return $this; + } + + public function setWebService ($webService) + { + $this->webService = $webService; + return $this; + } + + public function getUserName () + { + return ($this->userName) ? $this->userName : env('SMS_USERNAME', ''); + } + + public function getPassword () + { + return ($this->password) ? $this->password : env('SMS_PASSWORD', ''); + } + + public function getFromNumber () + { + return ($this->fromNumber) ? $this->fromNumber : env('SMS_FROM_NUMBER', ''); + } + + public function getWebService () + { + return ($this->webService) ? $this->webService : env('SMS_WEBSERVICE', ''); + } + + public function patternSend($cellNumber, $pattern_code, $input_data) + { + if (is_string($cellNumber)) { + $cellNumber = [$cellNumber]; + } + try { + $user = $this->getUserName(); + $pass = $this->getPassword(); + $fromNum = $this->getFromNumber(); + + $client = new \SoapClient($this->getWebService()); + $client->sendPatternSms($fromNum, $cellNumber, $user, $pass, $pattern_code, $input_data); + + } catch (\SoapFault $sf) { + print $sf->faultcode . "\n"; + print $sf->faultstring . "\n"; + return ['code' => $sf->faultcode, 'message' => $sf->faultstring]; + } + } + + public function send($cellNumber, $messageContent) + { + if (is_string($cellNumber)) { + $cellNumber = [$cellNumber]; + } + ini_set("soap.wsdl_cache_enabled", "0"); + try { + $user = $this->getUserName(); + $pass = $this->getPassword(); + $fromNum = $this->getFromNumber(); + //If you want to send in the future ==> $time = '2016-07-30' //$time = '2016-07-30 12:50:50' + $client = new \SoapClient($this->getWebService()); + $client->SendSMS($fromNum, $cellNumber, $messageContent, $user, $pass, '', 'send'); + return true; + } catch (\SoapFault $sf) { + print $sf->faultcode . "\n"; + print $sf->faultstring . "\n"; + return ['code' => $sf->faultcode, 'message' => $sf->faultstring]; + } + } + +} diff --git a/routes/api.php b/routes/api.php index 062948de..74019a0b 100644 --- a/routes/api.php +++ b/routes/api.php @@ -16,8 +16,9 @@ Route::group(['namespace' => 'Api'],function () { Route::post('/login', 'Auth\LoginController@login')->name('login'); Route::post('/logout', 'Auth\LoginController@logout')->name('logout')->middleware('auth:api'); Route::post('/register', 'Auth\RegisterController@register')->name('register'); - Route::post('/password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); - Route::post('/password/reset', 'Auth\ResetPasswordController@reset')->name('password.reset'); + Route::post('/password/phone', 'Auth\ForgotPasswordController@sendDisposablePassword'); + Route::post('/password/verifyCode', 'Auth\ForgotPasswordController@checkDisposablePassword'); + Route::post('/password/reset', 'Auth\ResetPasswordController@reset')->name('password.reset')->middleware('auth:api'); }); @@ -33,3 +34,4 @@ Route::post('Users/ChangeStatus/{User}', 'UserController@changeStatus')->middlew Route::post('Users/ChangeRole/{User}', 'UserController@changeRole')->middleware('auth:api'); Route::post('UpdateInfo', 'UserController@updateInfo')->middleware('auth:api'); Route::resource('Users', 'UserController'); +Route::post('/TestResults/Verify/{TestResult}', 'TestResultController@verifyTestResult'); diff --git a/routes/web.php b/routes/web.php index a18836d7..bfa228eb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -10,8 +10,10 @@ | contains the "web" middleware group. Now create something great! | */ - - +// +// app()->bind('messages', function() { +// return new \App\Appended\Classes\Common\Response\MessageResponse; +// }); /* |-------------------------------------------------------------------------- @@ -42,9 +44,6 @@ Route::post('oauth/token/refresh', '\Laravel\Passport\Http\Controllers\Transient Route::get('oauth/tokens', '\Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser')->middleware('auth:api'); Route::delete('oauth/tokens/{token_id}', '\Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy')->middleware('auth:api'); - - - /* |-------------------------------------------------------------------------- | Vue Router @@ -53,6 +52,6 @@ Route::delete('oauth/tokens/{token_id}', '\Laravel\Passport\Http\Controllers\Aut | Allows vue router to pick up all other URL's. | */ -Route::any('{all}', function() { +Route::any('{all}', function(){ return view('welcome'); -})->where('all' ,'.*'); +})->where(['all' => '.*']);