fix: add AdminNav, auth and CSS variables to all CMS admin pages

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
MBO-Tech-IT 2026-06-02 21:04:11 +02:00
parent 074b4eb5d1
commit 5637fb1772
6 changed files with 106 additions and 37 deletions

View File

@ -1,16 +1,28 @@
export const dynamic = 'force-dynamic' export const dynamic = 'force-dynamic'
import { redirect } from 'next/navigation'
import { cookies } from 'next/headers'
import { verifySessionToken } from '@/lib/admin-auth'
import { AdminNav } from '@/components/admin/AdminNav'
import { GalerieVerwaltung } from '@/components/admin/GalerieVerwaltung' import { GalerieVerwaltung } from '@/components/admin/GalerieVerwaltung'
import type { Metadata } from 'next' import type { Metadata } from 'next'
export const metadata: Metadata = { title: 'Galerie' } export const metadata: Metadata = { title: 'Galerie Admin' }
export default async function AdminGaleriePage() {
const cookieStore = await cookies()
const token = cookieStore.get('admin_session')?.value
const session = token ? await verifySessionToken(token) : null
if (!session) redirect('/admin/login')
export default function AdminGaleriePage() {
return ( return (
<div className="max-w-5xl mx-auto px-4 py-8"> <div className="min-h-screen bg-[#111925]">
<h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}> <AdminNav />
Galerie verwalten <div className="max-w-5xl mx-auto px-4 py-8">
</h1> <h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}>
<GalerieVerwaltung /> Galerie verwalten
</h1>
<GalerieVerwaltung />
</div>
</div> </div>
) )
} }

View File

@ -1,16 +1,28 @@
export const dynamic = 'force-dynamic' export const dynamic = 'force-dynamic'
import { redirect } from 'next/navigation'
import { cookies } from 'next/headers'
import { verifySessionToken } from '@/lib/admin-auth'
import { AdminNav } from '@/components/admin/AdminNav'
import { HeroVerwaltung } from '@/components/admin/HeroVerwaltung' import { HeroVerwaltung } from '@/components/admin/HeroVerwaltung'
import type { Metadata } from 'next' import type { Metadata } from 'next'
export const metadata: Metadata = { title: 'Hero' } export const metadata: Metadata = { title: 'Hero Admin' }
export default async function AdminHeroPage() {
const cookieStore = await cookies()
const token = cookieStore.get('admin_session')?.value
const session = token ? await verifySessionToken(token) : null
if (!session) redirect('/admin/login')
export default function AdminHeroPage() {
return ( return (
<div className="max-w-4xl mx-auto px-4 py-8"> <div className="min-h-screen bg-[#111925]">
<h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}> <AdminNav />
Hero-Sektion <div className="max-w-4xl mx-auto px-4 py-8">
</h1> <h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}>
<HeroVerwaltung /> Hero-Sektion
</h1>
<HeroVerwaltung />
</div>
</div> </div>
) )
} }

View File

@ -1,16 +1,28 @@
export const dynamic = 'force-dynamic' export const dynamic = 'force-dynamic'
import { redirect } from 'next/navigation'
import { cookies } from 'next/headers'
import { verifySessionToken } from '@/lib/admin-auth'
import { AdminNav } from '@/components/admin/AdminNav'
import { KontaktVerwaltung } from '@/components/admin/KontaktVerwaltung' import { KontaktVerwaltung } from '@/components/admin/KontaktVerwaltung'
import type { Metadata } from 'next' import type { Metadata } from 'next'
export const metadata: Metadata = { title: 'Kontakt' } export const metadata: Metadata = { title: 'Kontakt Admin' }
export default async function AdminKontaktPage() {
const cookieStore = await cookies()
const token = cookieStore.get('admin_session')?.value
const session = token ? await verifySessionToken(token) : null
if (!session) redirect('/admin/login')
export default function AdminKontaktPage() {
return ( return (
<div className="max-w-5xl mx-auto px-4 py-8"> <div className="min-h-screen bg-[#111925]">
<h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}> <AdminNav />
Kontaktdaten <div className="max-w-5xl mx-auto px-4 py-8">
</h1> <h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}>
<KontaktVerwaltung /> Kontaktdaten
</h1>
<KontaktVerwaltung />
</div>
</div> </div>
) )
} }

View File

@ -1,5 +1,19 @@
import { SessionTimeoutProvider } from "@/components/admin/SessionTimeoutProvider"; import { SessionTimeoutProvider } from "@/components/admin/SessionTimeoutProvider";
export default function AdminLayout({ children }: { children: React.ReactNode }) { export default function AdminLayout({ children }: { children: React.ReactNode }) {
return <SessionTimeoutProvider>{children}</SessionTimeoutProvider>; return (
<SessionTimeoutProvider>
<style>{`
:root {
--bg: #111925;
--surface: #18212f;
--border-color: rgba(148, 163, 184, 0.15);
--text-primary: #f1f5f9;
--text-muted: #64748b;
--accent: #f97316;
}
`}</style>
{children}
</SessionTimeoutProvider>
);
} }

View File

@ -2,7 +2,11 @@ export const dynamic = 'force-dynamic'
import { redirect } from 'next/navigation' import { redirect } from 'next/navigation'
import { cookies } from 'next/headers' import { cookies } from 'next/headers'
import { verifySessionToken } from '@/lib/admin-auth' import { verifySessionToken } from '@/lib/admin-auth'
import { AdminNav } from '@/components/admin/AdminNav'
import PasswortAendern from '@/components/admin/PasswortAendern' import PasswortAendern from '@/components/admin/PasswortAendern'
import type { Metadata } from 'next'
export const metadata: Metadata = { title: 'Passwort Admin' }
export default async function PasswortPage() { export default async function PasswortPage() {
const cookieStore = await cookies() const cookieStore = await cookies()
@ -11,14 +15,17 @@ export default async function PasswortPage() {
if (!session) redirect('/admin/login') if (!session) redirect('/admin/login')
return ( return (
<div style={{ padding: '32px', maxWidth: '600px' }}> <div className="min-h-screen bg-[#111925]">
<h1 style={{ fontSize: '20px', fontWeight: 800, color: 'var(--text-primary)', marginBottom: '8px' }}> <AdminNav />
Passwort ändern <div className="max-w-2xl mx-auto px-4 py-8">
</h1> <h1 className="text-2xl font-bold tracking-tight mb-2" style={{ color: 'var(--text-primary)' }}>
<p style={{ fontSize: '13px', color: 'var(--text-muted)', marginBottom: '28px' }}> Passwort ändern
Angemeldet als <strong>{session.email}</strong> </h1>
</p> <p style={{ fontSize: '13px', color: 'var(--text-muted)', marginBottom: '28px' }}>
<PasswortAendern /> Angemeldet als <strong style={{ color: 'var(--text-primary)' }}>{session.email}</strong>
</p>
<PasswortAendern />
</div>
</div> </div>
) )
} }

View File

@ -1,16 +1,28 @@
export const dynamic = 'force-dynamic' export const dynamic = 'force-dynamic'
import { redirect } from 'next/navigation'
import { cookies } from 'next/headers'
import { verifySessionToken } from '@/lib/admin-auth'
import { AdminNav } from '@/components/admin/AdminNav'
import { UeberUnsVerwaltung } from '@/components/admin/UeberUnsVerwaltung' import { UeberUnsVerwaltung } from '@/components/admin/UeberUnsVerwaltung'
import type { Metadata } from 'next' import type { Metadata } from 'next'
export const metadata: Metadata = { title: 'Über uns' } export const metadata: Metadata = { title: 'Über uns Admin' }
export default async function AdminUeberUnsPage() {
const cookieStore = await cookies()
const token = cookieStore.get('admin_session')?.value
const session = token ? await verifySessionToken(token) : null
if (!session) redirect('/admin/login')
export default function AdminUeberUnsPage() {
return ( return (
<div className="max-w-4xl mx-auto px-4 py-8"> <div className="min-h-screen bg-[#111925]">
<h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}> <AdminNav />
Über uns <div className="max-w-4xl mx-auto px-4 py-8">
</h1> <h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}>
<UeberUnsVerwaltung /> Über uns
</h1>
<UeberUnsVerwaltung />
</div>
</div> </div>
) )
} }