From 26334ec328ba33b7027c6b76cdee11f2520502d0 Mon Sep 17 00:00:00 2001 From: "Snow Lee (Sungwon)" Date: Fri, 31 Jul 2026 18:33:12 +0900 Subject: [PATCH] fix(webapp): auth submit buttons answer to button[type=submit] (BEA-53) (#103) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every server-rendered /auth form shipped a bare +

%s

`, html.EscapeString(req.lede), whoBlock(user, r.URL.RequestURI()), rows(req.detail()...), req.note)) } diff --git a/internal/webapp/authlocal.go b/internal/webapp/authlocal.go index e0c89f8..1964dcc 100644 --- a/internal/webapp/authlocal.go +++ b/internal/webapp/authlocal.go @@ -721,7 +721,7 @@ func (a *BuiltinAuth) pageLogin(w http.ResponseWriter, r *http.Request) { if a.Brand != "" { brand = `

` + html.EscapeString(a.Brand) + `

` } - authPage(w, "Sign in", brand+inviteBanner(next)+cliBanner(next)+fmt.Sprintf(`
%s%s%s
+ authPage(w, "Sign in", brand+inviteBanner(next)+cliBanner(next)+fmt.Sprintf(`
%s%s%s
%s

Forgot password?

`, url.QueryEscape(next), field("Email", "email", "email", r.FormValue("email")), @@ -787,7 +787,7 @@ func (a *BuiltinAuth) pageSignup(w http.ResponseWriter, r *http.Request) { if a.Brand != "" { brand = `

` + html.EscapeString(a.Brand) + `

` } - authPage(w, "Create account", brand+inviteBanner(next)+cliBanner(next)+fmt.Sprintf(`
%s%s%s%s%s
+ authPage(w, "Create account", brand+inviteBanner(next)+cliBanner(next)+fmt.Sprintf(`
%s%s%s%s%s

Have an account? Sign in

`, url.QueryEscape(next), field("Name", "name", "text", r.FormValue("name")), @@ -863,7 +863,7 @@ func (a *BuiltinAuth) pageReset(w http.ResponseWriter, r *http.Request) {

No email configured on this server? The link is in the server log.

`) return } - authPage(w, "Reset password", fmt.Sprintf(`
%s
+ authPage(w, "Reset password", fmt.Sprintf(`
%s

Back to sign in

`, field("Email", "email", "email", ""))) } @@ -900,7 +900,7 @@ func (a *BuiltinAuth) pageResetConfirm(w http.ResponseWriter, r *http.Request) { } func resetForm(token, msg string) string { - return fmt.Sprintf(`
%s%s
`, + return fmt.Sprintf(`
%s%s
`, html.EscapeString(token), newPasswordField("New password (min 8 chars)", "password"), msg) } diff --git a/internal/webapp/frontend/e2e/helpers.ts b/internal/webapp/frontend/e2e/helpers.ts index c67c5a1..165c278 100644 --- a/internal/webapp/frontend/e2e/helpers.ts +++ b/internal/webapp/frontend/e2e/helpers.ts @@ -26,7 +26,7 @@ export async function login(page: Page, email: string = ADMIN) { await page.waitForURL(/auth\/login/); await page.fill('input[name="email"]', email); await page.fill('input[name="password"]', PASSWORD); - await page.click("form button"); + await page.click("button[type=submit]"); await page.waitForSelector("#sidebar"); sessions.set(email, await page.context().cookies()); } diff --git a/internal/webapp/frontend/e2e/hub.spec.ts b/internal/webapp/frontend/e2e/hub.spec.ts index 68d2bee..22e0ce1 100644 --- a/internal/webapp/frontend/e2e/hub.spec.ts +++ b/internal/webapp/frontend/e2e/hub.spec.ts @@ -63,7 +63,7 @@ test("join link accepts an invite after sign-in", async ({ page, browser }) => { await p2.waitForURL(/auth\/login/); await p2.fill('input[name="email"]', MEMBER); await p2.fill('input[name="password"]', PASSWORD); - await p2.click("form button"); + await p2.click("button[type=submit]"); await expectToast(p2, "you joined"); await p2.waitForURL(/\/[0-9a-f-]{36}$/); // lands on the org's project await ctx.close();