canGeneratePasswordReset = $canGeneratePasswordReset; $this->fetchesUser = $fetchesUser; $this->generatesPasswordReset = $generatesPasswordReset; $this->passwordResetTokenExpiration = $passwordResetTokenExpiration; $this->sendResetPasswordEmail = $sendResetPasswordEmail; } /** * @param Request $request * @return JsonResponse * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException */ public function logic(Request $request): JsonResponse { $object = new GeneratePasswordResetObject($request->input('email')); if($this->canGeneratePasswordReset->passes($object)) { $user = $this->fetchesUser->execute(['email' => $object->getEmail()]); $attempt = $this->generatesPasswordReset->execute($user); $this->passwordResetTokenExpiration::dispatch($attempt)->delay(now()->addHours(24)); $this->sendResetPasswordEmail::dispatch($user, $attempt); return $this->response(['email' => $object->getEmail()]); } } }