ProfileController.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Configuration;
  4. use App\Models\User;
  5. use Illuminate\Contracts\View\Factory;
  6. use Illuminate\Contracts\View\View;
  7. use Illuminate\Http\RedirectResponse;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Http\Response;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Support\Facades\Hash;
  12. class ProfileController extends Controller
  13. {
  14. /** Display a listing of the resource. */
  15. public function index()
  16. {
  17. return view('profile.index')->with([
  18. 'user' => Auth::user(),
  19. 'credits_reward_after_verify_discord' => Configuration::getValueByKey('CREDITS_REWARD_AFTER_VERIFY_DISCORD'),
  20. 'discord_verify_command' => Configuration::getValueByKey('DISCORD_VERIFY_COMMAND')
  21. ]);
  22. }
  23. /** Update the specified resource in storage.
  24. * @param Request $request
  25. * @param int $id
  26. * @return RedirectResponse
  27. */
  28. public function update(Request $request, int $id)
  29. {
  30. //prevent other users from editing a user
  31. if ($id != Auth::user()->id) dd(401);
  32. $user = User::findOrFail($id);
  33. //update password if necessary
  34. if (!is_null($request->input('new_password'))){
  35. //validate password request
  36. $request->validate([
  37. 'current_password' => [
  38. 'required' ,
  39. function ($attribute, $value, $fail) use ($user) {
  40. if (!Hash::check($value, $user->password)) {
  41. $fail('The '.$attribute.' is invalid.');
  42. }
  43. },
  44. ],
  45. 'new_password' => 'required|string|min:8',
  46. 'new_password_confirmation' => 'required|same:new_password'
  47. ]);
  48. //update password
  49. $user->update([
  50. 'password' => Hash::make($request->input('new_password')),
  51. ]);
  52. }
  53. //validate request
  54. $request->validate([
  55. 'name' => 'required|min:4|max:30|alpha_num|unique:users,name,'.$id.',id',
  56. 'email' => 'required|email|max:64|unique:users,email,'.$id.',id',
  57. 'avatar' => 'nullable'
  58. ]);
  59. //update avatar
  60. if(!is_null($request->input('avatar'))){
  61. $avatar = json_decode($request->input('avatar'));
  62. if ($avatar->input->size > 3000000) abort(500);
  63. $user->update([
  64. 'avatar' => $avatar->output->image,
  65. ]);
  66. } else {
  67. $user->update([
  68. 'avatar' => null,
  69. ]);
  70. }
  71. //update name and email
  72. $user->update([
  73. 'name' => $request->input('name'),
  74. 'email' => $request->input('email'),
  75. ]);
  76. return redirect()->route('profile.index')->with('success' , 'profile updated');
  77. }
  78. }