Files
buzz/lib/auth.ts
T
dmgnr 4559f4693c
Build and Push Image / build-backend (push) Successful in 2m13s
Build and Push Image / build-frontend (push) Successful in 4m9s
Build and Push Image / push (push) Successful in 4m21s
refactor(host): migrate from docker swarm to kubernetes
2026-06-19 18:18:17 +00:00

63 lines
1.6 KiB
TypeScript
Executable File

import { env } from "node:process";
import { betterAuth } from "better-auth";
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { admin } from "better-auth/plugins";
import { headers } from "next/headers";
import { uuidv7 } from "uuidv7";
import { db } from "$/db"; // your drizzle instance
import * as schema from "$/db/schema";
import { redis } from "./db/redis";
export const auth = betterAuth({
emailAndPassword: {
enabled: true,
},
plugins: [admin()],
trustedOrigins: [
"http://nyx:3000",
"http://astral:3000",
"http://localhost:3000",
"https://dev3000.astrxl.dev",
"http://m.dgnr.us",
"http://buzz.sudloh.com",
"http://app.buzz.svc.cluster.local:3000",
],
database: drizzleAdapter(db, {
provider: "pg", // or "mysql", "sqlite"
schema,
}),
});
export async function adminCheck() {
"use server";
if (env.NO_AUTH_CHECK)
return {
email: "bypass@localhost",
name: "[email protected]",
} satisfies Partial<typeof auth.$Infer.Session.user>;
const head = await headers();
const internalAuth = head.get("X-Internal-Auth");
if (internalAuth && (await redis!.get(`internalToken:${internalAuth}`)))
return {
email: "internal@localhost",
name: "[email protected]",
} satisfies Partial<typeof auth.$Infer.Session.user>;
const session = await auth.api.getSession({
headers: head,
});
// console.log(session);
return session?.user.role === "admin" ? session.user : null;
}
export async function issueInternalToken() {
const token = uuidv7();
await redis!.setex(`internalToken:${token}`, 600, "valid");
return token;
}