validate([ 'name' => 'required|max:30', 'email' => 'required|email|unique:users|max:255', 'password' => 'required|confirmed |min:8|regex:/[a-z]/|regex:/[A-Z]/|regex:/[0-9]/' ]); $user = new User; $user->name = $request->name; $user->email = $request->email; $user->role = "client"; $user->active = true; $user->password = Hash::make($request->password); $user->save(); Auth::login($user); event(new Registered($user)); } public function forgotPassword(Request $request) { $request->validate(['email' => 'required|email']); $status = Password::sendResetLink( $request->only('email') ); } public function resetPassword(Request $request) { $request->validate([ 'token' => 'required', 'email' => 'required|email', 'password' => 'required|min:8|confirmed', ]); $status = Password::reset( $request->only('email', 'password', 'password_confirmation', 'token'), function ($user, $password) use ($request) { $user->forceFill([ 'password' => Hash::make($password) ])->setRememberToken(Str::random(60)); }); if ($status == Password::PASSWORD_RESET) { return response()->json([ "status" => "success" ]); } } public function login(Request $request) { $credentials = $request->only('email', 'password'); //This should probably be changed to not return a page if (Auth::attempt($credentials)) { $request->session()->regenerate(); $this->clearPaying(); } else { abort(401); } } public function logout(Request $request) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect('/'); } //It should have an orderBy clause to make sure the most recent are first //This should limit non pending orders to 50. Should also return a json of all services public function getOrders(Request $request) { return Auth::user()->orders()->with('service')->withCasts(['updated_at' => 'datetime:d-m-Y'])->latest()->limit(100)->get(); } public function changeName(Request $request) { $validated = $request->validate([ 'name' => 'required|max:30' ]); $user = Auth::user(); $user->name = $request->name; $user->save(); return $user; } public function changeEmail(Request $request) { $validated = $request->validate([ 'email' => 'required|email|unique:users,email', ]); $link = URL::temporarySignedRoute('reset-email', now()->addDays(30), ['user' => Auth::user()->id, 'email' => $request->email]); Mail::to($request->email)->send(new ChangeEmail(Auth::user()->email, $link)); } public function resetEmail(Request $request) { if (! $request->hasValidSignature()) { abort(401); } $validated = $request->validate([ 'email' => 'required|email|unique:users,email', ]); if (! $validated) { abort(401); } $user = User::find($request->user); $user->email = $request->email; $user->save(); return view('email-changed'); } public function changePassword(Request $request) { $validated = $request->validate([ 'current_password' => 'password', 'password' => 'required|confirmed|min:8|regex:/.*[a-z].*/|regex:/.*[A-Z].*/|regex:/.*[0-9].*/' ]); $user = Auth::user(); $user->password = Hash::make($request->password); $user->save(); } public function clearPaying() { $user = Auth::user(); if ($user->paying) { $user->paying = false; $user->save(); } } }