feat: complete i18n support, telegram webhook, and security improvements
This commit is contained in:
@@ -23,6 +23,7 @@ export interface AppUser {
|
||||
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
|
||||
}
|
||||
|
||||
/** Load all users defined in environment variables */
|
||||
@@ -36,6 +37,7 @@ export function getUsers(): AppUser[] {
|
||||
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;
|
||||
|
||||
@@ -46,6 +48,7 @@ export function getUsers(): AppUser[] {
|
||||
password,
|
||||
role: role ?? "DOMAIN_ADMIN",
|
||||
domains: domainsRaw === "*" ? ["*"] : domainsRaw.split(",").map((d) => d.trim()).filter(Boolean),
|
||||
telegramId,
|
||||
});
|
||||
|
||||
i++;
|
||||
|
||||
Reference in New Issue
Block a user