ldc-web/app/Http/Controllers/OTPController.php
2022-06-13 15:49:59 +02:00

72 lines
2.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Providers\RouteServiceProvider;
use Carbon\Carbon;
use Illuminate\Http\Request;
use lfkeitel\phptotp\Base32;
use lfkeitel\phptotp\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.');
}
}