Workaround the sad state of base64 web APIs

This is necessary to make usernames/passwords with UTF-8 in them
work correctly.
This commit is contained in:
Simon Ser
2022-06-24 23:58:12 +02:00
parent 8e30806fec
commit 505a6fd5ab
2 changed files with 45 additions and 2 deletions

View File

@@ -1,4 +1,5 @@
import * as irc from "./irc.js";
import * as base64 from "./base64.js";
// Static list of capabilities that are always requested when supported by the
// server
@@ -460,11 +461,11 @@ export default class Client extends EventTarget {
let initialResp = null;
switch (mechanism) {
case "PLAIN":
let respStr = btoa("\0" + params.username + "\0" + params.password);
let respStr = base64.encode("\0" + params.username + "\0" + params.password);
initialResp = { command: "AUTHENTICATE", params: [respStr] };
break;
case "EXTERNAL":
initialResp = { command: "AUTHENTICATE", params: [btoa("")] };
initialResp = { command: "AUTHENTICATE", params: [base64.encode("")] };
break;
default:
throw new Error(`Unknown authentication mechanism '${mechanism}'`);