Merging dev into main

This commit is contained in:
Tyler
2026-04-20 00:54:02 -04:00
committed by GitHub
parent 5b9a2b7a53
commit a9022bb5e3
42 changed files with 10305 additions and 0 deletions
+90
View File
@@ -0,0 +1,90 @@
/**
* File operations using the new Python backend APIs
*/
/**
* Encrypts a full file using the backend API and downloads the encrypted version.
*/
export async function encryptFile(fileInput, password) {
const file = fileInput.files[0];
if (!file) return;
const algorithm = document.getElementById("algorithm")?.value || "aes_cbc";
try {
const formData = new FormData();
formData.append('file', file);
formData.append('enc_password', password);
formData.append('algorithm', algorithm);
const response = await fetch('/api/encrypt', {
method: 'POST',
body: formData
});
if (!response.ok) {
const errorData = await response.json();
throw new Error(errorData.error || `HTTP error! status: ${response.status}`);
}
// Download the encrypted file
const blob = await response.blob();
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = `${file.name}.${algorithm}.encrypted`;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
} catch (error) {
alert("Error encrypting file: " + error.message);
}
}
/**
* Decrypts a file using the backend API and downloads the decrypted version.
*/
export async function decryptFile(fileInput, password) {
const file = fileInput.files[0];
if (!file) return;
try {
const formData = new FormData();
formData.append('file', file);
formData.append('enc_password', password);
const response = await fetch('/api/decrypt', {
method: 'POST',
body: formData
});
if (!response.ok) {
const errorData = await response.json();
throw new Error(errorData.error || `HTTP error! status: ${response.status}`);
}
// Download the decrypted file
const blob = await response.blob();
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
// Clean up filename - remove algorithm-specific extensions
let filename = file.name;
const algorithms = ["aes_cbc", "aes_gcm", "xchacha", "rsa_hybrid"];
for (const algo of algorithms) {
filename = filename.replace(`.${algo}.encrypted`, "");
}
filename = filename.replace(".encrypted", "");
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
} catch (error) {
alert("Error decrypting file: " + error.message);
}
}