My SMM panel
 
 
 
 
 
 

171 lines
4.0 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\Mail\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. use Illuminate\Notifications\Messages\MailMessage;
  15. use Mail;
  16. use Stripe\Stripe;
  17. use Stripe\Customer;
  18. class UserController extends Controller
  19. {
  20. public function create(Request $request) {
  21. $validated = $request->validate([
  22. 'name' => 'required|max:30',
  23. 'email' => 'required|email|unique:users|max:255',
  24. 'password' => ['required', 'confirmed',
  25. Password::min(8)
  26. ->letters()
  27. ->mixedCase()
  28. ->numbers()
  29. ->symbols()
  30. ],
  31. ]);
  32. $user = new User;
  33. $user->name = $request->name;
  34. $user->email = $request->email;
  35. $user->role = "client";
  36. $user->active = true;
  37. $user->password = Hash::make($request->password);
  38. $user->save();
  39. Auth::login($user);
  40. event(new Registered($user));
  41. }
  42. public function forgotPassword(Request $request) {
  43. $request->validate(['email' => 'required|email']);
  44. $status = Password::sendResetLink(
  45. $request->only('email')
  46. );
  47. }
  48. public function resetPassword(Request $request) {
  49. $request->validate([
  50. 'token' => 'required',
  51. 'email' => 'required|email',
  52. 'password' => 'required|min:8|confirmed',
  53. ]);
  54. $status = Password::reset(
  55. $request->only('email', 'password',
  56. 'password_confirmation', 'token'),
  57. function ($user, $password) use ($request) {
  58. $user->forceFill([
  59. 'password' => Hash::make($password)
  60. ])->setRememberToken(Str::random(60));
  61. });
  62. if ($status == Password::PASSWORD_RESET) {
  63. return response()->json([
  64. "status" => "success"
  65. ]);
  66. }
  67. }
  68. public function login(Request $request) {
  69. $credentials = $request->only('email', 'password');
  70. //This should probably be changed to not return a page
  71. if (Auth::attempt($credentials)) {
  72. $request->session()->regenerate();
  73. $this->clearPaying();
  74. } else {
  75. abort(401);
  76. }
  77. }
  78. public function logout(Request $request) {
  79. Auth::logout();
  80. $request->session()->invalidate();
  81. $request->session()->regenerateToken();
  82. return redirect('/');
  83. }
  84. //It should have an orderBy clause to make sure the most recent are first
  85. //This should limit non pending orders to 50. Should also return a json of all services
  86. public function getOrders(Request $request) {
  87. return Auth::user()->orders()->with('service')->withCasts(['updated_at'
  88. => 'datetime:d-m-Y'])->latest()->limit(100)->get();
  89. }
  90. public function changeName(Request $request) {
  91. $validated = $request->validate([
  92. 'name' => 'required|max:30'
  93. ]);
  94. $user = Auth::user();
  95. $user->name = $request->name;
  96. $user->save();
  97. return $user;
  98. }
  99. public function changeEmail(Request $request) {
  100. $validated = $request->validate([
  101. 'email' => 'required|email|unique:users,email',
  102. ]);
  103. $link = URL::temporarySignedRoute('reset-email', now()->addDays(30),
  104. ['user' => Auth::user()->id, 'email' => $request->email]);
  105. Mail::to($request->email)->send(new ChangeEmail(Auth::user()->email,
  106. $link));
  107. }
  108. public function resetEmail(Request $request) {
  109. if (! $request->hasValidSignature()) {
  110. abort(401);
  111. }
  112. $validated = $request->validate([
  113. 'email' => 'required|email|unique:users,email',
  114. ]);
  115. if (! $validated) {
  116. abort(401);
  117. }
  118. $user = User::find($request->user);
  119. $user->email = $request->email;
  120. $user->save();
  121. return view('email-changed');
  122. }
  123. public function changePassword(Request $request) {
  124. $validated = $request->validate([
  125. 'current_password' => 'password',
  126. 'password' => 'required|confirmed|min:8|regex:/.*[a-z].*/|regex:/.*[A-Z].*/|regex:/.*[0-9].*/'
  127. ]);
  128. $user = Auth::user();
  129. $user->password = Hash::make($request->password);
  130. $user->save();
  131. }
  132. public function clearPaying() {
  133. $user = Auth::user();
  134. if ($user->paying) {
  135. $user->paying = false;
  136. $user->save();
  137. }
  138. }
  139. }