middleware('guest'); } /** * Get a validator for an incoming registration request. * * @param array $data * @return \Illuminate\Contracts\Validation\Validator */ protected function validator(array $data) { $validationRules = [ 'name' => ['required', 'string', 'max:30', 'min:4', 'alpha_num', 'unique:users'], 'email' => ['required', 'string', 'email', 'max:64', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], ]; if (config('SETTINGS::RECAPTCHA:ENABLED') == 'true') { $validationRules['g-recaptcha-response'] = ['required', 'recaptcha']; } if (config('SETTINGS::SYSTEM:REGISTER_IP_CHECK', 'true') == 'true') { //check if ip has already made an account $data['ip'] = session()->get('ip') ?? request()->ip(); if (User::where('ip', '=', request()->ip())->exists()) session()->put('ip', request()->ip()); $validationRules['ip'] = ['unique:users']; return Validator::make($data, $validationRules, [ 'ip.unique' => "You have already made an account! Please contact support if you think this is incorrect." ]); } return Validator::make($data, $validationRules); } /** * Create a new user instance after a valid registration. * * @param array $data * @return User */ protected function create(array $data) { $user = User::create([ 'name' => $data['name'], 'email' => $data['email'], 'credits' => config('SETTINGS::USER:INITIAL_CREDITS', 150), 'server_limit' => config('SETTINGS::USER:INITIAL_SERVER_LIMIT', 1), 'password' => Hash::make($data['password']), ]); $response = Pterodactyl::client()->post('/application/users', [ "external_id" => App::environment('local') ? Str::random(16) : (string)$user->id, "username" => $user->name, "email" => $user->email, "first_name" => $user->name, "last_name" => $user->name, "password" => $data['password'], "root_admin" => false, "language" => "en" ]); if ($response->failed()) { $user->delete(); throw ValidationException::withMessages([ 'ptero_registration_error' => [__('Account already exists on Pterodactyl. Please contact the Support!')], ]); } $user->update([ 'pterodactyl_id' => $response->json()['attributes']['id'] ]); return $user; } }