get('tmpUserOTP'); if (!$user) { return redirect(RouteServiceProvider::HOME); } return view('auth.verify'); } public function check(Request $request) { $otp = $request->otp; $user = session()->get('tmpUserOTP'); if (!$user) { return redirect(RouteServiceProvider::HOME); } $lastCode = (new Totp())->GenerateToken(Base32::decode($user->totp_secret), Carbon::now()->subSeconds(30)->timestamp); $code = (new Totp())->GenerateToken(Base32::decode($user->totp_secret)); if ($otp === $code || $otp === $lastCode) { Auth::login($user); return redirect(RouteServiceProvider::HOME); } else { Auth::logout(); Session::flush(); return redirect()->route('verification_failed'); } } public function sendOTPBySMS() { $user = session()->get('tmpUserOTP'); if (!$user) { return back()->withErrors('User not found.'); } if (is_null($user->phone)) { return back()->withErrors('Phone number missing.'); } $otp = (new Totp())->GenerateToken(Base32::decode($user->totp_secret)); /** @var \App\Lib\LDC\MailjetSms */ $mj = app('MailjetSms'); $mjResponse = $mj->send("OTP : " . implode(' ', str_split($otp)), $user->phone); /** @var \GuzzleHttp\Psr7\Response $mjResponse */ $responseStatus = $mjResponse->getStatusCode(); // "200" $responsePhrase = $mjResponse->getReasonPhrase(); // "OK" if ($responseStatus == 200) { $mjSmsResponse = $mjResponse->getBody()->getContents(); return back()->with('success', "SMS envoyé."); } return back()->withErrors('SMS not sent.'); } }