From fedb0ae8dbd84e62fba01f88fac09f3067736910 Mon Sep 17 00:00:00 2001 From: Pihkaal Date: Wed, 25 Mar 2026 16:33:15 +0100 Subject: [PATCH] feat: redirection --- .env.example | 3 +++ nuxt.config.ts | 4 ---- server/env.ts | 1 + server/middleware/redirect.ts | 31 +++++++++++++++++++++++++++++++ 4 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 server/middleware/redirect.ts diff --git a/.env.example b/.env.example index befad80..7f89774 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,6 @@ DATABASE_URL=sqlite.db ADMIN_USERNAME=admin ADMIN_PASSWORD=strong_password +REDIRECT_DOMAIN=pihka.al + +NUXT_SESSION_PASSWORD=strong_password diff --git a/nuxt.config.ts b/nuxt.config.ts index 98a7d48..5796d65 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -10,10 +10,6 @@ export default defineNuxtConfig({ } }, - routeRules: { - '/': { redirect: '/dashboard' }, - }, - devtools: { enabled: true }, diff --git a/server/env.ts b/server/env.ts index 6facd4b..52e335b 100644 --- a/server/env.ts +++ b/server/env.ts @@ -5,6 +5,7 @@ const schema = z.object({ DATABASE_URL: z.string().min(1), ADMIN_USERNAME: z.string().min(1).default("admin"), ADMIN_PASSWORD: z.string().min(1), + REDIRECT_DOMAIN: z.string().min(1), }) export const env = schema.parse(process.env) diff --git a/server/middleware/redirect.ts b/server/middleware/redirect.ts new file mode 100644 index 0000000..20f902f --- /dev/null +++ b/server/middleware/redirect.ts @@ -0,0 +1,31 @@ +import { db } from "#server/db"; +import * as tables from "#server/db/schema"; +import { eq } from "drizzle-orm"; +import { env } from "#server/env"; + +export default defineEventHandler(async (event) => { + const host = getRequestHost(event, { xForwardedHost: true }).split(":")[0]; + + if (host !== env.REDIRECT_DOMAIN) { + if (getRequestURL(event).pathname === "/") { + return sendRedirect(event, "/dashboard", 302); + } + return; + } + + const path = getRequestURL(event).pathname; + + const link = await db.query.links.findFirst({ + where: eq(tables.links.path, path), + }); + + if (!link) { + throw createError({ statusCode: 404, message: "Not found" }); + } + + if (link.disabled) { + throw createError({ statusCode: 410, message: "This link has been disabled" }); + } + + return sendRedirect(event, link.url, 302); +});