ProfileController.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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. /**
  15. * Display a listing of the resource.
  16. *
  17. * @return Factory|View
  18. */
  19. public function index()
  20. {
  21. return view('profile.index')->with([
  22. 'user' => Auth::user(),
  23. 'discord_verify_command' => Configuration::getValueByKey('DISCORD_VERIFY_COMMAND')
  24. ]);
  25. }
  26. /**
  27. * Show the form for creating a new resource.
  28. *
  29. * @return Response
  30. */
  31. public function create()
  32. {
  33. //
  34. }
  35. /**
  36. * Store a newly created resource in storage.
  37. *
  38. * @param Request $request
  39. * @return Response
  40. */
  41. public function store(Request $request)
  42. {
  43. //
  44. }
  45. /**
  46. * Display the specified resource.
  47. *
  48. * @param int $id
  49. * @return Response
  50. */
  51. public function show($id)
  52. {
  53. //
  54. }
  55. /**
  56. * Show the form for editing the specified resource.
  57. *
  58. * @param int $id
  59. * @return Response
  60. */
  61. public function edit($id)
  62. {
  63. //
  64. }
  65. /**
  66. * Update the specified resource in storage.
  67. *
  68. * @param Request $request
  69. * @param int $id
  70. * @return RedirectResponse
  71. */
  72. public function update(Request $request, int $id)
  73. {
  74. //prevent other users from editing a user
  75. if ($id != Auth::user()->id) dd(401);
  76. $user = User::findOrFail($id);
  77. //update password if necessary
  78. if (!is_null($request->input('new_password'))){
  79. //validate password request
  80. $request->validate([
  81. 'current_password' => [
  82. 'required' ,
  83. function ($attribute, $value, $fail) use ($user) {
  84. if (!Hash::check($value, $user->password)) {
  85. $fail('The '.$attribute.' is invalid.');
  86. }
  87. },
  88. ],
  89. 'new_password' => 'required|string|min:8',
  90. 'new_password_confirmation' => 'required|same:new_password'
  91. ]);
  92. //update password
  93. $user->update([
  94. 'password' => Hash::make($request->input('new_password')),
  95. ]);
  96. }
  97. //validate request
  98. $request->validate([
  99. 'name' => 'required|min:4|max:30|alpha_num|unique:users,name,'.$id.',id',
  100. 'email' => 'required|email|max:64|unique:users,email,'.$id.',id',
  101. 'avatar' => 'nullable'
  102. ]);
  103. //update avatar
  104. if(!is_null($request->input('avatar'))){
  105. $avatar = json_decode($request->input('avatar'));
  106. if ($avatar->input->size > 3000000) abort(500);
  107. $user->update([
  108. 'avatar' => $avatar->output->image,
  109. ]);
  110. } else {
  111. $user->update([
  112. 'avatar' => null,
  113. ]);
  114. }
  115. //update name and email
  116. $user->update([
  117. 'name' => $request->input('name'),
  118. 'email' => $request->input('email'),
  119. ]);
  120. return redirect()->route('profile.index')->with('success' , 'profile updated');
  121. }
  122. /**
  123. * Remove the specified resource from storage.
  124. *
  125. * @param int $id
  126. * @return Response
  127. */
  128. public function destroy($id)
  129. {
  130. //
  131. }
  132. }