Skip to content

Commit 3cbb7da

Browse files
fix: missing validation for external members (RocketChat#37050)
1 parent 90a1759 commit 3cbb7da

4 files changed

Lines changed: 31 additions & 2 deletions

File tree

.changeset/rotten-dolphins-sort.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@rocket.chat/i18n': patch
3+
'@rocket.chat/meteor': patch
4+
---
5+
6+
Adds a validation to external users when creating a channel that is not federated

apps/meteor/client/NavBarV2/NavBarPagesGroup/actions/CreateChannelModal.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ const getFederationHintKey = (licenseModule: ReturnType<typeof useHasLicenseModu
6060
return 'Federation_Matrix_Federated_Description';
6161
};
6262

63+
const hasExternalMembers = (members: string[]): boolean => members.some((member) => member.startsWith('@'));
64+
6365
const CreateChannelModal = ({ teamId = '', onClose, reload }: CreateChannelModalProps) => {
6466
const t = useTranslation();
6567
const canSetReadOnly = usePermissionWithScopedRoles('set-readonly', ['owner']);
@@ -237,10 +239,19 @@ const CreateChannelModal = ({ teamId = '', onClose, reload }: CreateChannelModal
237239
<Controller
238240
control={control}
239241
name='members'
242+
rules={{
243+
validate: (members) =>
244+
!federated && hasExternalMembers(members) ? t('You_cannot_add_external_users_to_non_federated_room') : true,
245+
}}
240246
render={({ field: { onChange, value } }): ReactElement => (
241247
<UserAutoCompleteMultipleFederated id={addMembersId} value={value} onChange={onChange} placeholder={t('Add_people')} />
242248
)}
243249
/>
250+
{errors.members && (
251+
<FieldError aria-live='assertive' id={`${addMembersId}-error`}>
252+
{errors.members.message}
253+
</FieldError>
254+
)}
244255
</Field>
245256
<Field>
246257
<FieldRow>

apps/meteor/client/sidebar/header/CreateChannel/CreateChannelModal.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ const getFederationHintKey = (licenseModule: ReturnType<typeof useHasLicenseModu
6262
return 'Federation_Matrix_Federated_Description';
6363
};
6464

65+
const hasExternalMembers = (members: string[]): boolean => members.some((member) => member.startsWith('@'));
66+
6567
const CreateChannelModal = ({ teamId = '', mainRoom, onClose, reload }: CreateChannelModalProps): ReactElement => {
6668
const t = useTranslation();
6769
const canSetReadOnly = usePermissionWithScopedRoles('set-readonly', ['owner']);
@@ -241,10 +243,19 @@ const CreateChannelModal = ({ teamId = '', mainRoom, onClose, reload }: CreateCh
241243
<Controller
242244
control={control}
243245
name='members'
246+
rules={{
247+
validate: (members) =>
248+
!federated && hasExternalMembers(members) ? t('You_cannot_add_external_users_to_non_federated_room') : true,
249+
}}
244250
render={({ field: { onChange, value } }): ReactElement => (
245251
<UserAutoCompleteMultipleFederated id={addMembersId} value={value} onChange={onChange} placeholder={t('Add_people')} />
246252
)}
247253
/>
254+
{errors.members && (
255+
<FieldError aria-live='assertive' id={`${addMembersId}-error`}>
256+
{errors.members.message}
257+
</FieldError>
258+
)}
248259
</Field>
249260
<Field>
250261
<FieldRow>

packages/i18n/src/locales/en.i18n.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7034,5 +7034,6 @@
70347034
"__usernames__and__count__more_joined": "{{usernames}} and {{count}} more joined",
70357035
"__usernames__joined": "{{usernames}} joined",
70367036
"__usersCount__joined": "{{count}} joined",
7037-
"__usersCount__people_will_be_invited": "{{usersCount}} people will be invited"
7038-
}
7037+
"__usersCount__people_will_be_invited": "{{usersCount}} people will be invited",
7038+
"You_cannot_add_external_users_to_non_federated_room": "You cannot add external users to a non-federated room"
7039+
}

0 commit comments

Comments
 (0)