You've already forked Atomcms-edit
Initial commit
This commit is contained in:
+54
@@ -0,0 +1,54 @@
|
||||
<?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 redirect()->back()->withErrors('User not found');
|
||||
}
|
||||
|
||||
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 redirect()->route('settings.account.show')->with('success', __('Your account settings has been updated'));
|
||||
}
|
||||
}
|
||||
+23
@@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
+78
@@ -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\Facades\Mail;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
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) {
|
||||
$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 = Carbon::now()->subMinutes(config('habbo.password_reset_token_time'));
|
||||
if ($prt->created_at->lt($tokenExpiration)) {
|
||||
$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!'));
|
||||
}
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
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 redirect()->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 redirect()->back()->withErrors([
|
||||
'message' => __('Do do not have permission to delete this message'),
|
||||
]);
|
||||
}
|
||||
|
||||
$guestbook->delete();
|
||||
|
||||
return redirect()->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 = empty(setting('max_guestbook_posts_per_profile')) ? 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 redirect()->back()->withErrors(['message' => $message]);
|
||||
}
|
||||
}
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\User;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Articles\WebsiteArticle;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class MeController extends Controller
|
||||
{
|
||||
public function __invoke(): View
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
return view('user.me', [
|
||||
'onlineFriends' => $user->getOnlineFriends(),
|
||||
'user' => $user->load('permission:id,rank_name'),
|
||||
'articles' => WebsiteArticle::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 redirect()->route('settings.password.show')->with('success', __('Your password has been changed!'));
|
||||
}
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\User;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class PreferencesController extends Controller
|
||||
{
|
||||
public function edit(): View
|
||||
{
|
||||
$user = Auth::user();
|
||||
$preferences = $user->preferences ?? $this->getDefaultPreferences();
|
||||
|
||||
return view('user.settings.preferences', [
|
||||
'preferences' => $preferences,
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(Request $request): RedirectResponse
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
$validated = $request->validate([
|
||||
'radio_auto_play' => 'sometimes|boolean',
|
||||
'radio_shouts' => 'sometimes|boolean',
|
||||
'radio_notifications' => 'sometimes|boolean',
|
||||
'friend_requests' => 'sometimes|boolean',
|
||||
'room_invites' => 'sometimes|boolean',
|
||||
'email_notifications' => 'sometimes|boolean',
|
||||
]);
|
||||
|
||||
$preferences = array_merge($this->getDefaultPreferences(), $validated);
|
||||
$user->preferences = $preferences;
|
||||
$user->save();
|
||||
|
||||
return redirect()->route('settings.preferences.show')->with('success', __('Preferences updated successfully'));
|
||||
}
|
||||
|
||||
private function getDefaultPreferences(): array
|
||||
{
|
||||
return [
|
||||
'radio_auto_play' => false,
|
||||
'radio_shouts' => true,
|
||||
'radio_notifications' => true,
|
||||
'friend_requests' => true,
|
||||
'room_invites' => true,
|
||||
'email_notifications' => false,
|
||||
];
|
||||
}
|
||||
}
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\User;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Miscellaneous\WebsiteSetting;
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ProfileController extends Controller
|
||||
{
|
||||
public function __invoke(User $user)
|
||||
{
|
||||
$user->load([
|
||||
'friends.friend:id,username,look',
|
||||
'guilds.guild:id,name,badge',
|
||||
'profileGuestbook.user:id,username,look',
|
||||
'photos',
|
||||
'badges',
|
||||
]);
|
||||
|
||||
$showStats = WebsiteSetting::where('key', 'profile_show_stats')->first()?->value ?? '1';
|
||||
$showOnline = WebsiteSetting::where('key', 'profile_show_online_status')->first()?->value ?? '1';
|
||||
|
||||
$accountAge = $this->getAccountAge($user->account_created);
|
||||
$lastLogin = $this->getLastLogin($user->last_login);
|
||||
$totalFriends = $user->friends()->count();
|
||||
$totalGuilds = $user->guilds()->count();
|
||||
|
||||
return view('user.profile', [
|
||||
'user' => $user,
|
||||
'friends' => $user->friends->take(10),
|
||||
'groups' => $user->guilds->take(5),
|
||||
'guestbook' => $user->profileGuestbook->take(5),
|
||||
'photos' => $user->photos->take(3),
|
||||
'badges' => $user->badges->take(3),
|
||||
'showStats' => $showStats,
|
||||
'showOnline' => $showOnline,
|
||||
'accountAge' => $accountAge,
|
||||
'lastLogin' => $lastLogin,
|
||||
'totalFriends' => $totalFriends,
|
||||
'totalGuilds' => $totalGuilds,
|
||||
]);
|
||||
}
|
||||
|
||||
private function getAccountAge(int $timestamp): string
|
||||
{
|
||||
$created = Carbon::createFromTimestamp($timestamp);
|
||||
$now = Carbon::now();
|
||||
$days = $created->diffInDays($now);
|
||||
|
||||
if ($days < 7) {
|
||||
return $days . ' day' . ($days !== 1 ? 's' : '');
|
||||
} elseif ($days < 30) {
|
||||
$weeks = floor($days / 7);
|
||||
|
||||
return $weeks . ' week' . ($weeks !== 1 ? 's' : '');
|
||||
} elseif ($days < 365) {
|
||||
$months = floor($days / 30);
|
||||
|
||||
return $months . ' month' . ($months !== 1 ? 's' : '');
|
||||
} else {
|
||||
$years = floor($days / 365);
|
||||
|
||||
return $years . ' year' . ($years !== 1 ? 's' : '');
|
||||
}
|
||||
}
|
||||
|
||||
private function getLastLogin(int $timestamp): string
|
||||
{
|
||||
$lastLogin = Carbon::createFromTimestamp($timestamp);
|
||||
$now = Carbon::now();
|
||||
$diff = $now->diffInMinutes($lastLogin);
|
||||
|
||||
if ($diff < 1) {
|
||||
return 'Just now';
|
||||
} elseif ($diff < 60) {
|
||||
return $diff . ' minute' . ($diff !== 1 ? 's' : '') . ' ago';
|
||||
} elseif ($diff < 1440) {
|
||||
$hours = floor($diff / 60);
|
||||
|
||||
return $hours . ' hour' . ($hours !== 1 ? 's' : '') . ' ago';
|
||||
} elseif ($diff < 10080) {
|
||||
$days = floor($diff / 1440);
|
||||
|
||||
return $days . ' day' . ($days !== 1 ? 's' : '') . ' ago';
|
||||
} else {
|
||||
return $lastLogin->format('d M Y');
|
||||
}
|
||||
}
|
||||
}
|
||||
+33
@@ -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 redirect()->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 redirect()->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 redirect()->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 redirect()->route('settings.two-factor')->with('success', __('Two-factor authentication has been confirmed.'));
|
||||
}
|
||||
|
||||
public function destroy(Request $request, DisableTwoFactorAuthentication $disable): RedirectResponse
|
||||
{
|
||||
$disable($request->user());
|
||||
|
||||
return redirect()->route('settings.two-factor')->with('success', __('Two-factor authentication has been disabled.'));
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\User;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
|
||||
class UserReferralController extends Controller
|
||||
{
|
||||
public function __invoke(string $referralCode)
|
||||
{
|
||||
if (! User::where('referral_code', $referralCode)->exists()) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
return view('auth.register', [
|
||||
'referral_code' => $referralCode,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user