diff --git a/src/lib/server/local-auth.ts b/src/lib/server/local-auth.ts index 20f8093..4cd47f8 100644 --- a/src/lib/server/local-auth.ts +++ b/src/lib/server/local-auth.ts @@ -22,6 +22,10 @@ const attemptsByIdentifier = new Map(); const attemptsByIp = new Map(); let dummyHashPromise: Promise | null = null; +const getEnvValue = (key: keyof typeof env): string | undefined => { + return process.env[key] ?? env[key]; +}; + const getNumberEnv = (value: string | undefined, fallback: number): number => { const parsed = Number.parseInt(value ?? '', 10); return Number.isFinite(parsed) ? parsed : fallback; @@ -29,10 +33,10 @@ const getNumberEnv = (value: string | undefined, fallback: number): number => { const getLocalAuthConfig = () => { return { - enabled: env.LOCAL_AUTH_ENABLED === 'true', - maxAttempts: getNumberEnv(env.LOCAL_AUTH_MAX_ATTEMPTS, 5), - windowMs: getNumberEnv(env.LOCAL_AUTH_WINDOW_SECONDS, 900) * 1000, - lockoutMs: getNumberEnv(env.LOCAL_AUTH_LOCKOUT_SECONDS, 900) * 1000 + enabled: getEnvValue('LOCAL_AUTH_ENABLED') === 'true', + maxAttempts: getNumberEnv(getEnvValue('LOCAL_AUTH_MAX_ATTEMPTS'), 5), + windowMs: getNumberEnv(getEnvValue('LOCAL_AUTH_WINDOW_SECONDS'), 900) * 1000, + lockoutMs: getNumberEnv(getEnvValue('LOCAL_AUTH_LOCKOUT_SECONDS'), 900) * 1000 }; }; @@ -111,7 +115,11 @@ export async function verifyLocalCredentials( const ipKey = normalizeIp(ipAddress); const now = Date.now(); - const identifierState = getEffectiveState(attemptsByIdentifier.get(identifierKey), now, config.windowMs); + const identifierState = getEffectiveState( + attemptsByIdentifier.get(identifierKey), + now, + config.windowMs + ); const ipState = getEffectiveState(attemptsByIp.get(ipKey), now, config.windowMs); const locked = isLocked(identifierState, now) || isLocked(ipState, now); diff --git a/src/routes/login/+page.server.ts b/src/routes/login/+page.server.ts index 74acf5b..f846970 100644 --- a/src/routes/login/+page.server.ts +++ b/src/routes/login/+page.server.ts @@ -8,10 +8,13 @@ const resolveErrorMessage = (value: string | null): string | null => { }; export const load: PageServerLoad = async ({ url }) => { + const authUrl = process.env.AUTH_URL ?? env.AUTH_URL ?? ''; + const localAuthEnabled = (process.env.LOCAL_AUTH_ENABLED ?? env.LOCAL_AUTH_ENABLED) === 'true'; + return { - signinUrl: `${env.AUTH_URL}/signin/synology`, - localSigninUrl: `${env.AUTH_URL}/signin/local`, - localAuthEnabled: env.LOCAL_AUTH_ENABLED === 'true', + signinUrl: `${authUrl}/signin/synology`, + localSigninUrl: `${authUrl}/signin/local`, + localAuthEnabled, error: resolveErrorMessage(url.searchParams.get('error')) }; };