fix(guild): treat very high as high without phone verification (#3095)

This commit is contained in:
Hampus authored and GitHub committed 2026-10-01 20:33:02 +02:00
1 parent d691047884
commit 2df82b2b5e
28 files changed
+289 -18

No files matched your search

@@ -1,12 +1,14 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {createUserID} from '@app/api/BrandedTypes';
import {Config} from '@app/api/Config';
import {User} from '@app/api/models/User';
import {checkGuildVerificationWithResponse} from '@app/api/utils/GuildVerificationUtils';
import {GuildFeatures, GuildVerificationLevel} from '@fluxer/constants/src/GuildConstants';
import {ProfileFieldPrivacyFlags} from '@fluxer/constants/src/UserConstants';
import {GuildEmailVerificationRequiredError} from '@fluxer/errors/src/domains/auth/EmailVerificationRequiredError';
import {GuildPhoneVerificationRequiredError} from '@fluxer/errors/src/domains/auth/GuildPhoneVerificationRequiredError';
import {GuildVerificationRequiredError} from '@fluxer/errors/src/domains/guild/GuildVerificationRequiredError';
import type {GuildMemberResponse} from '@fluxer/schema/src/domains/guild/GuildMemberSchemas';
import type {GuildResponse} from '@fluxer/schema/src/domains/guild/GuildResponseSchemas';
import {describe, expect, it} from 'vitest';
@@ -178,4 +180,28 @@ describe('GuildVerificationUtils', () => {
}),
).toThrow(GuildPhoneVerificationRequiredError);
});
it('treats very high as high when phone verification is unavailable', () => {
const saved = Config.instance.phoneVerificationEnabled;
Config.instance.phoneVerificationEnabled = false;
try {
const guild = createGuildResponse([]);
guild.verification_level = GuildVerificationLevel.VERY_HIGH;
expect(() =>
checkGuildVerificationWithResponse({
user: createUser({emailVerified: true, hasVerifiedPhone: false}),
guild,
member,
}),
).not.toThrow();
expect(() =>
checkGuildVerificationWithResponse({
user: createUser({emailVerified: true, hasVerifiedPhone: false}),
guild,
member: createMemberResponse(new Date().toISOString()),
}),
).toThrow(GuildVerificationRequiredError);
} finally {
Config.instance.phoneVerificationEnabled = saved;
}
});
});
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {createRoleIDSet, createUserID, type RoleID, type UserID} from '@app/api/BrandedTypes';
import {Config} from '@app/api/Config';
import type {Guild} from '@app/api/models/Guild';
import type {GuildMember} from '@app/api/models/GuildMember';
import type {User} from '@app/api/models/User';
@@ -90,6 +91,7 @@ export function checkGuildVerificationWithGuildModel({
verificationLevel: getEffectiveGuildVerificationLevel(
guild.verificationLevel ?? GuildVerificationLevel.NONE,
guild.features.has(GuildFeatures.DISCOVERABLE),
Config.instance.phoneVerificationEnabled,
),
memberJoinedAt: member.joinedAt,
memberRoles: member.roleIds,
@@ -115,6 +117,7 @@ export function checkGuildVerificationWithResponse({
verificationLevel: getEffectiveGuildVerificationLevel(
guild.verification_level ?? GuildVerificationLevel.NONE,
(guild.features ?? []).includes(GuildFeatures.DISCOVERABLE),
Config.instance.phoneVerificationEnabled,
),
memberJoinedAt: member.joined_at,
memberRoles: createRoleIDSet(new Set(member.roles.map((roleId) => BigInt(roleId)))),