ProfileController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Classes\Pterodactyl;
  4. use App\Models\Configuration;
  5. use App\Models\User;
  6. use Illuminate\Contracts\View\Factory;
  7. use Illuminate\Contracts\View\View;
  8. use Illuminate\Http\RedirectResponse;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Http\Response;
  11. use Illuminate\Support\Facades\Auth;
  12. use Illuminate\Support\Facades\Hash;
  13. use Illuminate\Validation\ValidationException;
  14. class ProfileController extends Controller
  15. {
  16. /** Display a listing of the resource. */
  17. public function index()
  18. {
  19. return view('profile.index')->with([
  20. 'user' => Auth::user(),
  21. 'credits_reward_after_verify_discord' => Configuration::getValueByKey('CREDITS_REWARD_AFTER_VERIFY_DISCORD'),
  22. 'force_email_verification' => Configuration::getValueByKey('FORCE_EMAIL_VERIFICATION'),
  23. 'force_discord_verification' => Configuration::getValueByKey('FORCE_DISCORD_VERIFICATION'),
  24. ]);
  25. }
  26. /** Update the specified resource in storage.
  27. * @param Request $request
  28. * @param int $id
  29. * @return RedirectResponse
  30. */
  31. public function update(Request $request, int $id)
  32. {
  33. //prevent other users from editing a user
  34. if ($id != Auth::user()->id) dd(401);
  35. $user = User::findOrFail($id);
  36. //update password if necessary
  37. if (!is_null($request->input('new_password'))){
  38. //validate password request
  39. $request->validate([
  40. 'current_password' => [
  41. 'required' ,
  42. function ($attribute, $value, $fail) use ($user) {
  43. if (!Hash::check($value, $user->password)) {
  44. $fail('The '.$attribute.' is invalid.');
  45. }
  46. },
  47. ],
  48. 'new_password' => 'required|string|min:8',
  49. 'new_password_confirmation' => 'required|same:new_password'
  50. ]);
  51. //Update Users Password on Pterodactyl
  52. //Username,Mail,First and Lastname are required aswell
  53. $response = Pterodactyl::client()->patch('/application/users/'.$user->pterodactyl_id, [
  54. "password" => $request->input('new_password'),
  55. "username" => $request->input('name'),
  56. "first_name" => $request->input('name'),
  57. "last_name" => $request->input('name'),
  58. "email" => $request->input('email'),
  59. ]);
  60. if ($response->failed()) {
  61. throw ValidationException::withMessages([
  62. 'pterodactyl_error_message' => $response->toException()->getMessage(),
  63. 'pterodactyl_error_status' => $response->toException()->getCode()
  64. ]);
  65. }
  66. //update password
  67. $user->update([
  68. 'password' => Hash::make($request->input('new_password')),
  69. ]);
  70. }
  71. //validate request
  72. $request->validate([
  73. 'name' => 'required|min:4|max:30|alpha_num|unique:users,name,'.$id.',id',
  74. 'email' => 'required|email|max:64|unique:users,email,'.$id.',id',
  75. 'avatar' => 'nullable'
  76. ]);
  77. //update avatar
  78. if(!is_null($request->input('avatar'))){
  79. $avatar = json_decode($request->input('avatar'));
  80. if ($avatar->input->size > 3000000) abort(500);
  81. $user->update([
  82. 'avatar' => $avatar->output->image,
  83. ]);
  84. } else {
  85. $user->update([
  86. 'avatar' => null,
  87. ]);
  88. }
  89. //update name and email on Pterodactyl
  90. $response = Pterodactyl::client()->patch('/application/users/'.$user->pterodactyl_id, [
  91. "username" => $request->input('name'),
  92. "first_name" => $request->input('name'),
  93. "last_name" => $request->input('name'),
  94. "email" => $request->input('email'),
  95. ]);
  96. if ($response->failed()) {
  97. throw ValidationException::withMessages([
  98. 'pterodactyl_error_message' => $response->toException()->getMessage(),
  99. 'pterodactyl_error_status' => $response->toException()->getCode()
  100. ]);
  101. }
  102. //update name and email
  103. $user->update([
  104. 'name' => $request->input('name'),
  105. 'email' => $request->input('email'),
  106. ]);
  107. $user->sendEmailVerificationNotification();
  108. return redirect()->route('profile.index')->with('success' , __('Profile updated'));
  109. }
  110. }