From 9ac584dcb644db927675471f79a322853e1ccfa0 Mon Sep 17 00:00:00 2001 From: Esdras Renan Date: Tue, 14 Oct 2025 10:59:09 -0300 Subject: [PATCH] auth: guarda server-side em rotas protegidas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - /tickets/[id], /tickets/resolved, /views, /play, /reports/*, /settings agora exigem sessão via requireAuthenticatedSession() - Complementa o middleware e evita casos não-redirecionados em DEV/SSG - Mantém /settings/templates com requireStaffSession() como já estava. --- src/app/play/page.tsx | 16 +++++++++------- src/app/reports/backlog/page.tsx | 4 +++- src/app/reports/csat/page.tsx | 4 +++- src/app/reports/hours/page.tsx | 5 +++-- src/app/reports/sla/page.tsx | 4 +++- src/app/settings/page.tsx | 4 +++- src/app/tickets/[id]/page.tsx | 2 ++ src/app/tickets/resolved/page.tsx | 4 +++- src/app/views/page.tsx | 5 +++-- 9 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/app/play/page.tsx b/src/app/play/page.tsx index 62426b5..d9ae47e 100644 --- a/src/app/play/page.tsx +++ b/src/app/play/page.tsx @@ -1,10 +1,12 @@ -import { AppShell } from "@/components/app-shell" -import { SiteHeader } from "@/components/site-header" -import { PlayNextTicketCard } from "@/components/tickets/play-next-ticket-card" -import { TicketQueueSummaryCards } from "@/components/tickets/ticket-queue-summary" - -export default function PlayPage() { - return ( +import { AppShell } from "@/components/app-shell" +import { SiteHeader } from "@/components/site-header" +import { PlayNextTicketCard } from "@/components/tickets/play-next-ticket-card" +import { TicketQueueSummaryCards } from "@/components/tickets/ticket-queue-summary" +import { requireAuthenticatedSession } from "@/lib/auth-server" + +export default async function PlayPage() { + await requireAuthenticatedSession() + return ( ) } - diff --git a/src/app/reports/sla/page.tsx b/src/app/reports/sla/page.tsx index 824f935..0e7677d 100644 --- a/src/app/reports/sla/page.tsx +++ b/src/app/reports/sla/page.tsx @@ -1,10 +1,12 @@ import { AppShell } from "@/components/app-shell" import { SlaReport } from "@/components/reports/sla-report" import { SiteHeader } from "@/components/site-header" +import { requireAuthenticatedSession } from "@/lib/auth-server" export const dynamic = "force-dynamic" -export default function ReportsSlaPage() { +export default async function ReportsSlaPage() { + await requireAuthenticatedSession() return ( } diff --git a/src/app/tickets/[id]/page.tsx b/src/app/tickets/[id]/page.tsx index 1cb2583..b9b5b93 100644 --- a/src/app/tickets/[id]/page.tsx +++ b/src/app/tickets/[id]/page.tsx @@ -5,12 +5,14 @@ import { TicketDetailStatic } from "@/components/tickets/ticket-detail-static" import { NewTicketDialogDeferred } from "@/components/tickets/new-ticket-dialog.client" import { getTicketById } from "@/lib/mocks/tickets" import type { TicketWithDetails } from "@/lib/schemas/ticket" +import { requireAuthenticatedSession } from "@/lib/auth-server" type TicketDetailPageProps = { params: Promise<{ id: string }> } export default async function TicketDetailPage({ params }: TicketDetailPageProps) { + await requireAuthenticatedSession() const { id } = await params const isMock = id.startsWith("ticket-") const mock = isMock ? getTicketById(id) : null diff --git a/src/app/tickets/resolved/page.tsx b/src/app/tickets/resolved/page.tsx index 83c275a..18a8417 100644 --- a/src/app/tickets/resolved/page.tsx +++ b/src/app/tickets/resolved/page.tsx @@ -1,5 +1,7 @@ import { TicketsResolvedPageClient } from "./tickets-resolved-page-client" +import { requireAuthenticatedSession } from "@/lib/auth-server" -export default function TicketsResolvedPage() { +export default async function TicketsResolvedPage() { + await requireAuthenticatedSession() return } diff --git a/src/app/views/page.tsx b/src/app/views/page.tsx index 58f9f33..7eb37da 100644 --- a/src/app/views/page.tsx +++ b/src/app/views/page.tsx @@ -2,10 +2,12 @@ import { AppShell } from "@/components/app-shell" import { SiteHeader } from "@/components/site-header" import { ChartAreaInteractive } from "@/components/chart-area-interactive" import { ViewsCharts } from "@/components/charts/views-charts" +import { requireAuthenticatedSession } from "@/lib/auth-server" export const dynamic = "force-dynamic" -export default function ViewsPage() { +export default async function ViewsPage() { + await requireAuthenticatedSession() return ( } @@ -19,4 +21,3 @@ export default function ViewsPage() { ) } -