fix(self-hosting): allow #0000 discriminator in tag change modal (#1193)

Co-authored-by: Hampus <[email protected]>
This commit is contained in:
dogbonewishandHampus authored and GitHub committed 2026-06-29 16:59:34 +01:00
1 parent e03be40531
commit 99eedf6d1e
5 files changed
+125 -3

No files matched your search

@@ -29,6 +29,7 @@ import * as UserCommands from '@app/features/user/commands/UserCommands';
import styles from '@app/features/user/components/modals/FluxerTagChangeModal.module.css';
import type {User} from '@app/features/user/models/User';
import {getFormattedDateTime} from '@app/features/user/utils/DateFormatting';
import {isVisionaryDiscriminator0000Blocked} from '@app/features/user/utils/FluxerTagDiscriminatorUtils';
import {UserPremiumTypes} from '@fluxer/constants/src/UserConstants';
import {msg} from '@lingui/core/macro';
import {Trans, useLingui} from '@lingui/react/macro';
@@ -315,7 +316,11 @@ export const FluxerTagChangeModal = observer(({user}: FluxerTagChangeModalProps)
data-flx="user.fluxer-tag-change-modal.input.set-value.text--3"
{...form.register('discriminator', {
validate: (value) =>
!isVisionary && value === '0000'
isVisionaryDiscriminator0000Blocked({
showPremium,
isVisionary,
discriminator: value,
})
? i18n._(THE_0000_TAG_IS_RESERVED_FOR_VISIONARY_SUBSCRIBERS_DESCRIPTOR)
: true,
})}
@@ -0,0 +1,46 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {describe, expect, it} from 'vitest';
import {isVisionaryDiscriminator0000Blocked} from './FluxerTagDiscriminatorUtils';
describe('isVisionaryDiscriminator0000Blocked', () => {
it('allows #0000 on self-hosted instances', () => {
expect(
isVisionaryDiscriminator0000Blocked({
showPremium: false,
isVisionary: false,
discriminator: '0000',
}),
).toBe(false);
});
it('blocks #0000 for non-visionary users on the main instance', () => {
expect(
isVisionaryDiscriminator0000Blocked({
showPremium: true,
isVisionary: false,
discriminator: '0000',
}),
).toBe(true);
});
it('allows #0000 for visionary users on the main instance', () => {
expect(
isVisionaryDiscriminator0000Blocked({
showPremium: true,
isVisionary: true,
discriminator: '0000',
}),
).toBe(false);
});
it('allows other discriminators on the main instance', () => {
expect(
isVisionaryDiscriminator0000Blocked({
showPremium: true,
isVisionary: false,
discriminator: '1337',
}),
).toBe(false);
});
});
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
export function isVisionaryDiscriminator0000Blocked(options: {
showPremium: boolean;
isVisionary: boolean;
discriminator: string;
}): boolean {
const {showPremium, isVisionary, discriminator} = options;
return showPremium && !isVisionary && discriminator === '0000';
}