From 06117695bc7ba6ecca313e4eb3683488dec071cd Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 5 Jul 2024 10:51:21 +0100 Subject: [PATCH] Fix close button on forgot password flow (#12732) * Fix close button on forgot password flow The 'x' had escaped out the right of the button for some reason * Add test that actually opens the dialog in question * Actually screenshot the right thing * Unnecessary screenshot --- .../forgot-password/forgot-password.spec.ts | 77 ++++++++++++++++++ playwright/e2e/login/login.spec.ts | 14 +--- playwright/e2e/utils.ts | 13 ++- playwright/plugins/homeserver/index.ts | 9 ++ .../plugins/homeserver/synapse/index.ts | 43 +++++++++- .../forgot-password-linux.png | Bin 0 -> 17851 bytes .../forgot-password-verify-email-linux.png | Bin 0 -> 22624 bytes res/css/_common.pcss | 2 + 8 files changed, 141 insertions(+), 17 deletions(-) create mode 100644 playwright/e2e/forgot-password/forgot-password.spec.ts create mode 100644 playwright/snapshots/forgot-password/forgot-password.spec.ts/forgot-password-linux.png create mode 100644 playwright/snapshots/forgot-password/forgot-password.spec.ts/forgot-password-verify-email-linux.png diff --git a/playwright/e2e/forgot-password/forgot-password.spec.ts b/playwright/e2e/forgot-password/forgot-password.spec.ts new file mode 100644 index 0000000000..260242ebc6 --- /dev/null +++ b/playwright/e2e/forgot-password/forgot-password.spec.ts @@ -0,0 +1,77 @@ +/* +Copyright 2024 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { expect, test } from "../../element-web-test"; +import { selectHomeserver } from "../utils"; + +const username = "user1234"; +// this has to be password-like enough to please zxcvbn. Needless to say it's just from pwgen. +const password = "oETo7MPf0o"; +const email = "user@nowhere.dummy"; + +test.describe("Forgot Password", () => { + test.use({ + startHomeserverOpts: ({ mailhog }, use) => + use({ + template: "email", + variables: { + SMTP_HOST: "host.containers.internal", + SMTP_PORT: mailhog.instance.smtpPort, + }, + }), + }); + + test("renders properly", async ({ page, homeserver }) => { + await page.goto("/"); + + await page.getByRole("link", { name: "Sign in" }).click(); + + // need to select a homeserver at this stage, before entering the forgot password flow + await selectHomeserver(page, homeserver.config.baseUrl); + + await page.getByRole("button", { name: "Forgot password?" }).click(); + + await expect(page.getByRole("main")).toMatchScreenshot("forgot-password.png"); + }); + + test("renders email verification dialog properly", async ({ page, homeserver }) => { + const user = await homeserver.registerUser(username, password); + + await homeserver.setThreepid(user.userId, "email", email); + + await page.goto("/"); + + await page.getByRole("link", { name: "Sign in" }).click(); + await selectHomeserver(page, homeserver.config.baseUrl); + + await page.getByRole("button", { name: "Forgot password?" }).click(); + + await page.getByRole("textbox", { name: "Email address" }).fill(email); + + await page.getByRole("button", { name: "Send email" }).click(); + + await page.getByRole("button", { name: "Next" }).click(); + + await page.getByRole("textbox", { name: "New Password", exact: true }).fill(password); + await page.getByRole("textbox", { name: "Confirm new password", exact: true }).fill(password); + + await page.getByRole("button", { name: "Reset password" }).click(); + + await expect(page.getByRole("button", { name: "Resend" })).toBeInViewport(); + + await expect(page.locator(".mx_Dialog")).toMatchScreenshot("forgot-password-verify-email.png"); + }); +}); diff --git a/playwright/e2e/login/login.spec.ts b/playwright/e2e/login/login.spec.ts index b1b02c0a9a..fc8de6499e 100644 --- a/playwright/e2e/login/login.spec.ts +++ b/playwright/e2e/login/login.spec.ts @@ -14,11 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Page } from "@playwright/test"; - import { expect, test } from "../../element-web-test"; import { doTokenRegistration } from "./utils"; import { isDendrite } from "../../plugins/homeserver/dendrite"; +import { selectHomeserver } from "../utils"; test.describe("Login", () => { test.describe("Password login", () => { @@ -85,17 +84,6 @@ test.describe("Login", () => { await expect(page).toHaveURL(/\/#\/room\/!room:id$/); await expect(page.getByRole("button", { name: "Join the discussion" })).toBeVisible(); }); - - async function selectHomeserver(page: Page, homeserverUrl: string) { - await page.getByRole("button", { name: "Edit" }).click(); - await page.getByRole("textbox", { name: "Other homeserver" }).fill(homeserverUrl); - await page.getByRole("button", { name: "Continue", exact: true }).click(); - // wait for the dialog to go away - await expect(page.locator(".mx_ServerPickerDialog")).toHaveCount(0); - - await expect(page.locator(".mx_Spinner")).toHaveCount(0); - await expect(page.locator(".mx_ServerPicker_server")).toHaveText(homeserverUrl); - } }); // tests for old-style SSO login, in which we exchange tokens with Synapse, and Synapse talks to an auth server diff --git a/playwright/e2e/utils.ts b/playwright/e2e/utils.ts index 30aff64dd8..e7587c7dfb 100644 --- a/playwright/e2e/utils.ts +++ b/playwright/e2e/utils.ts @@ -17,8 +17,8 @@ limitations under the License. */ import { uniqueId } from "lodash"; +import { expect, type Page } from "@playwright/test"; -import type { Page } from "@playwright/test"; import type { ClientEvent, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; import { Client } from "../pages/client"; @@ -63,4 +63,15 @@ export async function waitForRoom( ); } +export async function selectHomeserver(page: Page, homeserverUrl: string) { + await page.getByRole("button", { name: "Edit" }).click(); + await page.getByRole("textbox", { name: "Other homeserver" }).fill(homeserverUrl); + await page.getByRole("button", { name: "Continue", exact: true }).click(); + // wait for the dialog to go away + await expect(page.locator(".mx_ServerPickerDialog")).toHaveCount(0); + + await expect(page.locator(".mx_Spinner")).toHaveCount(0); + await expect(page.locator(".mx_ServerPicker_server")).toHaveText(homeserverUrl); +} + export const CommandOrControl = process.platform === "darwin" ? "Meta" : "Control"; diff --git a/playwright/plugins/homeserver/index.ts b/playwright/plugins/homeserver/index.ts index 1e0cfb3b39..b14ba70082 100644 --- a/playwright/plugins/homeserver/index.ts +++ b/playwright/plugins/homeserver/index.ts @@ -39,6 +39,15 @@ export interface HomeserverInstance { * @param password login password */ loginUser(userId: string, password: string): Promise; + + /** + * Sets a third party identifier for the given user. This only supports setting a single 3pid and will + * replace any others. + * @param userId The full ID of the user to edit (as returned from registerUser) + * @param medium The medium of the 3pid to set + * @param address The address of the 3pid to set + */ + setThreepid(userId: string, medium: string, address: string): Promise; } export interface StartHomeserverOpts { diff --git a/playwright/plugins/homeserver/synapse/index.ts b/playwright/plugins/homeserver/synapse/index.ts index d94453c017..23634c2b60 100644 --- a/playwright/plugins/homeserver/synapse/index.ts +++ b/playwright/plugins/homeserver/synapse/index.ts @@ -94,6 +94,8 @@ export class Synapse implements Homeserver, HomeserverInstance { protected docker: Docker = new Docker(); public config: HomeserverConfig & { serverId: string }; + private adminToken?: string; + public constructor(private readonly request: APIRequestContext) {} /** @@ -152,12 +154,17 @@ export class Synapse implements Homeserver, HomeserverInstance { return [path.join(synapseLogsPath, "stdout.log"), path.join(synapseLogsPath, "stderr.log")]; } - public async registerUser(username: string, password: string, displayName?: string): Promise { + private async registerUserInternal( + username: string, + password: string, + displayName?: string, + admin = false, + ): Promise { const url = `${this.config.baseUrl}/_synapse/admin/v1/register`; const { nonce } = await this.request.get(url).then((r) => r.json()); const mac = crypto .createHmac("sha1", this.config.registrationSecret) - .update(`${nonce}\0${username}\0${password}\0notadmin`) + .update(`${nonce}\0${username}\0${password}\0${admin ? "" : "not"}admin`) .digest("hex"); const res = await this.request.post(url, { data: { @@ -165,7 +172,7 @@ export class Synapse implements Homeserver, HomeserverInstance { username, password, mac, - admin: false, + admin, displayname: displayName, }, }); @@ -185,6 +192,10 @@ export class Synapse implements Homeserver, HomeserverInstance { }; } + public registerUser(username: string, password: string, displayName?: string): Promise { + return this.registerUserInternal(username, password, displayName, false); + } + public async loginUser(userId: string, password: string): Promise { const url = `${this.config.baseUrl}/_matrix/client/v3/login`; const res = await this.request.post(url, { @@ -207,4 +218,30 @@ export class Synapse implements Homeserver, HomeserverInstance { homeServer: json.home_server, }; } + + public async setThreepid(userId: string, medium: string, address: string): Promise { + if (this.adminToken === undefined) { + const result = await this.registerUserInternal("admin", "totalyinsecureadminpassword", undefined, true); + this.adminToken = result.accessToken; + } + + const url = `${this.config.baseUrl}/_synapse/admin/v2/users/${userId}`; + const res = await this.request.put(url, { + data: { + threepids: [ + { + medium, + address, + }, + ], + }, + headers: { + Authorization: `Bearer ${this.adminToken}`, + }, + }); + + if (!res.ok()) { + throw await res.json(); + } + } } diff --git a/playwright/snapshots/forgot-password/forgot-password.spec.ts/forgot-password-linux.png b/playwright/snapshots/forgot-password/forgot-password.spec.ts/forgot-password-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..891f024bf823661d7edcc62606ada92993ae79dd GIT binary patch literal 17851 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