UserController.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace App\Api\v1\Controllers;
  3. use App\Api\v1\Requests\SettingUpdateRequest;
  4. use App\Api\v1\Resources\UserResource;
  5. use App\Http\Controllers\Controller;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Arr;
  8. use Illuminate\Support\Facades\Log;
  9. class UserController extends Controller
  10. {
  11. /**
  12. * Get detailed information about the authenticated user
  13. *
  14. * @return \App\Api\v1\Resources\UserResource|\Illuminate\Http\JsonResponse
  15. */
  16. public function show(Request $request)
  17. {
  18. return new UserResource($request->user());
  19. }
  20. /**
  21. * List all preferences
  22. *
  23. * @return \Illuminate\Http\JsonResponse
  24. */
  25. public function allPreferences(Request $request)
  26. {
  27. $preferences = $request->user()->preferences;
  28. $jsonPrefs = collect([]);
  29. $preferences->each(function (mixed $item, string $key) use ($jsonPrefs) {
  30. $jsonPrefs->push([
  31. 'key' => $key,
  32. 'value' => $item,
  33. 'locked' => in_array($key, config('2fauth.lockedPreferences')),
  34. ]);
  35. });
  36. return response()->json($jsonPrefs->all(), 200);
  37. }
  38. /**
  39. * Display a preference
  40. *
  41. * @return \Illuminate\Http\JsonResponse
  42. */
  43. public function showPreference(Request $request, string $preferenceName)
  44. {
  45. if (! Arr::exists($request->user()->preferences, $preferenceName)) {
  46. abort(404);
  47. }
  48. return response()->json([
  49. 'key' => $preferenceName,
  50. 'value' => $request->user()->preferences[$preferenceName],
  51. 'locked' => in_array($preferenceName, config('2fauth.lockedPreferences')),
  52. ], 200);
  53. }
  54. /**
  55. * Save a preference
  56. *
  57. * @return \Illuminate\Http\JsonResponse
  58. */
  59. public function setPreference(SettingUpdateRequest $request, string $preferenceName)
  60. {
  61. if (! Arr::exists($request->user()->preferences, $preferenceName)) {
  62. abort(404);
  63. }
  64. if (in_array($preferenceName, config('2fauth.lockedPreferences'))) {
  65. abort(403);
  66. }
  67. $validated = $request->validated();
  68. $request->user()['preferences->' . $preferenceName] = $validated['value'];
  69. $request->user()->save();
  70. Log::info(sprintf('User ID #%s changed its preference %s to %s', $request->user()->id, var_export($preferenceName, true), var_export($validated['value'], true)));
  71. return response()->json([
  72. 'key' => $preferenceName,
  73. 'value' => $request->user()->preferences[$preferenceName],
  74. ], 201);
  75. }
  76. }