diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php index c34973d..711f898 100644 --- a/app/Http/Controllers/Auth/ForgotPasswordController.php +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -2,10 +2,57 @@ namespace App\Http\Controllers\Auth; +use App\Http\Requests\ForgotPasswordRequest; +use App\Mail\ResetPassword; +use App\Models\User; +use App\Traits\ApiResponse; +use Carbon\Carbon; use App\Http\Controllers\Controller; use Illuminate\Http\Request; +use Illuminate\Http\JsonResponse; +use Illuminate\Support\Facades\Mail; +use Illuminate\Support\Facades\DB; class ForgotPasswordController extends Controller { - // + use ApiResponse; + + public function __invoke(ForgotPasswordRequest $request) + { + $verify = User::where('email', $request->all()['email'])->exists(); + + if ($verify) { + + $verify2 = DB::table('password_resets')->where([ + ['email', $request->all()['email']] + ]); + + if ($verify2->exists()) { + $verify2->delete(); + } + + $token = random_int(100000, 999999); + $password_reset = DB::table('password_resets')->insert([ + 'email' => $request->all()['email'], + 'token' => $token, + 'created_at' => Carbon::now() + + ]); + + if ($password_reset) { + $sendMail = Mail::to($request->all()['email'])->send(new ResetPassword($token)); + + return $this->successResponse(true, "Please check your email for a 6 digit pin", 200); + } + } else { + return $this->errorResponse(false, "This email does not exist", 400); + } + } + + + public function verifyPin(Request $request) + { + + + } } diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php new file mode 100644 index 0000000..ce53fb2 --- /dev/null +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -0,0 +1,56 @@ +where([ + ['email', $resetPasswordRequest->email], + ['token', $resetPasswordRequest->token], + ]); + + if ($check->exists()) { + + $difference = Carbon::now()->diffInSeconds($check->first()->created_at); + if ($difference > 3600) { + return $this->errorResponse(false, "Token Expired", 400); + } + + $delete = DB::table('password_resets')->where([ + ['email', $resetPasswordRequest->email], + ['token', $resetPasswordRequest->token], + ])->delete(); + + $user = User::with('roles')->firstWhere('email', $resetPasswordRequest->email); + $role = $user->roles()->first(); + + $user->update([ + 'password' => Hash::make($resetPasswordRequest->password) + ]); + + $token = $user->first()->createToken('API Token', [$role->name]); + + return $this->successResponse([ + 'token' => $token->plainTextToken, + 'user' => $user + ], + "You can now reset your password", + 200); + + } else { + return $this->errorResponse(false, "Invalid token", 401); + } + } +} \ No newline at end of file diff --git a/app/Http/Requests/ForgotPasswordRequest.php b/app/Http/Requests/ForgotPasswordRequest.php new file mode 100644 index 0000000..448e1a7 --- /dev/null +++ b/app/Http/Requests/ForgotPasswordRequest.php @@ -0,0 +1,30 @@ + + */ + public function rules() + { + return [ + 'email' => ['required', 'string', 'email', 'max:255'], + ]; + } +} diff --git a/app/Http/Requests/ResetPasswordRequest.php b/app/Http/Requests/ResetPasswordRequest.php new file mode 100644 index 0000000..c90996c --- /dev/null +++ b/app/Http/Requests/ResetPasswordRequest.php @@ -0,0 +1,32 @@ + + */ + public function rules() + { + return [ + 'email' => ['required', 'string', 'email', 'max:255'], + 'password' => ['required', 'string', 'min:6', 'confirmed'], + 'token' => ['required'], + ]; + } +} diff --git a/app/Repositories/Pld/PldRepository.php b/app/Repositories/Pld/PldRepository.php index 016be39..066624a 100644 --- a/app/Repositories/Pld/PldRepository.php +++ b/app/Repositories/Pld/PldRepository.php @@ -163,7 +163,7 @@ class PldRepository extends AbstractRepository implements PldContractInterface $i++; } - return $this->execute($fields, $params) + $test = $this->execute($fields, $params) ->groupBy('day_formatted', 'day_calc', 'submarket', 'year_month', 'year_month_formatted') ->get(); diff --git a/routes/api.php b/routes/api.php index e94c7d7..7da44ef 100644 --- a/routes/api.php +++ b/routes/api.php @@ -17,6 +17,8 @@ use Illuminate\Support\Facades\Route; Route::prefix('auth')->group(function (){ Route::post('login', [\App\Http\Controllers\Auth\AuthController::class, 'login']); Route::post('logout', [\App\Http\Controllers\Auth\AuthController::class, 'logout']); + Route::post('/forgot-password', \App\Http\Controllers\Auth\ForgotPasswordController::class); + Route::post('/reset-password', \App\Http\Controllers\Auth\ResetPasswordController::class); }); Route::middleware(['auth:sanctum', 'verified'])->group(function () {