. */ namespace App\Http\Controllers\Auth; use App\Facades\IP; use App\Facades\Options; use App\Http\Controllers\Controller; use App\User; use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; 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 = '/dashboard'; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest'); } /** * Get a validator for an incoming registration request. * * @param array $data * @return \Illuminate\Contracts\Validation\Validator */ protected function validator(array $data) { $password = ['required', 'string', 'confirmed']; switch (Options::getOption('pw_security_policy')) { // this could be better structured, switch doesn't feel right case 'off': $password = ['required', 'string', 'confirmed']; break; case 'low': $password = ['required', 'string', 'min:10', 'confirmed']; break; case 'medium': $password = ['required', 'string', 'confirmed', 'regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[#?!@$%^&*-]).{12,}$/']; break; case 'high': $password = ['required', 'string', 'confirmed', 'regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{20,}$/']; } return Validator::make($data, [ 'uuid' => (Options::getOption('requireGameLicense') && Options::getOption('currentGame') == 'MINECRAFT') ? ['required', 'string', 'unique:users', 'min:32', 'max:32'] : ['nullable', 'string'], 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'dob' => ['required', 'string', 'date_format:Y-m-d', 'before:-13 years'], 'acceptTerms' => ['required', 'accepted'], 'password' => $password, ], [ 'dob.before' => __('You must be 13 years of age or older in order to sign up for an account.'), 'dob.required' => __('Please enter your date of birth.'), 'uuid.required' => __('Please enter a valid (and Premium) Minecraft username! We do not support cracked users.'), 'acceptTerms.required' => __('Please accept the Community Guidelines, Terms of Service and Privacy Policy to continue.'), ]); } /** * Create a new user instance after a valid registration. * * @param array $data * @return \App\User */ protected function create(array $data) { $ip = IP::shouldCollect() ? request()->ip() : '0.0.0.0'; $user = User::create([ 'uuid' => $data['uuid'] ?? 'disabled', 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'registrationIp' => $ip, 'currentIp' => $ip, 'dob' => $data['dob'], ]); $user->assignRole('user'); return $user; } }