MINI Sh3ll
<?php
namespace App\Solar\Repositories\Verification;
use App\User;
use App\Notifications\verifyAccount;
use Faker\Factory as Faker;
use Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Module;
use App\Models\ModulePermission;
class VerificationRepository implements VerificationInterface {
/**
* @var User
*/
private $user;
/**
* UserRepository constructor.
* @param User $user
*/
public function __construct(User $user) {
$this->user = $user;
}
/**
* sending the email verification
*/
public function sendEmailVerification($userId) {
try {
$data = $this->user->findOrFail($userId);
//send verification link email
$data->notify(new verifyAccount($data));
} catch (Exception $e) {
return redirect()->back()->with('error', $e->getMessage());
}
}
/**
* sending the mobile verification
*/
public function sendMobileVerification($data) {
try {
$response = array();
$user = $this->user->where('mobile', $data['phone'])->first();
if (empty($user)) {
return $response = array('status' => false);
}
$faker = Faker::create();
$user->otp = $faker->numberBetween(10000, 99999);
$user->save();
$sendOtp = send_otp($data['phone'], $user->otp); // send_otp funtion to send otp to phone number
return $sendOtp;
} catch (Exception $e) {
return redirect()->back()->with('error', $e->getMessage());
}
}
/**
* Verify token of new user and the change status to activate account.
*
* @param string verification-token
* @return bool true/false
*/
public function verification($token) {
$check = false;
$verify = $this->user->where('verify_token', $token)->first();
if (empty($verify)) {
return false;
}
$verify->is_email_verified = 1;
$verify->verify_token = null;
$verify->save();
$permission = ModulePermission::where('user_id', '=', $verify->id)->get();
if(!$permission->isEmpty()){
//If already assign permission, give access
ModulePermission::where('user_id', '=', $verify->id)
->update([
'has_access' => 1,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
]);
return true;
} else {
if ($verify->role_id == config('constants.role.superadmin.id')) {
$permissions = config('permissions_constants.permission.superadmin');
} elseif ($verify->role_id == config('constants.role.scpl_user.id')) {
$permissions = config('permissions_constants.permission.scpl_user');
} elseif ($verify->role_id == config('constants.role.company_admin.id')) {
$permissions = config('permissions_constants.permission.company_admin');
} elseif ($verify->role_id == config('constants.role.portal_admin.id')) {
$permissions = config('permissions_constants.permission.portal_admin');
} elseif ($verify->role_id == config('constants.role.portal_support.id')) {
$permissions = config('permissions_constants.permission.portal_support');
} elseif ($verify->role_id == config('constants.role.user.id')) {
$permissions = config('permissions_constants.permission.user');
}
//updateOrCreate permissions according to role
$count = count($permissions);
if ($count > 0) {
for ($i = 0; $i < $count; $i++) {
$module_id = getModule($permissions[$i]['module_code']);
ModulePermission::updateOrCreate(['user_id' => $verify->id,'module_id' => $module_id],[
'module_id' => $module_id,
'user_id' => $verify->id,
'has_access' => 1,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
]);
}
}
return true;
}
return false;
}
/*
* Verify otp and change status to activate account
* @param int otp
* @return bool true/false
*/
public function verifyOtp($request) {
$verify = $this->user->where(['mobile' => $request['phone'], 'otp' => $request['otp']])->first();
if (empty($verify)) {
return false;
}
$verify->is_mobile_verified = 1;
$verify->otp = null;
if ($verify->save()) {
$user = User::where(['mobile' => $request['phone']])->first();
if ($user['is_email_verified'] == 0) {
session()->flash('message', 'Please verify your email address before login');
return redirect()->route('login');
}
Auth::login($user);
return redirect('/');
} else {
return view('auth.enterOtp', ['valid' => true, 'error' => 'Invalid otp provided', 'phone' => $request['mobile']]);
}
}
}
OHA YOOOO