🆙 Added fixed cms

This commit is contained in:
Remco
2026-01-07 19:32:43 +01:00
parent fdb0dc276d
commit 711fa2c29e
3992 changed files with 183381 additions and 0 deletions
@@ -0,0 +1,69 @@
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Http\Requests\AccountSettingsFormRequest;
use App\Services\RconService;
use App\Services\User\SessionService;
use App\Services\User\UserService;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\View;
class AccountSettingsController extends Controller
{
public function __construct(private readonly SessionService $sessionService, private readonly UserService $userService, private readonly RconService $rconService) {}
public function edit(): View
{
return view('user.settings.account', [
'user' => Auth::user()->load('settings:allow_name_change'),
]);
}
public function sessionLogs(Request $request): View
{
$sessions = $this->sessionService->fetchSessionLogs($request);
return view('user.settings.session-logs', [
'logs' => $sessions,
]);
}
public function update(AccountSettingsFormRequest $request): RedirectResponse
{
$user = Auth::user();
if ($user === null) {
return back()->withErrors('User not found');
}
// $allowedNameChange = $user->settings?->allow_name_change && $user->username !== $request->input('username');
if (! $this->rconService->isConnected() && Auth::user()->online === '1') {
return back()->withErrors('You must be offline to change your account settings');
}
/** if ($allowedNameChange) {
$this->rconService->disconnectUser($user);
$this->userService->updateField($user, 'username', $request->input('username'));
} **/
if ($user->mail !== $request->input('mail')) {
$this->userService->updateField($user, 'mail', $request->input('mail'));
}
if ($user->motto !== $request->input('motto')) {
$this->rconService->setMotto($user, $request->input('motto'));
$this->userService->updateField($user, 'motto', $request->input('motto'));
}
return to_route('settings.account.show')->with('success', __('Your account settings has been updated'));
}
public function twoFactor(): View
{
return view('user.settings.two-factor');
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Models\User\Ban;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\View;
class BannedController extends Controller
{
public function __invoke(): View
{
$ipBan = Ban::where('ip', '=', request()->ip())
->where('ban_expire', '>', time())
->orderByDesc('id')
->first();
return view('banned', [
'ban' => $ipBan ?? Auth::user()->ban,
]);
}
}
@@ -0,0 +1,78 @@
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Models\PasswordResetToken;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Mail;
class ForgotPasswordController extends Controller
{
public function __invoke()
{
return view('auth.passwords.forget');
}
public function submitForgetPassword(Request $request)
{
$request->validate([
'mail' => ['required', 'email'],
]);
// Do not tell the user that this email does not exist to prevent possible attacks
if (User::where('mail', $request->mail)->exists()) {
$token = Str::uuid();
PasswordResetToken::create([
'email' => $request->mail,
'token' => $token,
]);
Mail::send('email.forgetPassword', ['token' => $token], function ($message) use ($request): void {
$message->to($request->mail);
$message->subject('Reset Password');
});
}
return back()->with('success', __('We have e-mailed your password reset link!'));
}
public function showResetPassword(Request $request, string $token)
{
$prt = PasswordResetToken::select('token', 'created_at')->where('token', $token)->first();
if ($prt === null) {
return to_route('forgot.password.get')->withErrors('message', __('This token has expired!'));
}
$tokenExpiration = \Illuminate\Support\Facades\Date::now()->subMinutes(config('habbo.password_reset_token_time'));
if ($prt->created_at->gte($tokenExpiration)) { // gte = greater than or equals
$prt->delete();
return to_route('forgot.password.get')->withErrors('message', __('This token has expired!'));
}
return view('auth.passwords.reset', [
'token' => $token,
]);
}
public function submitResetPassword(Request $request, string $token)
{
$request->validate([
'password' => ['required', 'min:8', 'confirmed'],
'password_confirmation' => ['required'],
]);
$prt = PasswordResetToken::select('email', 'token')->where('token', $token)->first();
if ($prt === null) {
return to_route('forgot.password.get')->withErrors('message', __('This token has expired!'));
}
$prt->user->changePassword($request->password);
$prt->delete();
return to_route('login')->with('success', __('Your password has been successfully reset!'));
}
}
@@ -0,0 +1,54 @@
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Http\Requests\GuestbookFormRequest;
use App\Models\User;
use App\Models\User\WebsiteUserGuestbook;
use Illuminate\Support\Facades\Auth;
class GuestbookController extends Controller
{
public function store(User $user, GuestbookFormRequest $request)
{
$this->validateGuestbookPost($user, $request);
$user->profileGuestbook()->create([
'user_id' => Auth::id(),
'message' => $request->input('message'),
]);
return back()->with('success', __('Your message has been posted.'));
}
public function destroy(User $user, WebsiteUserGuestbook $guestbook)
{
if ($guestbook->user_id !== Auth::id() && $guestbook->profile_id !== $user->id && Auth::user()->rank < (int) setting('min_staff_rank')) {
return back()->withErrors([
'message' => __('Do do not have permission to delete this message'),
]);
}
$guestbook->delete();
return back()->with('success', __('Your message has been deleted.'));
}
private function validateGuestbookPost(User $user, GuestbookFormRequest $request)
{
if ($user->id === $request->user()->id) {
return $this->redirectWithError(__('You cannot post a message on your own profile.'));
}
$maxAllowedPostCount = in_array(setting('max_guestbook_posts_per_profile'), ['', '0'], true) ? 3 : (int) setting('max_guestbook_posts_per_profile');
if ($user->profileGuestbook()->where('user_id', $request->user()->id)->count() >= $maxAllowedPostCount) {
return $this->redirectWithError(__('You have already posted :count messages on this profile.', ['count' => $maxAllowedPostCount]));
}
}
private function redirectWithError($message)
{
return back()->withErrors(['message' => $message]);
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Models\Articles\WebsiteArticle;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\View;
class MeController extends Controller
{
public function __invoke(): View
{
return view('user.me', [
'onlineFriends' => Auth::user()?->getOnlineFriends(),
'user' => Auth::user()?->load('permission:id,rank_name'),
'articles' => WebsiteArticle::whereHas('user')->with('user:id,username,look')->latest()->take(5)->get(),
]);
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Http\Requests\PasswordSettingsFormRequest;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\View\View;
class PasswordSettingsController extends Controller
{
public function edit(): View
{
return view('user.settings.password');
}
public function update(PasswordSettingsFormRequest $request): RedirectResponse
{
Auth::user()->update([
'password' => Hash::make($request->input('password')),
]);
return to_route('settings.password.show')->with('success', __('Your password has been changed!'));
}
}
@@ -0,0 +1,65 @@
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Models\Game\Guild\GuildMember;
use App\Models\Game\Player\MessengerFriendship;
use App\Models\User;
class ProfileController extends Controller
{
public function __invoke(User $user)
{
$user = $this->loadUserRelations($user);
$friends = $this->getUserFriends($user->id);
$groups = $this->getUserGroups($user->id);
return view('user.profile', [
'user' => $user,
'friends' => $friends,
'groups' => $groups,
'guestbook' => $user->profileGuestbook()->with('user')->latest()->limit(5)->get(),
'photos' => $user->photos()->limit(3)->get(),
]);
}
private function loadUserRelations(User $user): User
{
return $user->load([
'badges' => function ($badges): void {
$badges->where('slot_id', '>', '0')
->orderBy('slot_id')
->take(5);
},
'rooms' => function ($rooms): void {
$rooms->select('id', 'owner_id', 'name', 'users')
->orderByDesc('users')
->orderBy('id');
},
]);
}
private function getUserFriends(int $userId)
{
return MessengerFriendship::select('user_two_id')
->where('user_one_id', '=', $userId)
->whereHas('user')
->with('user:id,username,look')
->inRandomOrder()
->take(12)
->get();
}
private function getUserGroups(int $userId)
{
return GuildMember::query()
->select(['guilds_members.id', 'guilds_members.guild_id', 'guilds_members.user_id', 'guilds.name', 'guilds.badge'])
->where('guilds_members.user_id', '=', $userId)
->join('guilds', 'guilds_members.guild_id', '=', 'guilds.id')
->inRandomOrder()
->take(6)
->get();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Services\RconService;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
class ReferralController extends Controller
{
public function __invoke(RconService $rcon): RedirectResponse
{
$user = Auth::user();
if (! $user->referrals || $user->referrals->referrals_total < setting('referrals_needed')) {
return back()->withErrors([
'message' => __('You do not have enough referrals to claim your reward'),
]);
}
// Decrease the total amount of referrals with the amount needed to claim reward
$user->referrals->decrement('referrals_total', setting('referrals_needed'));
$rcon->giveDiamonds($user, setting('referral_reward_amount'));
// Log the claim
$user->claimedReferralLog()->create([
'ip_address' => request()->ip(),
]);
return back()->with('success', __('Woah! You have successfully claimed your reward - Keep up the good work!'));
}
}
@@ -0,0 +1,42 @@
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
use Laravel\Fortify\Actions\DisableTwoFactorAuthentication;
use Laravel\Fortify\Actions\EnableTwoFactorAuthentication;
class TwoFactorAuthenticationController extends Controller
{
public function index(): View
{
return view('user.settings.two-factor');
}
public function store(Request $request, EnableTwoFactorAuthentication $enable): RedirectResponse
{
$enable($request->user());
return to_route('settings.two-factor')->with('success', __('Two-factor authentication has been enabled. Please scan the QR code to continue.'));
}
public function verify(Request $request): RedirectResponse
{
$confirmed = $request->user()->confirmTwoFactorAuthentication($request->input('code'));
if (! $confirmed) {
return back()->withErrors('Invalid Two Factor Authentication code');
}
return to_route('settings.two-factor')->with('success', __('Two-factor authentication has been confirmed.'));
}
public function destroy(Request $request, DisableTwoFactorAuthentication $disable): RedirectResponse
{
$disable($request->user());
return to_route('settings.two-factor')->with('success', __('Two-factor authentication has been disabled.'));
}
}
@@ -0,0 +1,18 @@
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Models\User;
class UserReferralController extends Controller
{
public function __invoke(string $referralCode)
{
User::where('referral_code', '=', $referralCode)->firstOrFail();
return view('auth.register', [
'referral_code' => $referralCode,
]);
}
}