chore: migrate to PostgreSQL with Prisma
This commit is contained in:
60
lib/users.ts
60
lib/users.ts
@@ -16,54 +16,34 @@
|
||||
* USER_1_DOMAINS="aveminakarabudak.com"
|
||||
*/
|
||||
|
||||
import { prisma } from "./prisma";
|
||||
|
||||
export interface AppUser {
|
||||
id: string; // "user_0", "user_1", ...
|
||||
name: string;
|
||||
id: string;
|
||||
name: string | null;
|
||||
email: string;
|
||||
password: string; // plain text — store hashed in prod or use secrets manager
|
||||
role: "SUPER_ADMIN" | "DOMAIN_ADMIN";
|
||||
domains: string[]; // ["*"] for super admin, ["domain.com"] for domain admins
|
||||
telegramId?: string; // Optional Telegram ID for notifications
|
||||
password: string;
|
||||
role: string;
|
||||
domains: string[];
|
||||
telegramId?: string | null;
|
||||
}
|
||||
|
||||
/** Load all users defined in environment variables */
|
||||
export function getUsers(): AppUser[] {
|
||||
const users: AppUser[] = [];
|
||||
|
||||
let i = 0;
|
||||
while (true) {
|
||||
const name = process.env[`USER_${i}_NAME`];
|
||||
const email = process.env[`USER_${i}_EMAIL`];
|
||||
const password = process.env[`USER_${i}_PASSWORD`];
|
||||
const role = process.env[`USER_${i}_ROLE`] as AppUser["role"];
|
||||
const domainsRaw = process.env[`USER_${i}_DOMAINS`] ?? "";
|
||||
const telegramId = process.env[`USER_${i}_TELEGRAM_ID`];
|
||||
|
||||
if (!name || !email || !password) break;
|
||||
|
||||
users.push({
|
||||
id: `user_${i}`,
|
||||
name,
|
||||
email,
|
||||
password,
|
||||
role: role ?? "DOMAIN_ADMIN",
|
||||
domains: domainsRaw === "*" ? ["*"] : domainsRaw.split(",").map((d) => d.trim()).filter(Boolean),
|
||||
telegramId,
|
||||
});
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
return users;
|
||||
/** Load all users from database */
|
||||
export async function getUsers(): Promise<AppUser[]> {
|
||||
const users = await prisma.user.findMany();
|
||||
return users as AppUser[];
|
||||
}
|
||||
|
||||
/** Find user by email and validate password */
|
||||
export function authenticateUser(email: string, password: string): AppUser | null {
|
||||
const users = getUsers();
|
||||
const user = users.find((u) => u.email.toLowerCase() === email.toLowerCase());
|
||||
/** Find user by email and validate password via database */
|
||||
export async function authenticateUser(email: string, password: string): Promise<AppUser | null> {
|
||||
const user = await prisma.user.findUnique({
|
||||
where: { email: email.toLowerCase() },
|
||||
});
|
||||
|
||||
if (!user) return null;
|
||||
if (user.password !== password) return null;
|
||||
return user;
|
||||
|
||||
return user as AppUser;
|
||||
}
|
||||
|
||||
/** Check if a user has access to a specific domain */
|
||||
|
||||
Reference in New Issue
Block a user