fix(core): allow colons inside passwords (#29576)

Co-authored-by: Kit Langton <kit.langton@gmail.com>
This commit is contained in:
Filip 2026-05-28 19:17:35 +02:00 committed by GitHub
parent 202ec12056
commit 72d008bd5c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 18 additions and 4 deletions

View file

@ -63,11 +63,11 @@ function decodeCredential(input: string) {
Effect.match({
onFailure: emptyCredential,
onSuccess: (header) => {
const parts = header.split(":")
if (parts.length !== 2) return emptyCredential()
const separator = header.indexOf(":")
if (separator === -1) return emptyCredential()
return {
username: parts[0],
password: Redacted.make(parts[1]),
username: header.slice(0, separator),
password: Redacted.make(header.slice(separator + 1)),
}
},
}),

View file

@ -406,6 +406,20 @@ describe("HttpApi UI fallback", () => {
}),
)
it.live("accepts basic auth passwords containing colons for the web UI", () =>
Effect.gen(function* () {
const response = yield* uiApp({
password: "sec:ret",
username: "opencode",
disableEmbeddedWebUi: true,
}).request("/", {
headers: { authorization: `Basic ${btoa("opencode:sec:ret")}` },
})
expect(response.status).toBe(200)
}),
)
// Regression for #25698 (Ope): the browser fetches the PWA manifest and
// its icons via flows that don't carry app-managed credentials (the
// `<link rel="manifest">` request is not under page-auth control), so the