MINI Sh3ll
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Models\Role;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use App\Notifications\WelcomeMail;
use App\Rules\EmailCheck;
use App\Solar\Repositories\Verification\VerificationInterface;
use App\Solar\Repositories\User\UserInterface;
use App\Solar\Repositories\User\UserRepository;
use Illuminate\Http\Request;
use App\Models\Module;
use App\Models\ModulePermission;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/login';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct(UserInterface $user)
{
$this->middleware('guest');
$this->user = $user;
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
//'unique:users'
return Validator::make($data, [
'first_name' => ['required', 'string', 'max:255'],
'last_name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', new EmailCheck],
'mobile' => ['required', 'regex:/^([0-9\s\-\+\(\)]*)$/', 'min:10', 'unique:users'],
'agree' => ['required'],
]);
}
/**j
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
* first_name, middle_name, last_name, email, password, mobile
*
*/
public function register(Request $request , VerificationInterface $repoVerify)
{
$this->validator($request->all())->validate();
$token = generateRandomString('20');
$user = User::where(['email'=>$request['email']])->first();
$password = generate_password();
if($user){
$userUpdateCount = User::where('email', '=', $request['email'])
->update(['middle_name' => $request['middle_name'],
'last_name' => $request['last_name'],
'mobile' => $request['mobile'],
'password' => Hash::make($password)]);
}
else{
$user = User::create([
'first_name' => $request['first_name'],
'middle_name' => $request['middle_name'],
'last_name' => $request['last_name'],
'email' => $request['email'],
'mobile' => $request['mobile'],
'password' => Hash::make($password),
'verify_token' => $token,
'role_id' => config('constants.role.user.id')
]);
}
$user['password'] = $password;
$user->notify(new welcomeMail($user));
$repoVerify->sendMobileVerification($user);
session()->flash('status', 'Verification link is sent to your email address. Please verify email link.');
return $this->registered($request, $user)?: redirect($this->redirectPath());
}
/**
* Handle email verification link with token
*
* @return \Illuminate\Http\Response
*/
public function verifyToken($token, VerificationInterface $repoVerify) {
if($repoVerify->verification($token)) {
return redirect()->route('login')->with('success','Account verified successfully. Continue with login');
}
return redirect()->route('login')->with('error', 'Invalid verification link provided');
}
public function resendVerification($userId, VerificationInterface $repoVerify) {
return $repoVerify->sendEmailVerification($userId);
}
public function getModule($module_code) {
return Module::where('module_code', $module_code)->pluck('id')->first();
}
}
OHA YOOOO