Fix remaining issues: CDN config, min_staff_rank defaults, blade views

- Centralize all CDN URLs in config('habbo.cdn.*') with env overrides
- Replace hardcoded CDN URLs in 12+ blade views (fancybox, sweetalert2,
  alpinejs, fontsource, fontawesome, html2canvas)
- Fix font-awesome 7.0.0 (non-existent) -> config with 6.7.0 default
- Centralize all hardcoded min_staff_rank defaults (3 and 7) to config
- Add MIN_STAFF_RANK and MIN_STAFF_RANK_LOGIN env variables
This commit is contained in:
root
2026-06-08 19:11:28 +02:00
parent b6fb43cba1
commit 0b6f14d5bf
20 changed files with 38 additions and 27 deletions
+1 -1
View File
@@ -113,7 +113,7 @@ class CreateNewUser implements CreatesNewUsers
if (! empty($discordRanks)) { if (! empty($discordRanks)) {
$shouldNotify = in_array($user->rank, $discordRanks); $shouldNotify = in_array($user->rank, $discordRanks);
} else { } else {
$minStaffRank = (int) setting('min_staff_rank', 3); $minStaffRank = (int) setting('min_staff_rank', config('habbo.defaults.min_staff_rank_login'));
$shouldNotify = $user->rank >= $minStaffRank; $shouldNotify = $user->rank >= $minStaffRank;
} }
@@ -17,7 +17,7 @@ class FurniEditorController extends Controller
{ {
private function checkAdmin(): void private function checkAdmin(): void
{ {
if (! Auth::check() || Auth::user()->rank < (int) setting('min_staff_rank', 7)) { if (! Auth::check() || Auth::user()->rank < (int) setting('min_staff_rank', config('habbo.defaults.min_staff_rank'))) {
abort(403, 'Forbidden'); abort(403, 'Forbidden');
} }
} }
@@ -20,7 +20,7 @@ class AdminSecurityMiddleware
} }
// Check 2: Must have admin rank // Check 2: Must have admin rank
$minRank = (int) setting('min_staff_rank', 7); $minRank = (int) setting('min_staff_rank', config('habbo.defaults.min_staff_rank'));
if ($user->rank < $minRank) { if ($user->rank < $minRank) {
Log::warning('[Security] Unauthorized API access attempt', [ Log::warning('[Security] Unauthorized API access attempt', [
'user_id' => $user->id, 'user_id' => $user->id,
@@ -21,7 +21,7 @@ class ForceStaffTwoFactorMiddleware
'two-factor.verify', 'two-factor.verify',
]; ];
if (($user->rank >= setting('min_staff_rank') && ! $user->two_factor_confirmed) && ! in_array(request()->route()?->getName(), $allowedRoutes)) { if (($user->rank >= setting('min_staff_rank', config('habbo.defaults.min_staff_rank')) && ! $user->two_factor_confirmed) && ! in_array(request()->route()?->getName(), $allowedRoutes)) {
return to_route('settings.two-factor'); return to_route('settings.two-factor');
} }
+1 -1
View File
@@ -16,7 +16,7 @@ class LogStaffActivity
public function terminate(Request $request, Response $response): void public function terminate(Request $request, Response $response): void
{ {
if (auth()->check() && auth()->user()->rank >= (int) setting('min_staff_rank', 3)) { if (auth()->check() && auth()->user()->rank >= (int) setting('min_staff_rank', config('habbo.defaults.min_staff_rank_login'))) {
$this->logRequest($request); $this->logRequest($request);
} }
} }
+1 -1
View File
@@ -10,7 +10,7 @@ class LogStaffLogin
public function handle(Login $event): void public function handle(Login $event): void
{ {
$user = $event->user; $user = $event->user;
$minStaffRank = (int) setting('min_staff_rank', 3); $minStaffRank = (int) setting('min_staff_rank', config('habbo.defaults.min_staff_rank_login'));
if ($user && $user->rank >= $minStaffRank) { if ($user && $user->rank >= $minStaffRank) {
StaffActivity::logLogin($user->id); StaffActivity::logLogin($user->id);
+2 -2
View File
@@ -18,7 +18,7 @@ readonly class StaffService
return Cache::get('staff_positions'); return Cache::get('staff_positions');
} }
$minStaffRank = (int) setting('min_staff_rank', 3); $minStaffRank = (int) setting('min_staff_rank', config('habbo.defaults.min_staff_rank_login'));
$minRankToSeeHidden = (int) setting('min_rank_to_see_hidden_staff', 7); $minRankToSeeHidden = (int) setting('min_rank_to_see_hidden_staff', 7);
$userRank = Auth::check() ? Auth::user()->rank : 0; $userRank = Auth::check() ? Auth::user()->rank : 0;
@@ -49,7 +49,7 @@ readonly class StaffService
return Cache::get('staff_ids'); return Cache::get('staff_ids');
} }
$minRank = (int) setting('min_staff_rank', 3); $minRank = (int) setting('min_staff_rank', config('habbo.defaults.min_staff_rank_login'));
$staffIds = User::query()->select('id') $staffIds = User::query()->select('id')
->where('rank', '>=', $minRank) ->where('rank', '>=', $minRank)
+12
View File
@@ -56,6 +56,18 @@ return [
'defaults' => [ 'defaults' => [
'avatar_look' => env('DEFAULT_AVATAR_LOOK', 'hr-100-61.hd-180-1.ch-210-66'), 'avatar_look' => env('DEFAULT_AVATAR_LOOK', 'hr-100-61.hd-180-1.ch-210-66'),
'min_staff_rank' => env('MIN_STAFF_RANK', 7),
'min_staff_rank_login' => env('MIN_STAFF_RANK_LOGIN', 3),
],
'cdn' => [
'fancybox_js' => env('FANCYBOX_JS_URL', 'https://cdn.jsdelivr.net/npm/@fancyapps/ui@4.0/dist/fancybox.umd.js'),
'fancybox_css' => env('FANCYBOX_CSS_URL', 'https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.css'),
'sweetalert2_js' => env('SWEETALERT2_JS_URL', '//cdn.jsdelivr.net/npm/sweetalert2@11'),
'alpine_js' => env('ALPINE_JS_URL', 'https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js'),
'fontsource_inter_css' => env('FONTSOURCE_INTER_CSS_URL', 'https://cdn.jsdelivr.net/npm/@fontsource/inter@4.x/400-700.css'),
'fontawesome_css' => env('FONTAWESOME_CSS_URL', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.0/css/all.min.css'),
'html2canvas_js' => env('HTML2CANVAS_JS_URL', 'https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.3.3/html2canvas.min.js'),
], ],
'findretros' => [ 'findretros' => [
@@ -35,8 +35,7 @@
</div> </div>
@push('javascript') @push('javascript')
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@4.0/dist/fancybox.umd.js"></script> <script src="{{ config('habbo.cdn.fancybox_js') }}"></script>
@endpush
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.css" /> <link rel="stylesheet" href="{{ config('habbo.cdn.fancybox_css') }}" />
</x-app-layout> </x-app-layout>
@@ -1,4 +1,4 @@
<script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script> <script src="{{ config('habbo.cdn.sweetalert2_js') }}"></script>
<script> <script>
var Toast = Swal.mixin({ var Toast = Swal.mixin({
@@ -344,7 +344,7 @@
</div> </div>
</x-content.content-card> </x-content.content-card>
</div> </div>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.0/css/all.min.css" integrity="sha512-DxV+EoADOkOygM4IR9yXP8Sb2qwgidEmeqAEmDKIOfPRQZOWbXCzLC6vjbZyy0vPisbH2SyW27+ddLVCN+OMzQ==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link rel="stylesheet" href="{{ config('habbo.cdn.fontawesome_css') }}" crossorigin="anonymous" referrerpolicy="no-referrer" />
<script src="{{ asset('js/gif/gif.js') }}"></script> <script src="{{ asset('js/gif/gif.js') }}"></script>
<style> <style>
+2 -2
View File
@@ -39,8 +39,8 @@
</div> </div>
@push('javascript') @push('javascript')
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@4.0/dist/fancybox.umd.js"></script> <script src="{{ config('habbo.cdn.fancybox_js') }}"></script>
@endpush @endpush
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.css" /> <link rel="stylesheet" href="{{ config('habbo.cdn.fancybox_css') }}" />
</x-app-layout> </x-app-layout>
@@ -73,8 +73,8 @@
</div> </div>
{{-- TODO: Selfhost --}} {{-- TODO: Selfhost --}}
<script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script> <script src="{{ config('habbo.cdn.sweetalert2_js') }}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.3.3/html2canvas.min.js"></script> <script src="{{ config('habbo.cdn.html2canvas_js') }}"></script>
<script> <script>
function logoGenerator() { function logoGenerator() {
return { return {
@@ -183,6 +183,6 @@
usernameInput.addEventListener('keyup', updateAvatar); usernameInput.addEventListener('keyup', updateAvatar);
</script> </script>
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@4.0/dist/fancybox.umd.js"></script> <script src="{{ config('habbo.cdn.fancybox_js') }}"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.css" /> <link rel="stylesheet" href="{{ config('habbo.cdn.fancybox_css') }}" />
</x-app-layout> </x-app-layout>
@@ -1,4 +1,4 @@
<script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script> <script src="{{ config('habbo.cdn.sweetalert2_js') }}"></script>
<script> <script>
var Toast = Swal.mixin({ var Toast = Swal.mixin({
@@ -135,7 +135,7 @@
</div> </div>
</x-content.content-card> </x-content.content-card>
</div> </div>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.0/css/all.min.css" integrity="sha512-DxV+EoADOkOygM4IR9yXP8Sb2qwgidEmeqAEmDKIOfPRQZOWbXCzLC6vjbZyy0vPisbH2SyW27+ddLVCN+OMzQ==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link rel="stylesheet" href="{{ config('habbo.cdn.fontawesome_css') }}" crossorigin="anonymous" referrerpolicy="no-referrer" />
<script src="{{ asset('js/gif/gif.js') }}"></script> <script src="{{ asset('js/gif/gif.js') }}"></script>
@@ -128,9 +128,9 @@
</div> </div>
<x-footer /> <x-footer />
<script src="{{ config('habbo.cdn.fancybox_js') }}"></script>
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@4.0/dist/fancybox.umd.js"></script> <link rel="stylesheet" href="{{ config('habbo.cdn.fancybox_css') }}" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.css" />
@stack('javascript') @stack('javascript')
@@ -73,8 +73,8 @@
</div> </div>
{{-- TODO: Selfhost --}} {{-- TODO: Selfhost --}}
<script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script> <script src="{{ config('habbo.cdn.sweetalert2_js') }}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.3.3/html2canvas.min.js"></script> <script src="{{ config('habbo.cdn.html2canvas_js') }}"></script>
<script> <script>
function logoGenerator() { function logoGenerator() {
return { return {
@@ -3,7 +3,7 @@
@section('title', __('radio.music') . ' - ' . config('app.name')) @section('title', __('radio.music') . ' - ' . config('app.name'))
@push('styles') @push('styles')
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource/inter@4.x/400-700.css"> <link rel="stylesheet" href="{{ config('habbo.cdn.fontsource_inter_css') }}">
<style> <style>
:root { :root {
--radio-primary: {{ $primaryColor ?? '#eeb425' }}; --radio-primary: {{ $primaryColor ?? '#eeb425' }};
+1 -1
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Radio Player</title> <title>Radio Player</title>
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script> <script defer src="{{ config('habbo.cdn.alpine_js') }}"></script>
<style> <style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body { body {