ldc-web/app/Http/Controllers/OTPController.php
Vincent BRIDIER e804ced4d1 - Add Handler
- Remove InstantWin
- Add OTP SMS
- Update OTP Vue component
2021-08-03 16:24:49 +02:00

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.');
}
}