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:
parent
074b4eb5d1
commit
5637fb1772
|
|
@ -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="min-h-screen bg-[#111925]">
|
||||||
|
<AdminNav />
|
||||||
<div className="max-w-5xl mx-auto px-4 py-8">
|
<div className="max-w-5xl mx-auto px-4 py-8">
|
||||||
<h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}>
|
<h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}>
|
||||||
Galerie verwalten
|
Galerie verwalten
|
||||||
</h1>
|
</h1>
|
||||||
<GalerieVerwaltung />
|
<GalerieVerwaltung />
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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="min-h-screen bg-[#111925]">
|
||||||
|
<AdminNav />
|
||||||
<div className="max-w-4xl mx-auto px-4 py-8">
|
<div className="max-w-4xl mx-auto px-4 py-8">
|
||||||
<h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}>
|
<h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}>
|
||||||
Hero-Sektion
|
Hero-Sektion
|
||||||
</h1>
|
</h1>
|
||||||
<HeroVerwaltung />
|
<HeroVerwaltung />
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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="min-h-screen bg-[#111925]">
|
||||||
|
<AdminNav />
|
||||||
<div className="max-w-5xl mx-auto px-4 py-8">
|
<div className="max-w-5xl mx-auto px-4 py-8">
|
||||||
<h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}>
|
<h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}>
|
||||||
Kontaktdaten
|
Kontaktdaten
|
||||||
</h1>
|
</h1>
|
||||||
<KontaktVerwaltung />
|
<KontaktVerwaltung />
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 />
|
||||||
|
<div className="max-w-2xl mx-auto px-4 py-8">
|
||||||
|
<h1 className="text-2xl font-bold tracking-tight mb-2" style={{ color: 'var(--text-primary)' }}>
|
||||||
Passwort ändern
|
Passwort ändern
|
||||||
</h1>
|
</h1>
|
||||||
<p style={{ fontSize: '13px', color: 'var(--text-muted)', marginBottom: '28px' }}>
|
<p style={{ fontSize: '13px', color: 'var(--text-muted)', marginBottom: '28px' }}>
|
||||||
Angemeldet als <strong>{session.email}</strong>
|
Angemeldet als <strong style={{ color: 'var(--text-primary)' }}>{session.email}</strong>
|
||||||
</p>
|
</p>
|
||||||
<PasswortAendern />
|
<PasswortAendern />
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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="min-h-screen bg-[#111925]">
|
||||||
|
<AdminNav />
|
||||||
<div className="max-w-4xl mx-auto px-4 py-8">
|
<div className="max-w-4xl mx-auto px-4 py-8">
|
||||||
<h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}>
|
<h1 className="text-2xl font-bold tracking-tight mb-6" style={{ color: 'var(--text-primary)' }}>
|
||||||
Über uns
|
Über uns
|
||||||
</h1>
|
</h1>
|
||||||
<UeberUnsVerwaltung />
|
<UeberUnsVerwaltung />
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue