Files
webmailserver/lib/users.ts
2026-05-14 14:57:15 +03:00

53 lines
1.5 KiB
TypeScript

/**
* lib/users.ts
* Reads user config from environment variables — no database needed.
*
* .env format:
* USER_0_NAME="Mustafa Ayris"
* USER_0_EMAIL="mustafa@ayristech.com"
* USER_0_PASSWORD="mustafa123"
* USER_0_ROLE="SUPER_ADMIN" // or "DOMAIN_ADMIN"
* USER_0_DOMAINS="*" // "*" for all, or "domain1.com,domain2.com"
*
* USER_1_NAME="Emina Karabudak"
* USER_1_EMAIL="emina@ayristech.com"
* USER_1_PASSWORD="emina123"
* USER_1_ROLE="DOMAIN_ADMIN"
* USER_1_DOMAINS="aveminakarabudak.com"
*/
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);
}