security: remove .env from tracking (contains secrets)

This commit is contained in:
ZOMBIIIIIII
2026-05-11 18:15:21 +03:00
parent 295c3a9d6d
commit 64696b334c
26 changed files with 1840 additions and 128 deletions

View File

@@ -17,8 +17,10 @@ export let env = {
},
jwt: {
algorithm: p.JWT_ALGORITHM || 'RS256',
issuer: p.JWT_ISSUER || 'auth-service',
audience: p.JWT_AUDIENCE || 'elcsa',
// Намеренно без default — каждый деплой ЯВНО указывает iss/aud, иначе сервис
// примет любой токен подписанный нашими ключами с любым iss/aud.
issuer: p.JWT_ISSUER || '',
audience: p.JWT_AUDIENCE || '',
},
vault: {
addr: p.VAULT_ADDR || '',
@@ -29,6 +31,7 @@ export let env = {
jwtKidPath: p.VAULT_JWT_KID_PATH || 'jwt/kid',
jwtKidsPrefix: p.VAULT_JWT_KIDS_PREFIX || 'jwt/kids',
csrfPath: p.VAULT_CSRF_PATH || '',
cryptoKeyPath: p.VAULT_CRYPTO_KEY_PATH || 'crypto/master',
},
cors: {
// No default — каждый деплой явно указывает CORS_ORIGINS, иначе пустой массив = нет cross-origin доступа.
@@ -52,6 +55,11 @@ export function getVaultToken(): string | null {
}
export async function initEnv(): Promise<void> {
// Fail-fast на отсутствующие критические env vars
if (!env.jwt.issuer || !env.jwt.audience) {
throw new Error('JWT_ISSUER and JWT_AUDIENCE must be explicitly set (no defaults)');
}
const { addr, roleId, secretId, mount, secretPath } = env.vault;
if (!addr || !roleId || !secretId) {
@@ -106,4 +114,11 @@ export async function initEnv(): Promise<void> {
tronApiKey: s('TRON_API_KEY') || env.tronApiKey,
jupiterApiKey: s('JUPITER_API_KEY') || env.jupiterApiKey,
};
// Re-validate after Vault load. Vault мог переписать iss/aud — если они теперь пустые
// или невалидные, fail-fast.
if (!env.jwt.issuer || !env.jwt.audience) {
throw new Error('JWT_ISSUER and JWT_AUDIENCE became empty after Vault load');
}
logger.info(`JWT validation: iss="${env.jwt.issuer}", aud="${env.jwt.audience}"`);
}