mirror of
https://github.com/documenso/documenso.git
synced 2026-10-03 02:04:40 +10:00
Selecting password auth failed with a generic "Unauthorized" for users who signed up via OAuth or passkey, with no way to set one. Detect the missing password and email the existing reset link from the signing dialog and security settings. Require a 2FA code and rate limit update-password.
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { UserAuthMethod } from '../types/user-auth-method';
|
|
import { deriveUserAuthMethods } from './user-auth-methods';
|
|
|
|
describe('deriveUserAuthMethods', () => {
|
|
it('returns an empty list when the user has no sign in methods', () => {
|
|
expect(deriveUserAuthMethods({ hasPassword: false, passkeyCount: 0, accountProviders: [] })).toEqual([]);
|
|
});
|
|
|
|
it('includes PASSWORD when the user has a password', () => {
|
|
expect(deriveUserAuthMethods({ hasPassword: true, passkeyCount: 0, accountProviders: [] })).toEqual([
|
|
UserAuthMethod.PASSWORD,
|
|
]);
|
|
});
|
|
|
|
it('includes PASSKEY when the user has at least one passkey', () => {
|
|
expect(deriveUserAuthMethods({ hasPassword: false, passkeyCount: 2, accountProviders: [] })).toEqual([
|
|
UserAuthMethod.PASSKEY,
|
|
]);
|
|
});
|
|
|
|
it('maps built in OAuth providers to their auth method', () => {
|
|
expect(
|
|
deriveUserAuthMethods({
|
|
hasPassword: false,
|
|
passkeyCount: 0,
|
|
accountProviders: ['google', 'microsoft', 'oidc'],
|
|
}),
|
|
).toEqual([UserAuthMethod.GOOGLE, UserAuthMethod.MICROSOFT, UserAuthMethod.OIDC]);
|
|
});
|
|
|
|
it('treats unknown providers as organisation SSO', () => {
|
|
expect(
|
|
deriveUserAuthMethods({
|
|
hasPassword: false,
|
|
passkeyCount: 0,
|
|
accountProviders: ['org_abc123'],
|
|
}),
|
|
).toEqual([UserAuthMethod.ORGANISATION_SSO]);
|
|
});
|
|
|
|
it('deduplicates repeated providers', () => {
|
|
expect(
|
|
deriveUserAuthMethods({
|
|
hasPassword: true,
|
|
passkeyCount: 0,
|
|
accountProviders: ['google', 'google', 'org_a', 'org_b'],
|
|
}),
|
|
).toEqual([UserAuthMethod.PASSWORD, UserAuthMethod.GOOGLE, UserAuthMethod.ORGANISATION_SSO]);
|
|
});
|
|
});
|