| /* (license-header) |
| * hores |
| * Copyright (c) 2023 Adrià Vilanova MartÃnez |
| * |
| * This program is free software: you can redistribute it and/or modify |
| * it under the terms of the GNU Affero General Public License as |
| * published by the Free Software Foundation, either version 3 of the |
| * License, or (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU Affero General Public License for more details. |
| * |
| * You should have received a copy of the GNU Affero General Public |
| * License along with this program. |
| * If not, see http://www.gnu.org/licenses/. |
| */ |
| /** |
| * convert RFC 1342-like base64 strings to array buffer |
| * @param {mixed} obj |
| * @returns {undefined} |
| */ |
| function recursiveBase64StrToArrayBuffer(obj) { |
| let prefix = '=?BINARY?B?'; |
| let suffix = '?='; |
| if (typeof obj === 'object') { |
| for (let key in obj) { |
| if (typeof obj[key] === 'string') { |
| let str = obj[key]; |
| if (str.substring(0, prefix.length) === prefix && str.substring(str.length - suffix.length) === suffix) { |
| str = str.substring(prefix.length, str.length - suffix.length); |
| |
| let binary_string = window.atob(str); |
| let len = binary_string.length; |
| let bytes = new Uint8Array(len); |
| for (var i = 0; i < len; i++) { |
| bytes[i] = binary_string.charCodeAt(i); |
| } |
| obj[key] = bytes.buffer; |
| } |
| } else { |
| recursiveBase64StrToArrayBuffer(obj[key]); |
| } |
| } |
| } |
| } |
| |
| /** |
| * Convert a ArrayBuffer to Base64 |
| * @param {ArrayBuffer} buffer |
| * @returns {String} |
| */ |
| function arrayBufferToBase64(buffer) { |
| var binary = ''; |
| var bytes = new Uint8Array(buffer); |
| var len = bytes.byteLength; |
| for (var i = 0; i < len; i++) { |
| binary += String.fromCharCode( bytes[ i ] ); |
| } |
| return window.btoa(binary); |
| } |