This commit is contained in:
Miguel Villegas
2026-04-20 17:01:21 -05:00
parent 24cff1792f
commit 0e0803c85b
2 changed files with 31 additions and 3 deletions
+11 -2
View File
@@ -72,15 +72,24 @@ document.addEventListener('alpine:init', () => {
// Generate the raw license string // Generate the raw license string
const keyData = generateWinRARLicense(this.userName, this.licenseType); const keyData = generateWinRARLicense(this.userName, this.licenseType);
// Use Data URI instead of Blob to prevent UUID filenames on file:// protocol // Use Uint8Array and Blob to prevent double-encoding of UTF-8 characters by the browser
const bytes = new Uint8Array(keyData.length);
for (let i = 0; i < keyData.length; i++) {
bytes[i] = keyData.charCodeAt(i);
}
const blob = new Blob([bytes], { type: "application/octet-stream" });
const link = document.createElement("a"); const link = document.createElement("a");
link.setAttribute("href", "data:application/octet-stream;charset=utf-8," + encodeURIComponent(keyData)); link.setAttribute("href", URL.createObjectURL(blob));
link.setAttribute("download", "rarreg.key"); link.setAttribute("download", "rarreg.key");
// Programmatically trigger download // Programmatically trigger download
document.body.appendChild(link); document.body.appendChild(link);
link.click(); link.click();
document.body.removeChild(link); document.body.removeChild(link);
// Keep memory clean
setTimeout(() => URL.revokeObjectURL(link.href), 100);
this.showToast(this.t.successMsg); this.showToast(this.t.successMsg);
} catch (err) { } catch (err) {
+20 -1
View File
@@ -1,4 +1,23 @@
window.generateWinRARLicense = function(username, licenseType) { window.generateWinRARLicense = function(raw_username, raw_licenseType) {
function encodeForWinRAR(str) {
var hasNonAscii = false;
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) > 127) { hasNonAscii = true; break; }
}
if (hasNonAscii && !str.startsWith("utf8:")) {
str = "utf8:" + str;
}
var bytes = new TextEncoder().encode(str);
var res = "";
for (var i = 0; i < bytes.length; i++) {
res += String.fromCharCode(bytes[i]);
}
return res;
}
var username = encodeForWinRAR(raw_username);
var licenseType = encodeForWinRAR(raw_licenseType);
let $ = function f() { let $ = function f() {
let $ = new Uint32Array(32767), e = 1; let $ = new Uint32Array(32767), e = 1;
$[0] = 1; $[0] = 1;