Use userId to filter users in non-federated rooms when showing the InviteDialog (#30364)

* Use userId to filter users in non-federated rooms.

* a line

* another line

* Add getDomain to Jest test
This commit is contained in:
Will Hunt
2025-08-11 09:22:10 +01:00
committed by GitHub
parent d5a9b3f4c0
commit 700068a558
2 changed files with 11 additions and 7 deletions

View File

@@ -358,20 +358,22 @@ export default class InviteDialog extends React.PureComponent<Props, IInviteDial
}
this.profilesStore = SdkContextClass.instance.userProfilesStore;
const cli = MatrixClientPeg.safeGet();
const excludedIds = new Set([MatrixClientPeg.safeGet().getUserId()!]);
const excludedIds = new Set([cli.getSafeUserId()]);
if (isRoomInvite(props)) {
const room = MatrixClientPeg.safeGet().getRoom(props.roomId);
const isFederated = room?.currentState.getStateEvents(EventType.RoomCreate, "")?.getContent()["m.federate"];
const room = cli.getRoom(props.roomId);
if (!room) throw new Error("Room ID given to InviteDialog does not look like a room");
const isFederated = room?.currentState.getStateEvents(EventType.RoomCreate, "")?.getContent()["m.federate"];
room.getMembersWithMembership(KnownMembership.Invite).forEach((m) => excludedIds.add(m.userId));
room.getMembersWithMembership(KnownMembership.Join).forEach((m) => excludedIds.add(m.userId));
// add banned users, so we don't try to invite them
room.getMembersWithMembership(KnownMembership.Ban).forEach((m) => excludedIds.add(m.userId));
if (isFederated === false) {
const ourHomeserver = cli.getDomain();
if (isFederated === false && ourHomeserver) {
// If this room isn't federated, we must be on the same server.
// exclude users from external servers
const homeserver = props.roomId.split(":")[1];
this.excludeExternals(homeserver, excludedIds);
this.excludeExternals(ourHomeserver, excludedIds);
}
}
@@ -385,7 +387,7 @@ export default class InviteDialog extends React.PureComponent<Props, IInviteDial
numSuggestionsShown: INITIAL_ROOMS_SHOWN,
serverResultsMixin: [],
threepidResultsMixin: [],
canUseIdentityServer: !!MatrixClientPeg.safeGet().getIdentityServerUrl(),
canUseIdentityServer: !!cli.getIdentityServerUrl(),
tryingIdentityServer: false,
consultFirst: false,
dialPadValue: "",

View File

@@ -72,6 +72,7 @@ const expectNoPill = (value: string) => {
expect(getSearchField()).toHaveValue(value);
};
const serverDomain = "example.org";
const roomId = "!111111111111111111:example.org";
const aliceId = "@alice:example.org";
const aliceEmail = "foobar@email.com";
@@ -103,6 +104,7 @@ describe("InviteDialog", () => {
beforeEach(() => {
mockClient = getMockClientWithEventEmitter({
getDomain: jest.fn().mockReturnValue(serverDomain),
getUserId: jest.fn().mockReturnValue(bobId),
getSafeUserId: jest.fn().mockReturnValue(bobId),
isGuest: jest.fn().mockReturnValue(false),