From 9482fea7f2865179e1147497ef7dbc85ee2f831e Mon Sep 17 00:00:00 2001 From: Jose Selesan Date: Fri, 29 May 2026 16:03:38 -0300 Subject: [PATCH] feat(auth): implement better authentication system with user sessions and password management - Added user, session, account, and verification models to Prisma schema. - Integrated better-auth for user authentication with email and password. - Created auth middleware for session validation. - Implemented auth context and client in frontend for managing user sessions. - Added login and settings pages for user authentication and password management. - Updated routes to include authentication checks and user-specific content. - Enhanced UI components to reflect authentication state. --- .gitignore | 1 + apps/backend/package.json | 1 + .../20260529183748_add_auth/migration.sql | 78 +++++++++++++ apps/backend/prisma/schema.prisma | 67 ++++++++++- apps/backend/prisma/seed.ts | 58 ++++++++++ apps/backend/src/index.ts | 11 ++ apps/backend/src/lib/auth-middleware.ts | 14 +++ apps/backend/src/lib/auth.ts | 20 ++++ apps/backend/tsconfig.json | 1 + apps/frontend/src/App.tsx | 13 ++- .../frontend/src/components/layout/Header.tsx | 24 +++- .../src/components/layout/Sidebar.tsx | 20 +++- apps/frontend/src/lib/api.ts | 5 +- apps/frontend/src/lib/auth-client.ts | 5 + apps/frontend/src/lib/auth-context.tsx | 63 +++++++++++ apps/frontend/src/main.tsx | 5 +- apps/frontend/src/router.tsx | 16 ++- apps/frontend/src/routes/__root.tsx | 16 ++- apps/frontend/src/routes/_authenticated.tsx | 6 + .../routes/{ => _authenticated}/expenses.tsx | 2 +- .../src/routes/{ => _authenticated}/index.tsx | 2 +- .../{ => _authenticated}/quotes.belo.tsx | 2 +- .../{ => _authenticated}/quotes.index.tsx | 2 +- .../routes/{ => _authenticated}/quotes.tsx | 2 +- .../src/routes/_authenticated/settings.tsx | 107 ++++++++++++++++++ apps/frontend/src/routes/login.tsx | 95 ++++++++++++++++ apps/frontend/tsconfig.json | 1 + bun.lockb | Bin 301000 -> 301400 bytes package.json | 5 +- 29 files changed, 621 insertions(+), 21 deletions(-) create mode 100644 apps/backend/prisma/migrations/20260529183748_add_auth/migration.sql create mode 100644 apps/backend/prisma/seed.ts create mode 100644 apps/backend/src/lib/auth-middleware.ts create mode 100644 apps/backend/src/lib/auth.ts create mode 100644 apps/frontend/src/lib/auth-client.ts create mode 100644 apps/frontend/src/lib/auth-context.tsx create mode 100644 apps/frontend/src/routes/_authenticated.tsx rename apps/frontend/src/routes/{ => _authenticated}/expenses.tsx (69%) rename apps/frontend/src/routes/{ => _authenticated}/index.tsx (72%) rename apps/frontend/src/routes/{ => _authenticated}/quotes.belo.tsx (66%) rename apps/frontend/src/routes/{ => _authenticated}/quotes.index.tsx (69%) rename apps/frontend/src/routes/{ => _authenticated}/quotes.tsx (69%) create mode 100644 apps/frontend/src/routes/_authenticated/settings.tsx create mode 100644 apps/frontend/src/routes/login.tsx diff --git a/.gitignore b/.gitignore index f1944f3..dc6c862 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ node_modules .env.local dist build +.vite diff --git a/apps/backend/package.json b/apps/backend/package.json index db9414c..bc76d55 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -11,6 +11,7 @@ "prisma:migrate:deploy": "prisma migrate deploy" }, "dependencies": { + "@noble/ciphers": "^2.1.1", "@personal-admin/common": "workspace:*", "@prisma/adapter-pg": "^7.8.0", "@prisma/client": "^7.8.0", diff --git a/apps/backend/prisma/migrations/20260529183748_add_auth/migration.sql b/apps/backend/prisma/migrations/20260529183748_add_auth/migration.sql new file mode 100644 index 0000000..a154b00 --- /dev/null +++ b/apps/backend/prisma/migrations/20260529183748_add_auth/migration.sql @@ -0,0 +1,78 @@ +-- CreateTable +CREATE TABLE "user" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "email" TEXT NOT NULL, + "emailVerified" BOOLEAN NOT NULL DEFAULT false, + "image" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "user_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "session" ( + "id" TEXT NOT NULL, + "expiresAt" TIMESTAMP(3) NOT NULL, + "token" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "ipAddress" TEXT, + "userAgent" TEXT, + "userId" TEXT NOT NULL, + + CONSTRAINT "session_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "account" ( + "id" TEXT NOT NULL, + "accountId" TEXT NOT NULL, + "providerId" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "accessToken" TEXT, + "refreshToken" TEXT, + "idToken" TEXT, + "accessTokenExpiresAt" TIMESTAMP(3), + "refreshTokenExpiresAt" TIMESTAMP(3), + "scope" TEXT, + "password" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "account_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "verification" ( + "id" TEXT NOT NULL, + "identifier" TEXT NOT NULL, + "value" TEXT NOT NULL, + "expiresAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "verification_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "user_email_key" ON "user"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "session_token_key" ON "session"("token"); + +-- CreateIndex +CREATE INDEX "session_userId_idx" ON "session"("userId"); + +-- CreateIndex +CREATE INDEX "account_userId_idx" ON "account"("userId"); + +-- CreateIndex +CREATE INDEX "verification_identifier_idx" ON "verification"("identifier"); + +-- AddForeignKey +ALTER TABLE "session" ADD CONSTRAINT "session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "account" ADD CONSTRAINT "account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/apps/backend/prisma/schema.prisma b/apps/backend/prisma/schema.prisma index 13a0956..961c15f 100644 --- a/apps/backend/prisma/schema.prisma +++ b/apps/backend/prisma/schema.prisma @@ -1,8 +1,3 @@ -// This is your Prisma schema file, -// learn more about it in the docs: https://pris.ly/d/prisma-schema - -// Get a free hosted Postgres database in seconds: `npx create-db` - generator client { provider = "prisma-client" output = "../src/generated/prisma" @@ -12,6 +7,68 @@ datasource db { provider = "postgresql" } +model User { + id String @id + name String + email String @unique + emailVerified Boolean @default(false) + image String? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + sessions Session[] + accounts Account[] + + @@map("user") +} + +model Session { + id String @id + expiresAt DateTime + token String @unique + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + ipAddress String? + userAgent String? + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@index([userId]) + @@map("session") +} + +model Account { + id String @id + accountId String + providerId String + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + accessToken String? + refreshToken String? + idToken String? + accessTokenExpiresAt DateTime? + refreshTokenExpiresAt DateTime? + scope String? + password String? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([userId]) + @@map("account") +} + +model Verification { + id String @id + identifier String + value String + expiresAt DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([identifier]) + @@map("verification") +} + enum QuoteType { BLUE BNA diff --git a/apps/backend/prisma/seed.ts b/apps/backend/prisma/seed.ts new file mode 100644 index 0000000..ca721ff --- /dev/null +++ b/apps/backend/prisma/seed.ts @@ -0,0 +1,58 @@ +import "dotenv/config"; +import { betterAuth } from "better-auth"; +import { prismaAdapter } from "better-auth/adapters/prisma"; +import { PrismaClient } from "../src/generated/prisma/client"; +import { PrismaPg } from "@prisma/adapter-pg"; + +const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL! }); +const prisma = new PrismaClient({ adapter }); + +async function main() { + const existingUser = await prisma.user.findUnique({ + where: { email: "jselesan@gmail.com" }, + }); + + if (existingUser) { + console.log("Admin user already exists, skipping seed."); + return; + } + + const auth = betterAuth({ + database: prismaAdapter(prisma, { + provider: "postgresql", + }), + emailAndPassword: { + enabled: true, + disableSignUp: false, + minPasswordLength: 4, + }, + secret: process.env.BETTER_AUTH_SECRET!, + baseURL: process.env.BETTER_AUTH_URL ?? "http://localhost:3000", + }); + + const password = process.env.ADMIN_PASSWORD; + + if (!password) { + console.error("ADMIN_PASSWORD environment variable is not set."); + process.exit(1); + } + + await auth.api.signUpEmail({ + body: { + email: "jselesan@gmail.com", + password, + name: "Admin", + }, + }); + + console.log("Admin user created successfully."); +} + +main() + .catch((e) => { + console.error(e); + process.exit(1); + }) + .finally(async () => { + await prisma.$disconnect(); + }); diff --git a/apps/backend/src/index.ts b/apps/backend/src/index.ts index 0a2c528..0dd8722 100644 --- a/apps/backend/src/index.ts +++ b/apps/backend/src/index.ts @@ -1,5 +1,7 @@ import { Hono } from "hono"; import { serveStatic } from "hono/bun"; +import { auth } from "./lib/auth"; +import { authMiddleware } from "./lib/auth-middleware"; import { startQuoteJob } from "./modules/quotes/quote.job"; import quotesRouter from "./modules/quotes/quotes.routes"; import expensesRouter from "./modules/expenses/expenses.routes"; @@ -12,6 +14,15 @@ app.get("/api/health", (c) => { return c.json({ status: "ok", timestamp: new Date().toISOString() }); }); +app.on(["POST", "GET"], "/api/auth/*", (c) => auth.handler(c.req.raw)); + +app.use("/api/*", async (c, next) => { + if (c.req.path === "/api/health" || c.req.path.startsWith("/api/auth")) { + return next(); + } + return authMiddleware(c, next); +}); + app.route("/api/quotes", quotesRouter); app.route("/api", expensesRouter); diff --git a/apps/backend/src/lib/auth-middleware.ts b/apps/backend/src/lib/auth-middleware.ts new file mode 100644 index 0000000..7ab870a --- /dev/null +++ b/apps/backend/src/lib/auth-middleware.ts @@ -0,0 +1,14 @@ +import type { Context, Next } from "hono"; +import { auth } from "./auth"; + +export async function authMiddleware(c: Context, next: Next) { + const session = await auth.api.getSession({ headers: c.req.raw.headers }); + + if (!session) { + return c.json({ error: "Unauthorized" }, 401); + } + + c.set("user", session.user); + c.set("session", session.session); + await next(); +} diff --git a/apps/backend/src/lib/auth.ts b/apps/backend/src/lib/auth.ts new file mode 100644 index 0000000..fb530dc --- /dev/null +++ b/apps/backend/src/lib/auth.ts @@ -0,0 +1,20 @@ +import { betterAuth } from "better-auth"; +import { prismaAdapter } from "better-auth/adapters/prisma"; +import { prisma } from "./prisma"; + +export const auth = betterAuth({ + database: prismaAdapter(prisma, { + provider: "postgresql", + }), + emailAndPassword: { + enabled: true, + disableSignUp: true, + minPasswordLength: 4, + }, + secret: process.env.BETTER_AUTH_SECRET!, + baseURL: process.env.BETTER_AUTH_URL!, + trustedOrigins: [ + process.env.BETTER_AUTH_URL!, + "http://localhost:5173", + ], +}); diff --git a/apps/backend/tsconfig.json b/apps/backend/tsconfig.json index a0fd9e8..c0c91eb 100644 --- a/apps/backend/tsconfig.json +++ b/apps/backend/tsconfig.json @@ -4,6 +4,7 @@ "module": "ESNext", "moduleResolution": "bundler", "strict": true, + "skipLibCheck": true, "outDir": "dist", "rootDir": "src" }, diff --git a/apps/frontend/src/App.tsx b/apps/frontend/src/App.tsx index 5b434f0..a540c2d 100644 --- a/apps/frontend/src/App.tsx +++ b/apps/frontend/src/App.tsx @@ -1,11 +1,22 @@ import { RouterProvider } from "@tanstack/react-router"; import { router } from "@/router"; import { SseProvider } from "@/lib/sse-context"; +import { useAuth } from "@/lib/auth-context"; function App() { + const auth = useAuth(); + + if (auth.isPending) { + return ( +
+
+
+ ); + } + return ( - + ); } diff --git a/apps/frontend/src/components/layout/Header.tsx b/apps/frontend/src/components/layout/Header.tsx index d04455e..8bd5270 100644 --- a/apps/frontend/src/components/layout/Header.tsx +++ b/apps/frontend/src/components/layout/Header.tsx @@ -1,7 +1,8 @@ -import { Menu, Sun, Moon, Monitor } from "lucide-react"; +import { Menu, Sun, Moon, Monitor, LogOut } from "lucide-react"; import { Button } from "@/components/ui/button"; import { useSseStatus } from "@/lib/sse-context"; import { useTheme } from "@/lib/theme"; +import { useAuth } from "@/lib/auth-context"; import { cn } from "@/lib/utils"; interface HeaderProps { @@ -11,11 +12,17 @@ interface HeaderProps { export function Header({ onMenuClick }: HeaderProps) { const sseStatus = useSseStatus(); const { theme, cycleTheme } = useTheme(); + const auth = useAuth(); const ThemeIcon = theme === "light" ? Sun : theme === "dark" ? Moon : Monitor; const themeLabel = theme === "light" ? "Claro" : theme === "dark" ? "Oscuro" : "Sistema"; + async function handleSignOut() { + await auth.signOut(); + window.location.href = "/login"; + } + return (
+ + )} + +
+ ); +} diff --git a/apps/frontend/src/routes/login.tsx b/apps/frontend/src/routes/login.tsx new file mode 100644 index 0000000..7b2bf2c --- /dev/null +++ b/apps/frontend/src/routes/login.tsx @@ -0,0 +1,95 @@ +import { useState } from "react"; +import { createFileRoute, useNavigate } from "@tanstack/react-router"; +import { Lock } from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { useAuth } from "@/lib/auth-context"; + +export const Route = createFileRoute("/login")({ + component: LoginPage, +}); + +function LoginPage() { + const auth = useAuth(); + const navigate = useNavigate(); + const [password, setPassword] = useState(""); + const [error, setError] = useState(null); + const [loading, setLoading] = useState(false); + + async function handleSubmit(e: React.FormEvent) { + e.preventDefault(); + setError(null); + setLoading(true); + try { + await auth.signIn(password); + navigate({ to: "/" }); + } catch (err: unknown) { + const message = + err instanceof Error + ? err.message + : typeof err === "object" && err && "message" in err + ? String((err as { message: unknown }).message) + : "Error al iniciar sesión"; + setError(message); + } finally { + setLoading(false); + } + } + + return ( +
+
+
+
+
+ +
+
+

+ Personal Admin +

+

+ Ingresá tu contraseña para continuar +

+
+
+
+
+ + +
+
+ + setPassword(e.target.value)} + autoFocus + className="text-base" + /> +
+ {error && ( +

{error}

+ )} + +
+
+

+ App privada — acceso restringido +

+
+
+ ); +} diff --git a/apps/frontend/tsconfig.json b/apps/frontend/tsconfig.json index c200fd9..c904f10 100644 --- a/apps/frontend/tsconfig.json +++ b/apps/frontend/tsconfig.json @@ -4,6 +4,7 @@ "module": "ESNext", "moduleResolution": "bundler", "strict": true, + "skipLibCheck": true, "jsx": "react-jsx", "outDir": "dist", "rootDir": "src", diff --git a/bun.lockb b/bun.lockb index faaea3aa78082c8c1a0957d1adfe57bd54f31f9e..52882517d1480a397a1fa4bebbe74bbef8cca01a 100755 GIT binary patch delta 54770 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 rtIBGp9V@brBnX`4Qd+jetL= delta 55042 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