diff --git a/fluxer_api/src/api/rpc/RpcService.ts b/fluxer_api/src/api/rpc/RpcService.ts index 965371260..129cb21ce 100644 --- a/fluxer_api/src/api/rpc/RpcService.ts +++ b/fluxer_api/src/api/rpc/RpcService.ts @@ -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 && { diff --git a/fluxer_api/src/api/user/services/UserAccountSettingsService.ts b/fluxer_api/src/api/user/services/UserAccountSettingsService.ts index b9cde998f..28c6b0351 100644 --- a/fluxer_api/src/api/user/services/UserAccountSettingsService.ts +++ b/fluxer_api/src/api/user/services/UserAccountSettingsService.ts @@ -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; diff --git a/fluxer_api/src/api/user/tests/UserSettingsSensitiveContentFilter.test.ts b/fluxer_api/src/api/user/tests/UserSettingsSensitiveContentFilter.test.ts index 617913e6c..2595ada60 100644 --- a/fluxer_api/src/api/user/tests/UserSettingsSensitiveContentFilter.test.ts +++ b/fluxer_api/src/api/user/tests/UserSettingsSensitiveContentFilter.test.ts @@ -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)