states, and pulls data from the authenticated /api/v1/tenant/packages endpoint.
(resources/js/admin/pages/EventFormPage.tsx, resources/js/admin/api.ts)
- Harden tenant-admin auth flow: prevent PKCE state loss, scope out StrictMode double-processing, add SPA
routes for /event-admin/login and /event-admin/logout, and tighten token/session clearing semantics (resources/js/admin/auth/{context,tokens}.tsx, resources/js/admin/pages/{AuthCallbackPage,LogoutPage}.tsx,
resources/js/admin/router.tsx, routes/web.php)
59 lines
2.2 KiB
PHP
59 lines
2.2 KiB
PHP
@php
|
|
$scriptNonce = $cspNonce ?? request()->attributes->get('csp_script_nonce');
|
|
@endphp
|
|
|
|
<!doctype html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>@yield('title', 'Fotospiel - Event-Fotos einfach und sicher mit QR-Codes')</title>
|
|
<meta name="description" content="Sammle Gastfotos für Events mit QR-Codes und unserer PWA-Plattform. Für Hochzeiten, Firmenevents und mehr. Kostenloser Einstieg.">
|
|
<link rel="icon" href="{{ asset('logo.svg') }}" type="image/svg+xml">
|
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
|
@if($scriptNonce)
|
|
<meta name="csp-nonce" content="{{ $scriptNonce }}">
|
|
@endif
|
|
@vite(['resources/css/app.css', 'resources/js/app.tsx'])
|
|
<script @if($scriptNonce) nonce="{{ $scriptNonce }}" @endif>
|
|
window.__CSP_NONCE = '{{ $scriptNonce }}';
|
|
</script>
|
|
|
|
@php
|
|
$currentLocale = app()->getLocale();
|
|
$path = request()->path();
|
|
$supportedLocales = ['de', 'en'];
|
|
@endphp
|
|
|
|
<link rel="canonical" href="{{ url($path) }}">
|
|
@foreach($supportedLocales as $locale)
|
|
<link rel="alternate" hreflang="{{ $locale }}" href="{{ url("/$locale$path") }}">
|
|
@endforeach
|
|
<link rel="alternate" hreflang="x-default" href="{{ url('/de' . $path) }}">
|
|
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
|
|
</head>
|
|
<body class="bg-gray-50 text-gray-900">
|
|
<noscript>
|
|
<div class="bg-yellow-100 text-yellow-900 text-sm md:text-base">
|
|
<div class="mx-auto max-w-5xl px-4 py-3">
|
|
@if ($currentLocale === 'en')
|
|
<strong>JavaScript disabled.</strong>
|
|
This site offers limited functionality without JavaScript. Please enable JavaScript for the full experience.
|
|
@else
|
|
<strong>JavaScript deaktiviert.</strong>
|
|
Diese Seite bietet nur eingeschränkte Funktionen ohne JavaScript. Bitte aktiviere JavaScript, um alle Inhalte zu nutzen.
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</noscript>
|
|
|
|
<main>
|
|
@yield('content')
|
|
</main>
|
|
|
|
@include('partials.footer')
|
|
|
|
@stack('scripts')
|
|
</body>
|
|
</html>
|