Files
2026-04-20 00:54:02 -04:00

91 lines
2.8 KiB
JavaScript

/**
* 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);
}
}