fix(api): stop treating users without a birth date as minors (#3040)

This commit is contained in:
Hampus
2026-09-29 18:27:15 +02:00
committed by GitHub
parent 2636e9cc13
commit e98b77a54a
3 changed files with 23 additions and 4 deletions
+2 -2
View File
@@ -78,7 +78,7 @@ import {
mapUserToPrivateResponse,
mapWebAuthnCredentialToResponse,
} from '@app/api/user/UserMappers';
import {isUserAdult} from '@app/api/utils/AgeUtils';
import {canUserAccessNsfwContent} from '@app/api/utils/AgeUtils';
import {deriveDominantAvatarColor} from '@app/api/utils/AvatarColorUtils';
import {calculateDistance, parseCoordinate} from '@app/api/utils/GeoUtils';
import {lookupGeoip} from '@app/api/utils/IpUtils';
@@ -1564,7 +1564,7 @@ export class RpcService {
const needsIncomingCallRepair = settings.incomingCallFlags === 0;
const needsGroupDmRepair = settings.groupDmAddPermissionFlags === 0;
if (needsIncomingCallRepair || needsGroupDmRepair) {
const isAdult = isUserAdult(user.dateOfBirth);
const isAdult = canUserAccessNsfwContent({isBot: false, dateOfBirth: user.dateOfBirth});
const updatedRow = {
...settings.toRow(),
...(needsIncomingCallRepair && {
@@ -25,7 +25,7 @@ import type {UserAccountUpdatePropagator} from '@app/api/user/services/UserAccou
import {getCachedUserPartialResponse} from '@app/api/user/UserCacheHelpers';
import {mapRelationshipToResponse} from '@app/api/user/UserMappers';
import {dedupeGuildFolders} from '@app/api/user/utils/GuildFolderUtils';
import {isUserAdult} from '@app/api/utils/AgeUtils';
import {canUserAccessNsfwContent} from '@app/api/utils/AgeUtils';
import {
DEFAULT_GUILD_FOLDER_ICON,
GroupDmAddPermissionFlags,
@@ -200,7 +200,7 @@ export class UserAccountSettingsService {
if (data.default_hide_muted_channels !== undefined) {
updatedRowData.default_hide_muted_channels = data.default_hide_muted_channels;
}
const userIsAdult = isUserAdult(dateOfBirth);
const userIsAdult = canUserAccessNsfwContent({isBot: false, dateOfBirth});
if (userIsAdult) {
if (data.sensitive_content_friend_dm_filter !== undefined) {
updatedRowData.sensitive_content_friend_dm_filter = data.sensitive_content_friend_dm_filter;
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {createTestAccount} from '@app/api/auth/tests/AuthTestUtils';
import {getInstanceConfigRepository} from '@app/api/middleware/ServiceSingletons';
import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness';
import {HTTP_STATUS} from '@app/api/test/TestConstants';
import {createBuilder} from '@app/api/test/TestRequestBuilder';
@@ -99,6 +100,24 @@ describe('User Settings - Sensitive Content Filters', () => {
expect(response.errors[0]?.path).toBe('sensitive_content_friend_dm_filter');
expect(response.errors[0]?.code).toBe(ValidationErrorCodes.AGE_RESTRICTED);
});
test('allows an account without a birth date to relax every filter when none is collected', async () => {
const repository = getInstanceConfigRepository();
const previous = (await repository.getAppPublicConfig()).registration.collect_date_of_birth;
await repository.setAppPublicConfig({registration: {collect_date_of_birth: false}});
try {
const account = await createTestAccount(harness);
const {json} = await updateUserSettings(harness, account.token, {
sensitive_content_friend_dm_filter: SensitiveMediaFilterLevel.SHOW,
sensitive_content_non_friend_dm_filter: SensitiveMediaFilterLevel.SHOW,
sensitive_content_guild_filter: SensitiveMediaFilterLevel.SHOW,
});
expect(json.sensitive_content_friend_dm_filter).toBe(SensitiveMediaFilterLevel.SHOW);
expect(json.sensitive_content_non_friend_dm_filter).toBe(SensitiveMediaFilterLevel.SHOW);
expect(json.sensitive_content_guild_filter).toBe(SensitiveMediaFilterLevel.SHOW);
} finally {
await repository.setAppPublicConfig({registration: {collect_date_of_birth: previous}});
}
});
test('rejects negative value', async () => {
const account = await createTestAccount(harness);
await createBuilder(harness, account.token)