123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- <?php
- namespace App\Api\v1\Controllers;
- use App\Api\v1\Requests\SettingUpdateRequest;
- use App\Api\v1\Resources\UserResource;
- use App\Http\Controllers\Controller;
- use Illuminate\Http\Request;
- use Illuminate\Support\Arr;
- use Illuminate\Support\Facades\Log;
- class UserController extends Controller
- {
- /**
- * Get detailed information about the authenticated user
- *
- * @return \App\Api\v1\Resources\UserResource|\Illuminate\Http\JsonResponse
- */
- public function show(Request $request)
- {
- return new UserResource($request->user());
- }
- /**
- * List all preferences
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function allPreferences(Request $request)
- {
- $preferences = $request->user()->preferences;
- $jsonPrefs = collect([]);
- $preferences->each(function (mixed $item, string $key) use ($jsonPrefs) {
- $jsonPrefs->push([
- 'key' => $key,
- 'value' => $item,
- 'locked' => in_array($key, config('2fauth.lockedPreferences')),
- ]);
- });
- return response()->json($jsonPrefs->all(), 200);
- }
- /**
- * Display a preference
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function showPreference(Request $request, string $preferenceName)
- {
- if (! Arr::exists($request->user()->preferences, $preferenceName)) {
- abort(404);
- }
- return response()->json([
- 'key' => $preferenceName,
- 'value' => $request->user()->preferences[$preferenceName],
- 'locked' => in_array($preferenceName, config('2fauth.lockedPreferences')),
- ], 200);
- }
- /**
- * Save a preference
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function setPreference(SettingUpdateRequest $request, string $preferenceName)
- {
- if (! Arr::exists($request->user()->preferences, $preferenceName)) {
- abort(404);
- }
- if (in_array($preferenceName, config('2fauth.lockedPreferences'))) {
- abort(403);
- }
- $validated = $request->validated();
- $request->user()['preferences->' . $preferenceName] = $validated['value'];
- $request->user()->save();
- Log::info(sprintf('User ID #%s changed its preference %s to %s', $request->user()->id, var_export($preferenceName, true), var_export($validated['value'], true)));
- return response()->json([
- 'key' => $preferenceName,
- 'value' => $request->user()->preferences[$preferenceName],
- ], 201);
- }
- }
|