blob: fa953642fa1a1b1c5b9ca333e95b88cf66404d3e [file] [log] [blame]
Copybara botbe50d492023-11-30 00:16:42 +01001/**
2 * convert RFC 1342-like base64 strings to array buffer
3 * @param {mixed} obj
4 * @returns {undefined}
5 */
6function recursiveBase64StrToArrayBuffer(obj) {
7 let prefix = '=?BINARY?B?';
8 let suffix = '?=';
9 if (typeof obj === 'object') {
10 for (let key in obj) {
11 if (typeof obj[key] === 'string') {
12 let str = obj[key];
13 if (str.substring(0, prefix.length) === prefix && str.substring(str.length - suffix.length) === suffix) {
14 str = str.substring(prefix.length, str.length - suffix.length);
15
16 let binary_string = window.atob(str);
17 let len = binary_string.length;
18 let bytes = new Uint8Array(len);
19 for (var i = 0; i < len; i++) {
20 bytes[i] = binary_string.charCodeAt(i);
21 }
22 obj[key] = bytes.buffer;
23 }
24 } else {
25 recursiveBase64StrToArrayBuffer(obj[key]);
26 }
27 }
28 }
29}
30
31/**
32 * Convert a ArrayBuffer to Base64
33 * @param {ArrayBuffer} buffer
34 * @returns {String}
35 */
36function arrayBufferToBase64(buffer) {
37 var binary = '';
38 var bytes = new Uint8Array(buffer);
39 var len = bytes.byteLength;
40 for (var i = 0; i < len; i++) {
41 binary += String.fromCharCode( bytes[ i ] );
42 }
43 return window.btoa(binary);
44}