53 lines
1.5 KiB
TypeScript
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);
|
|
}
|