64 lines
2.1 KiB
PHP
64 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Providers\RouteServiceProvider;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use lfkeitel\phptotp\{Base32,Totp};
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Session;
|
|
|
|
class OTPController extends Controller
|
|
{
|
|
public function verify(Request $request) {
|
|
$user = session()->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.');
|
|
}
|
|
|
|
}
|