- lib/auth-guard.ts (nieuw): requireSession() — gedeelde auth+paired-expiry guard, hergebruikt door (app)/layout.tsx - (app)/layout.tsx: refactor naar requireSession() (gedraagt zich identiek) - (mobile)/layout.tsx (nieuw): minimal layout met LandscapeGuard + MobileTabBar; geen NavBar/StatusBar/MinWidthBanner/bridges - /m/pair filesystem-move van (app)/ naar (mobile)/ — URL onveranderd - public/manifest.json: orientation landscape - Tests: requireSession-helper (3 paden) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
27 lines
963 B
TypeScript
27 lines
963 B
TypeScript
// ST-1005: Mobiele bevestigingspagina voor de QR-pairing-flow (M10).
|
|
//
|
|
// Server Component achter de (mobile)/layout.tsx auth-guard (route group
|
|
// (mobile) per ST-1134/PBI-11) — onbekende mobielen worden eerst naar /login
|
|
// gestuurd. Bewust géén searchParams
|
|
// uitlezen: het mobileSecret zit in het URL-fragment (#id=…&s=…), wat alleen
|
|
// client-side leesbaar is. De Client Component PairConfirmation parseert
|
|
// location.hash en doet de Server Action-calls.
|
|
|
|
import { PairConfirmation } from './pair-confirmation'
|
|
|
|
export const metadata = {
|
|
title: 'Inloggen op desktop',
|
|
}
|
|
|
|
export default function PairPage() {
|
|
return (
|
|
<main className="container mx-auto max-w-md py-12">
|
|
<h1 className="text-2xl font-semibold">Inloggen op desktop</h1>
|
|
<p className="text-muted-foreground mt-2">
|
|
Bevestig hieronder dat je wilt inloggen op het apparaat dat de QR-code
|
|
toont.
|
|
</p>
|
|
<PairConfirmation />
|
|
</main>
|
|
)
|
|
}
|