My SMM panel
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 
 
 

147 рядки
3.7 KiB

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Models\User;
  5. use App\Models\Order;
  6. use App\Models\Service;
  7. use App\Notifications\ChangeEmail;
  8. use Illuminate\Support\Facades\Log;
  9. use Illuminate\Support\Facades\Hash;
  10. use Illuminate\Support\Facades\URL;
  11. use Illuminate\Auth\Events\Registered;
  12. use Illuminate\Support\Facades\Password;
  13. use Illuminate\Support\Facades\Auth;
  14. class UserController extends Controller
  15. {
  16. public function create(Request $request) {
  17. $validated = $request->validate([
  18. 'name' => 'required|max:30',
  19. 'email' => 'required|email|unique:users,email',
  20. 'password' => 'required|confirmed|min:8|regex:/[a-z]/|regex:/[A-Z]/|regex:/[0-9]/'
  21. ]);
  22. $user = new User;
  23. $user->name = $request->name;
  24. $user->email = $request->email;
  25. $user->role = "client";
  26. $user->active = true;
  27. $user->password = Hash::make($request->password);
  28. $user->save();
  29. event(new Registered($user));
  30. }
  31. public function forgotPassword(Request $request) {
  32. $request->validate(['email' => 'required|email']);
  33. $status = Password::sendResetLink(
  34. $request->only('email')
  35. );
  36. }
  37. public function resetPassword(Request $request) {
  38. $request->validate([
  39. 'token' => 'required',
  40. 'email' => 'required|email',
  41. 'password' => 'required|min:8|confirmed',
  42. ]);
  43. $status = Password::reset(
  44. $request->only('email', 'password',
  45. 'password_confirmation', 'token'),
  46. function ($user, $password) use ($request) {
  47. $user->forceFill([
  48. 'password' => Hash::make($password)
  49. ])->setRememberToken(Str::random(60));
  50. });
  51. if ($status == Password::PASSWORD_RESET) {
  52. return response()->json([
  53. "status" => "success"
  54. ]);
  55. }
  56. }
  57. public function login(Request $request) {
  58. $credentials = $request->only('email', 'password');
  59. //This should probably be changed to not return a page
  60. if (Auth::attempt($credentials)) {
  61. $request->session()->regenerate();
  62. } else {
  63. abort(401);
  64. }
  65. }
  66. public function logout(Request $request) {
  67. Auth::logout();
  68. $request->session()->invalidate();
  69. $request->session()->regenerateToken();
  70. return redirect('/');
  71. }
  72. //It should have an orderBy clause to make sure the most recent are first
  73. //This should limit non pending orders to 50. Should also return a json of all services
  74. public function getOrders(Request $request) {
  75. /* Log::debug(Auth::user()->orders()->service_name); */
  76. return Auth::user()->orders()->with('service')->withCasts(['updated_at'
  77. => 'datetime:d-m-Y'])->latest()->get();
  78. }
  79. public function changeName(Request $request) {
  80. $validated = $request->validate([
  81. 'name' => 'required|max:30'
  82. ]);
  83. $user = Auth::user();
  84. $user->name = $request->name;
  85. $user->save();
  86. return $user;
  87. }
  88. public function changeEmail(Request $request) {
  89. $validated = $request->validate([
  90. 'email' => 'required|email|unique:users,email',
  91. ]);
  92. $link = URL::temporarySignedRoute('reset-email', now()->addDays(30),
  93. ['user' => Auth::user()->id, 'email' => $request->email]);
  94. Auth::user()->notify(new ChangeEmail($link));
  95. }
  96. public function resetEmail(Request $request) {
  97. if (! $request->hasValidSignature()) {
  98. abort(401);
  99. }
  100. $validated = $request->validate([
  101. 'email' => 'required|email|unique:users,email',
  102. ]);
  103. if (! $validated) {
  104. abort(401);
  105. }
  106. $user = User::find($request->user);
  107. $user->email = $request->email;
  108. $user->save();
  109. return view('email-changed');
  110. }
  111. public function changePassword(Request $request) {
  112. $validated = $request->validate([
  113. 'current_password' => 'password',
  114. 'password' => 'required|confirmed|min:8|regex:/.*[a-z].*/|regex:/.*[A-Z].*/|regex:/.*[0-9].*/'
  115. ]);
  116. $user = Auth::user();
  117. $user->password = Hash::make($request->password);
  118. $user->save();
  119. }
  120. }