pixies
PublikpasswordHeader.js
export const passwordHeaderNames = ["x-password", "password"];
const decode = (value) => {
try {
return decodeURIComponent(value);
} catch {
return null;
}
};
const asUtf8 = (value) => {
const decoded = Buffer.from(value, "latin1").toString("utf8");
return decoded.includes("�") ? null : decoded;
};
export const readPasswords = (req) => {
const [encoded, plain] = passwordHeaderNames.map(name => req.headers[name]);
return [encoded && decode(encoded), plain, plain && asUtf8(plain)]
.filter((candidate, index, all) => candidate && all.indexOf(candidate) === index);
};
export const writePasswordHeaders = (password) => {
if (!password || password === "none") return {};
const headers = {"x-password": encodeURIComponent(password)};
if (/^[\x00-\xFF]*$/.test(password)) headers.password = password;
return headers;
};