From 4316ebae292587cfd5ad9dbde72b42bc1483f152 Mon Sep 17 00:00:00 2001 From: Slavi Pantaleev Date: Tue, 25 Jul 2023 10:57:26 +0300 Subject: [PATCH] Do not show "Forget room" button in Room View header for guest users (#10898) * Do not show "Forget room" button in Room View header for guest users You can observe this problem by opening this in a new private tab: https://app.element.io/#/room/#matrix:matrix.org This is a public room with guest access enabled and Element will use a guest account to display it. Showing a "Forget room" button in the header for guest users is pointless. Clicking on it leads to a `M_GUEST_ACCESS_FORBIDDEN` error. Signed-off-by: Slavi Pantaleev * Iterate --------- Signed-off-by: Slavi Pantaleev Co-authored-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/RoomView.tsx | 6 +++- test/components/structures/RoomView-test.tsx | 29 ++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/components/structures/RoomView.tsx b/src/components/structures/RoomView.tsx index 2a67a5445c..0002435256 100644 --- a/src/components/structures/RoomView.tsx +++ b/src/components/structures/RoomView.tsx @@ -2449,6 +2449,10 @@ export class RoomView extends React.Component { viewingCall = true; } + const myMember = this.state.room!.getMember(this.context.client!.getSafeUserId()); + const showForgetButton = + !this.context.client.isGuest() && (["leave", "ban"].includes(myMembership) || myMember?.isKicked()); + return (
@@ -2463,7 +2467,7 @@ export class RoomView extends React.Component { inRoom={myMembership === "join"} onSearchClick={onSearchClick} onInviteClick={onInviteClick} - onForgetClick={myMembership === "leave" ? onForgetClick : null} + onForgetClick={showForgetButton ? onForgetClick : null} e2eStatus={this.state.e2eStatus} onAppsClick={this.state.hasPinnedWidgets ? onAppsClick : null} appsShown={this.state.showApps} diff --git a/test/components/structures/RoomView-test.tsx b/test/components/structures/RoomView-test.tsx index 1f3b0b955e..aab93eefa8 100644 --- a/test/components/structures/RoomView-test.tsx +++ b/test/components/structures/RoomView-test.tsx @@ -515,4 +515,33 @@ describe("RoomView", () => { await findByText("Are you sure you're at the right place?"); expect(asFragment()).toMatchSnapshot(); }); + + describe("Peeking", () => { + beforeEach(() => { + // Make room peekable + room.currentState.setStateEvents([ + new MatrixEvent({ + type: "m.room.history_visibility", + state_key: "", + content: { + history_visibility: "world_readable", + }, + room_id: room.roomId, + }), + ]); + }); + + it("should show forget room button for non-guests", async () => { + mocked(cli.isGuest).mockReturnValue(false); + await mountRoomView(); + + expect(screen.getByLabelText("Forget room")).toBeInTheDocument(); + }); + + it("should not show forget room button for guests", async () => { + mocked(cli.isGuest).mockReturnValue(true); + await mountRoomView(); + expect(screen.queryByLabelText("Forget room")).not.toBeInTheDocument(); + }); + }); });