File: /home/bdedition/public_html/core/app/Http/Controllers/User/AuthorizationController.php
<?php
namespace App\Http\Controllers\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
use App\Http\Controllers\Controller;
use App\Constants\Status;
use App\Lib\Intended;
class AuthorizationController extends Controller
{
protected function checkCodeValidity($user, $addMin = 2)
{
if (!$user->ver_code_send_at) {
return false;
}
if ($user->ver_code_send_at->addMinutes($addMin) < Carbon::now()) {
return false;
}
return true;
}
public function authorizeForm()
{
$user = auth()->user();
if (!$user->status) {
$pageTitle = 'Banned';
$type = 'ban';
} elseif (!$user->ev) {
$type = 'email';
$pageTitle = 'Verify Email';
$notifyTemplate = 'EVER_CODE';
} elseif (!$user->sv) {
$type = 'sms';
$pageTitle = 'Verify Mobile Number';
$notifyTemplate = 'SVER_CODE';
} elseif (!$user->tv) {
$pageTitle = '2FA Verification';
$type = '2fa';
} else {
return to_route('user.home');
}
if (!$this->checkCodeValidity($user) && ($type != '2fa') && ($type != 'ban')) {
$user->ver_code = verificationCode(6);
$user->ver_code_send_at = Carbon::now();
$user->save();
notify($user, $notifyTemplate, [
'code' => $user->ver_code
], [$type]);
}
return view('staff.auth.authorization.' . $type, compact('user', 'pageTitle'));
}
public function sendVerifyCode($type)
{
$user = auth()->user();
if ($this->checkCodeValidity($user)) {
$targetTime = $user->ver_code_send_at->addMinutes(2)->timestamp;
$delay = $targetTime - time();
throw ValidationException::withMessages(['resend' => 'Please try after ' . $delay . ' seconds']);
}
$user->ver_code = verificationCode(6);
$user->ver_code_send_at = Carbon::now();
$user->save();
if ($type == 'email') {
$type = 'email';
$notifyTemplate = 'EVER_CODE';
} else {
$type = 'sms';
$notifyTemplate = 'SVER_CODE';
}
notify($user, $notifyTemplate, [
'code' => $user->ver_code
], [$type]);
$notify[] = ['success', 'Verification code sent successfully'];
return back()->withNotify($notify);
}
public function emailVerification(Request $request)
{
$request->validate([
'code' => 'required'
]);
$user = auth()->user();
if ($user->ver_code == $request->code) {
$user->ev = Status::VERIFIED;
$user->ver_code = null;
$user->ver_code_send_at = null;
$user->save();
$redirection = Intended::getRedirection();
return $redirection ? $redirection : to_route('user.home');
}
throw ValidationException::withMessages(['code' => 'Verification code didn\'t match!']);
}
public function mobileVerification(Request $request)
{
$request->validate([
'code' => 'required',
]);
$user = auth()->user();
if ($user->ver_code == $request->code) {
$user->sv = Status::VERIFIED;
$user->ver_code = null;
$user->ver_code_send_at = null;
$user->save();
$redirection = Intended::getRedirection();
return $redirection ? $redirection : to_route('user.home');
}
throw ValidationException::withMessages(['code' => 'Verification code didn\'t match!']);
}
public function g2faVerification(Request $request)
{
$user = auth()->user();
$request->validate([
'code' => 'required',
]);
$response = verifyG2fa($user, $request->code);
if ($response) {
$redirection = Intended::getRedirection();
return $redirection ? $redirection : to_route('user.home');
} else {
$notify[] = ['error', 'Wrong verification code'];
return back()->withNotify($notify);
}
}
}