40 lines
1019 B
TypeScript
40 lines
1019 B
TypeScript
/**
|
|
* lib/users.ts
|
|
* Manages panel users via PostgreSQL database.
|
|
*/
|
|
|
|
import { prisma } from "./prisma";
|
|
|
|
export interface AppUser {
|
|
id: string;
|
|
name: string | null;
|
|
email: string;
|
|
password: string;
|
|
role: string;
|
|
domains: string[];
|
|
telegramId?: string | null;
|
|
}
|
|
|
|
/** 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 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 as AppUser;
|
|
}
|
|
|
|
/** Check if a user has access to a specific domain */
|
|
export function canAccessDomain(userDomains: string[], domain: string): boolean {
|
|
return userDomains.includes("*") || userDomains.includes(domain);
|
|
}
|