Files
overlord/Overlord-Server/src/security-settings.test.ts
T
KingKDot d26668df78 huge update.
fix issues with failing tests (I'm just gonna fucking assume directx isn't installed on the github actions machines).

Added MUCH better RBAC support and control

Fixed an issue when you have over a million clients RBAC would be slow asf

Add settings page with some basic settings and configs you can change.
2026-03-06 20:50:02 -06:00

60 lines
1.8 KiB
TypeScript

import { afterAll, beforeAll, describe, expect, test } from "bun:test";
import { getSessionTtlHours, getSessionTtlSeconds } from "./auth";
import { getConfig, updateSecurityConfig, type Config } from "./config";
import { isRateLimited, recordFailedAttempt, recordSuccessfulAttempt } from "./rateLimit";
let originalSecurity: Config["security"];
beforeAll(() => {
originalSecurity = { ...getConfig().security };
});
afterAll(async () => {
await updateSecurityConfig({ ...originalSecurity });
});
describe("security settings", () => {
test("session TTL helpers reflect configured policy", async () => {
await updateSecurityConfig({ sessionTtlHours: 3 });
expect(getSessionTtlHours()).toBe(3);
expect(getSessionTtlSeconds()).toBe(3 * 60 * 60);
});
test("rate limiting honors configured max attempts", async () => {
await updateSecurityConfig({
loginMaxAttempts: 2,
loginWindowMinutes: 5,
loginLockoutMinutes: 5,
});
const ip = `10.9.0.${Date.now()}`;
recordFailedAttempt(ip);
expect(isRateLimited(ip).limited).toBe(false);
recordFailedAttempt(ip);
const limited = isRateLimited(ip);
expect(limited.limited).toBe(true);
expect(limited.retryAfter).toBeGreaterThan(0);
recordSuccessfulAttempt(ip);
expect(isRateLimited(ip).limited).toBe(false);
});
test("security bounds are clamped", async () => {
const updated = await updateSecurityConfig({
sessionTtlHours: 100000,
loginMaxAttempts: 0,
loginWindowMinutes: 0,
loginLockoutMinutes: 0,
passwordMinLength: 2,
});
expect(updated.sessionTtlHours).toBe(24 * 30);
expect(updated.loginMaxAttempts).toBe(1);
expect(updated.loginWindowMinutes).toBe(1);
expect(updated.loginLockoutMinutes).toBe(1);
expect(updated.passwordMinLength).toBe(6);
});
});