Introduce `enableUserSignups` runtime setting to allow administrators to control whether new accounts can be created. Update environment variable and documentation references to support this feature. UI elements for account creation are now conditionally rendered based on this flag. Signup attempts are blocked server-side when disabled, including email, OAuth, and anonymous upgrades. Add `assertUserSignupAllowed` utility for consistent enforcement and corresponding unit tests to verify policy behavior.
33 lines
1.4 KiB
TypeScript
33 lines
1.4 KiB
TypeScript
import { expect, test } from '@playwright/test';
|
|
|
|
import { RUNTIME_CONFIG_SCHEMA } from '../../src/lib/server/admin/settings';
|
|
import { assertUserSignupAllowed } from '../../src/lib/server/auth/signup-policy';
|
|
|
|
test.describe('enableUserSignups runtime config', () => {
|
|
test('defaults to enabled', () => {
|
|
expect(RUNTIME_CONFIG_SCHEMA.enableUserSignups.default).toBe(true);
|
|
});
|
|
|
|
test('parses first-boot env seed values', () => {
|
|
expect(RUNTIME_CONFIG_SCHEMA.enableUserSignups.parseEnv('true')).toBe(true);
|
|
expect(RUNTIME_CONFIG_SCHEMA.enableUserSignups.parseEnv('false')).toBe(false);
|
|
expect(RUNTIME_CONFIG_SCHEMA.enableUserSignups.parseEnv('1')).toBe(true);
|
|
expect(RUNTIME_CONFIG_SCHEMA.enableUserSignups.parseEnv('0')).toBe(false);
|
|
});
|
|
});
|
|
|
|
test.describe('signup policy enforcement', () => {
|
|
test('allows new non-anonymous users when signups are enabled', () => {
|
|
expect(() => assertUserSignupAllowed({ enableUserSignups: true, isAnonymous: false })).not.toThrow();
|
|
});
|
|
|
|
test('blocks new non-anonymous users when signups are disabled', () => {
|
|
expect(() => assertUserSignupAllowed({ enableUserSignups: false, isAnonymous: false })).toThrow(
|
|
/sign-ups are disabled/i,
|
|
);
|
|
});
|
|
|
|
test('does not block anonymous-session user creation when signups are disabled', () => {
|
|
expect(() => assertUserSignupAllowed({ enableUserSignups: false, isAnonymous: true })).not.toThrow();
|
|
});
|
|
});
|