ldc-web/app/Http/Controllers/OTPController.php
2022-06-15 12:07:34 +02:00

85 lines
2.4 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\ValidateOtpRequest;
use App\Providers\RouteServiceProvider;
use GuzzleHttp\Exception\RequestException;
use lfkeitel\phptotp\Base32;
use lfkeitel\phptotp\Totp;
use Illuminate\Support\Facades\Auth;
class OTPController extends Controller
{
/**
* Show verifiy otp page
*
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
*/
public function verify()
{
$user = session()->get('tmpUserOTP');
if (!$user) {
return redirect(RouteServiceProvider::HOME);
}
return view('auth.verify');
}
/**
* Check OPT request
*
* @param ValidateOtpRequest $request
* @return \Illuminate\Http\RedirectResponse
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
*/
public function check(ValidateOtpRequest $request)
{
//phpcs:enable
$user = session()->get('tmpUserOTP');
if (!$user) {
return \response()->redirectTo(RouteServiceProvider::HOME);
}
Auth::login($user);
return \response()->redirectTo(RouteServiceProvider::HOME);
}
/**
* Send OPT by SMS
*
* @return \Illuminate\Http\RedirectResponse
*/
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));
if (!$otp) {
return back()->withErrors('Erreur lors de la génération du code OTP');
}
/** @var \App\Lib\LDC\MailjetSms */
$mj = app('MailjetSms');
try {
$mjResponse = $mj->send("OTP : " . implode(' ', str_split($otp)), $user->phone);
/** @var \GuzzleHttp\Psr7\Response $mjResponse */
$responseStatus = $mjResponse->getStatusCode();
if ($responseStatus == 200) {
return back()->with('success', 'SMS envoyé.');
}
return back()->withErrors('SMS not sent.');
} catch (RequestException $e) {
report($e);
return back()->withErrors('Erreur lors de l\'envoi du SMS');
}
}
}