From c58690307812d3e5ec6222ce9d6469c1125b6208 Mon Sep 17 00:00:00 2001 From: Atridad Lahiji Date: Thu, 17 Aug 2023 20:55:56 -0600 Subject: [PATCH] :| finally --- src/middleware.ts | 25 ++++++++++++++++++++----- src/pages/api/external/ping.ts | 9 --------- src/pages/api/private/ping.ts | 13 +++++++++++++ src/pages/api/public/ping.ts | 13 +++++++++++++ src/pages/api/webhooks/index.ts | 6 ------ src/server/unkey.ts | 1 + 6 files changed, 47 insertions(+), 20 deletions(-) delete mode 100644 src/pages/api/external/ping.ts create mode 100644 src/pages/api/private/ping.ts create mode 100644 src/pages/api/public/ping.ts diff --git a/src/middleware.ts b/src/middleware.ts index ca6282b..c4ea50d 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -1,17 +1,32 @@ -import { authMiddleware } from "@clerk/nextjs"; +import { authMiddleware, redirectToSignIn } from "@clerk/nextjs"; import { validateRequest } from "./server/unkey"; import { NextResponse } from "next/server"; export default authMiddleware({ - publicRoutes: ["/", "/api/(.*)"], - beforeAuth: async (req) => { - if (req.nextUrl.pathname.startsWith("/api/external")) { + publicRoutes: ["/", "/api/public/(.*)"], + afterAuth: async (auth, req) => { + if (!auth.userId && auth.isPublicRoute) { + console.log("1"); + return NextResponse.next(); + } + + if ( + req.nextUrl.pathname.includes("/api/webhooks") || + req.nextUrl.pathname.includes("/api/private") + ) { + console.log("2"); const isValid = await validateRequest(req); console.log("Is Valid?: ", isValid); if (isValid) { return NextResponse.next(); + } else { + return new NextResponse("UNAUTHORIZED", { status: 403 }); } - return new NextResponse("UNAUTHORIZED", { status: 403 }); + } + if (!auth.userId && !auth.isPublicRoute) { + console.log(req.nextUrl); + console.log("3"); + return redirectToSignIn({ returnBackUrl: req.url }); } }, }); diff --git a/src/pages/api/external/ping.ts b/src/pages/api/external/ping.ts deleted file mode 100644 index 9c32a57..0000000 --- a/src/pages/api/external/ping.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from "next"; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - console.log("Made it to the function!"); - res.status(200).json({ result: "Pong!" }); -} diff --git a/src/pages/api/private/ping.ts b/src/pages/api/private/ping.ts new file mode 100644 index 0000000..6a8ca54 --- /dev/null +++ b/src/pages/api/private/ping.ts @@ -0,0 +1,13 @@ +import { NextResponse } from "next/server"; + +export const config = { + runtime: "edge", + regions: ["pdx1"], +}; + +export default async function handler() { + return NextResponse.json( + { message: "Private Pong!" }, + { status: 200, statusText: "SUCCESS" } + ); +} diff --git a/src/pages/api/public/ping.ts b/src/pages/api/public/ping.ts new file mode 100644 index 0000000..7af559a --- /dev/null +++ b/src/pages/api/public/ping.ts @@ -0,0 +1,13 @@ +import { NextResponse } from "next/server"; + +export const config = { + runtime: "edge", + regions: ["pdx1"], +}; + +export default async function handler() { + return NextResponse.json( + { message: "Public Pong!" }, + { status: 200, statusText: "SUCCESS" } + ); +} diff --git a/src/pages/api/webhooks/index.ts b/src/pages/api/webhooks/index.ts index b699ab2..294f7a8 100644 --- a/src/pages/api/webhooks/index.ts +++ b/src/pages/api/webhooks/index.ts @@ -10,12 +10,6 @@ export default async function handler( req: NextApiRequest, res: NextApiResponse ) { - const isValid = await validateRequest(req, res); - - if (!isValid) { - return; - } - try { const requestBody = WebhookEventBodySchema.parse(req.body); diff --git a/src/server/unkey.ts b/src/server/unkey.ts index 15686b8..7c04922 100644 --- a/src/server/unkey.ts +++ b/src/server/unkey.ts @@ -17,6 +17,7 @@ export const validateApiKey = async (key: string) => { export const validateRequest = async (req: NextRequest) => { let isValidKey: boolean = false; + const authorization = req.headers.get("authorization"); // Get the auth bearer token if it exists if (authorization) {