mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
1.2 KiB
32 lines
1.2 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.base64URLStringToBuffer = base64URLStringToBuffer;
|
|
/**
|
|
* Convert from a Base64URL-encoded string to an Array Buffer. Best used when converting a
|
|
* credential ID from a JSON string to an ArrayBuffer, like in allowCredentials or
|
|
* excludeCredentials
|
|
*
|
|
* Helper method to compliment `bufferToBase64URLString`
|
|
*/
|
|
function base64URLStringToBuffer(base64URLString) {
|
|
// Convert from Base64URL to Base64
|
|
const base64 = base64URLString.replace(/-/g, '+').replace(/_/g, '/');
|
|
/**
|
|
* Pad with '=' until it's a multiple of four
|
|
* (4 - (85 % 4 = 1) = 3) % 4 = 3 padding
|
|
* (4 - (86 % 4 = 2) = 2) % 4 = 2 padding
|
|
* (4 - (87 % 4 = 3) = 1) % 4 = 1 padding
|
|
* (4 - (88 % 4 = 0) = 4) % 4 = 0 padding
|
|
*/
|
|
const padLength = (4 - (base64.length % 4)) % 4;
|
|
const padded = base64.padEnd(base64.length + padLength, '=');
|
|
// Convert to a binary string
|
|
const binary = atob(padded);
|
|
// Convert binary string to buffer
|
|
const buffer = new ArrayBuffer(binary.length);
|
|
const bytes = new Uint8Array(buffer);
|
|
for (let i = 0; i < binary.length; i++) {
|
|
bytes[i] = binary.charCodeAt(i);
|
|
}
|
|
return buffer;
|
|
}
|
|
|