Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Http\Controllers\User\Auth;
- use App\Http\Controllers\Controller;
- use App\Models\AdminNotification;
- use App\Models\User;
- use App\Models\UserLogin;
- use Illuminate\Auth\Events\Registered;
- use Illuminate\Foundation\Auth\RegistersUsers;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Hash;
- use Illuminate\Support\Facades\Http;
- use Illuminate\Support\Facades\Validator;
- use Illuminate\Validation\Rules\Password;
- class RegisterController extends Controller
- {
- use RegistersUsers;
- public function __construct()
- {
- $this->middleware('guest');
- $this->middleware('registration.status')->except('registrationNotAllowed');
- $this->activeTemplate = activeTemplate();
- }
- public function showRegistrationForm()
- {
- $pageTitle = "Register";
- $info = json_decode(json_encode(getIpInfo()), true);
- $mobileCode = @implode(',', $info['code']);
- $countries = json_decode(file_get_contents(resource_path('views/includes/country.json')));
- return view($this->activeTemplate . 'user.auth.register', compact('pageTitle', 'mobileCode', 'countries'));
- }
- protected function isDisposableEmail($email)
- {
- $response = Http::withHeaders([
- 'APITOKEN' => '111-111-111-111-111', # get api token here for free : https://dashboard.api-aries.online/
- ])->get('https://api.api-aries.online/v1/checkers/proxy/email/?email=' . urlencode($email));
- $data = $response->json();
- return $data['disposable'] === 'yes';
- }
- protected function validator(array $data)
- {
- $general = gs();
- $passwordValidation = Password::min(6);
- if ($general->secure_password) {
- $passwordValidation = $passwordValidation->mixedCase()->numbers()->symbols()->uncompromised();
- }
- $agree = 'nullable';
- if ($general->agree) {
- $agree = 'required';
- }
- $countryData = (array) json_decode(file_get_contents(resource_path('views/includes/country.json')));
- $countryCodes = implode(',', array_keys($countryData));
- $mobileCodes = implode(',', array_column($countryData, 'dial_code'));
- $countries = implode(',', array_column($countryData, 'country'));
- $validate = Validator::make($data, [
- 'email' => ['required', 'string', 'email', 'unique:users', function ($attribute, $value, $fail) {
- if ($this->isDisposableEmail($value)) {
- $fail('The email is disposable.');
- }
- }],
- 'mobile' => 'required|regex:/^([0-9]*)$/',
- 'password' => ['required', 'confirmed', $passwordValidation],
- 'username' => 'required|unique:users|min:6',
- 'captcha' => 'sometimes|required',
- 'mobile_code' => 'required|in:' . $mobileCodes,
- 'country_code' => 'required|in:' . $countryCodes,
- 'country' => 'required|in:' . $countries,
- 'agree' => $agree
- ]);
- // Check if validation fails
- if ($validate->fails()) {
- return $validate;
- }
- // Additional check for mobile uniqueness
- $exist = User::where('mobile', $data['mobile_code'] . $data['mobile'])->first();
- if ($exist) {
- $validate->errors()->add('mobile', 'The mobile number already exists');
- }
- return $validate;
- }
- public function register(Request $request)
- {
- $this->validator($request->all())->validate();
- $request->session()->regenerateToken();
- if (preg_match("/[^a-z0-9_]/", trim($request->username))) {
- $notify[] = ['info', 'Username can contain only small letters, numbers and underscore.'];
- $notify[] = ['error', 'No special character, space or capital letters in username.'];
- return back()->withNotify($notify)->withInput($request->all());
- }
- if (!verifyCaptcha()) {
- $notify[] = ['error', 'Invalid captcha provided'];
- return back()->withNotify($notify);
- }
- $exist = User::where('mobile', $request->mobile_code . $request->mobile)->first();
- if ($exist) {
- $notify[] = ['error', 'The mobile number already exists'];
- return back()->withNotify($notify)->withInput();
- }
- event(new Registered($user = $this->create($request->all())));
- $this->guard()->login($user);
- return $this->registered($request, $user)
- ?: redirect($this->redirectPath());
- }
- protected function create(array $data)
- {
- $general = gs();
- $referUser = null;
- //User Create
- $user = new User();
- $user->email = strtolower(trim($data['email']));
- $user->password = Hash::make($data['password']);
- $user->username = trim($data['username']);
- $user->ref_by = $referUser ? $referUser->id : 0;
- $user->country_code = $data['country_code'];
- $user->mobile = $data['mobile_code'] . $data['mobile'];
- $user->address = [
- 'address' => '',
- 'state' => '',
- 'zip' => '',
- 'country' => isset($data['country']) ? $data['country'] : null,
- 'city' => ''
- ];
- $user->status = 1;
- $user->kv = $general->kv ? 0 : 1;
- $user->ev = $general->ev ? 0 : 1;
- $user->sv = $general->sv ? 0 : 1;
- $user->ts = 0;
- $user->tv = 1;
- $user->save();
- $adminNotification = new AdminNotification();
- $adminNotification->user_id = $user->id;
- $adminNotification->title = 'New member registered';
- $adminNotification->click_url = urlPath('admin.users.detail', $user->id);
- $adminNotification->save();
- //Login Log Create
- $ip = getRealIP();
- $exist = UserLogin::where('user_ip', $ip)->first();
- $userLogin = new UserLogin();
- //Check exist or not
- if ($exist) {
- $userLogin->longitude = $exist->longitude;
- $userLogin->latitude = $exist->latitude;
- $userLogin->city = $exist->city;
- $userLogin->country_code = $exist->country_code;
- $userLogin->country = $exist->country;
- } else {
- $info = json_decode(json_encode(getIpInfo()), true);
- $userLogin->longitude = @implode(',', $info['long']);
- $userLogin->latitude = @implode(',', $info['lat']);
- $userLogin->city = @implode(',', $info['city']);
- $userLogin->country_code = @implode(',', $info['code']);
- $userLogin->country = @implode(',', $info['country']);
- }
- $userAgent = osBrowser();
- $userLogin->user_id = $user->id;
- $userLogin->user_ip = $ip;
- $userLogin->browser = @$userAgent['browser'];
- $userLogin->os = @$userAgent['os_platform'];
- $userLogin->save();
- return $user;
- }
- public function checkUser(Request $request)
- {
- $exist['data'] = false;
- $exist['type'] = null;
- if ($request->email) {
- $exist['data'] = User::where('email', $request->email)->exists();
- $exist['type'] = 'email';
- }
- if ($request->mobile) {
- $exist['data'] = User::where('mobile', $request->mobile)->exists();
- $exist['type'] = 'mobile';
- }
- if ($request->username) {
- $exist['data'] = User::where('username', $request->username)->exists();
- $exist['type'] = 'username';
- }
- return response($exist);
- }
- public function registered()
- {
- return to_route('user.home');
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement