validate([ 'username' => ['required', 'string'], 'password' => ['required'], ]); $username = $request->input('username'); $user = User::where('username', $username) ->orWhere('mail', $username) ->first(); $credentialsValid = $user && Hash::check($request->input('password'), $user->password); if (! $credentialsValid) { Hash::make($request->input('password')); throw ValidationException::withMessages([ 'email' => ['The provided credentials are incorrect.'], ]); } if ($user->is_banned) { throw ValidationException::withMessages([ 'email' => ['Your account has been banned.'], ]); } $user->update(['last_login' => time()]); $token = $user->createToken('auth-token')->plainTextToken; return response()->json([ 'user' => [ 'id' => (string) $user->id, 'email' => $user->mail, 'username' => $user->username, 'look' => $user->look, ], 'token' => $token, ]); } public function register(Request $request): JsonResponse { $createNewUser = new CreateNewUser; try { $validated = $request->validate([ 'username' => ['required', 'string', 'max:50'], 'password' => ['required', 'string', 'min:6'], 'mail' => ['required', 'email', 'max:255'], 'look' => ['nullable', 'string'], 'motto' => ['nullable', 'string', 'max:100'], ]); $user = $createNewUser->create($validated); $token = $user->createToken('auth-token')->plainTextToken; return response()->json([ 'user' => [ 'id' => (string) $user->id, 'email' => $user->mail, 'username' => $user->username, 'look' => $user->look, ], 'token' => $token, ], 201); } catch (ValidationException $e) { return response()->json([ 'errors' => $e->errors(), ], 422); } } public function user(Request $request): JsonResponse { $user = $request->user(); return response()->json([ 'id' => (string) $user->id, 'email' => $user->mail, 'username' => $user->username, 'look' => $user->look, 'motto' => $user->motto ?? '', 'credits' => $user->credits ?? 0, 'pixels' => $user->pixels ?? 0, 'diamonds' => $user->diamonds ?? 0, ]); } public function logout(Request $request): JsonResponse { $request->user()->currentAccessToken()->delete(); return response()->json(['message' => 'Logged out successfully']); } public function home(): JsonResponse { $articles = WebsiteArticle::with(['user:id,username,look']) ->latest('id') ->take(4) ->get() ->map(fn ($article) => [ 'id' => $article->id, 'title' => $article->title, 'slug' => $article->slug, 'image' => $article->image, 'excerpt' => $article->excerpt, 'user' => $article->user, 'created_at' => $article->created_at, ]); $photos = CameraWeb::query() ->latest('id') ->take(4) ->where('visible', true) ->with('user:id,username,look') ->get() ->map(fn ($photo) => [ 'id' => $photo->id, 'image' => $photo->image, 'user' => $photo->user, ]); return response()->json([ 'articles' => $articles, 'photos' => $photos, ]); } public function updateUser(Request $request): JsonResponse { $user = $request->user(); $validated = $request->validate([ 'motto' => ['nullable', 'string', 'max:100'], 'look' => ['nullable', 'string'], ]); $user->update($validated); return response()->json([ 'id' => (string) $user->id, 'email' => $user->mail, 'username' => $user->username, 'look' => $user->look, 'motto' => $user->motto, 'credits' => $user->credits, 'pixels' => $user->pixels, 'diamonds' => $user->diamonds, ]); } public function articleComment(Request $request, string $slug): JsonResponse { $article = WebsiteArticle::where('slug', $slug)->firstOrFail(); $validated = $request->validate([ 'comment' => ['required', 'string', 'max:1000'], ]); $comment = $article->comments()->create([ 'user_id' => $request->user()->id, 'comment' => strip_tags((string) $validated['comment']), ]); return response()->json([ 'data' => $comment->load('user:id,username,look'), ], 201); } }