mirror of
https://github.com/bringout/oca-server-auth.git
synced 2026-04-19 10:32:02 +02:00
Initial commit: OCA Server Auth packages (29 packages)
This commit is contained in:
commit
3ed80311c4
1325 changed files with 127292 additions and 0 deletions
|
|
@ -0,0 +1,96 @@
|
|||
/** @odoo-module alias=vault.inbox **/
|
||||
// © 2021-2024 Florian Kantelberg - initOS GmbH
|
||||
// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
import utils from "vault.utils";
|
||||
|
||||
const data = {};
|
||||
let key = false;
|
||||
let iv = false;
|
||||
|
||||
const fields = [
|
||||
"key",
|
||||
"iv",
|
||||
"public",
|
||||
"encrypted",
|
||||
"secret",
|
||||
"encrypted_file",
|
||||
"filename",
|
||||
"secret_file",
|
||||
"submit",
|
||||
];
|
||||
|
||||
function toggle_required(element, value) {
|
||||
if (value) element.setAttribute("required", "required");
|
||||
else element.removeAttribute("required");
|
||||
}
|
||||
|
||||
// Encrypt the value and store it in the right input field
|
||||
async function encrypt_and_store(value, target) {
|
||||
if (!utils.supported()) return false;
|
||||
|
||||
// Find all the possible elements which are needed
|
||||
for (const id of fields) if (!data[id]) data[id] = document.getElementById(id);
|
||||
|
||||
// We expect a public key here otherwise we can't procceed
|
||||
if (!data.public.value) return;
|
||||
|
||||
const public_key = await utils.load_public_key(data.public.value);
|
||||
|
||||
// Create a new key if not already present
|
||||
if (!key) {
|
||||
key = await utils.generate_key();
|
||||
data.key.value = await utils.wrap(key, public_key);
|
||||
}
|
||||
|
||||
// Create a new IV if not already present
|
||||
if (!iv) {
|
||||
iv = utils.generate_iv_base64();
|
||||
data.iv.value = iv;
|
||||
}
|
||||
|
||||
// Encrypt the value symmetrically and store it in the field
|
||||
const val = await utils.sym_encrypt(key, value, iv);
|
||||
data[target].value = val;
|
||||
return Boolean(val);
|
||||
}
|
||||
|
||||
document.getElementById("secret").onchange = async function () {
|
||||
if (!utils.supported()) return false;
|
||||
|
||||
if (!this.value) return;
|
||||
|
||||
const required = await encrypt_and_store(this.value, "encrypted");
|
||||
toggle_required(data.secret, required);
|
||||
toggle_required(data.secret_file, !required);
|
||||
data.submit.removeAttribute("disabled");
|
||||
};
|
||||
|
||||
document.getElementById("secret_file").onchange = async function () {
|
||||
if (!utils.supported()) return false;
|
||||
|
||||
if (!this.files.length) return;
|
||||
|
||||
const file = this.files[0];
|
||||
const reader = new FileReader();
|
||||
let content = null;
|
||||
|
||||
const promise = new Promise((resolve) => {
|
||||
reader.onload = () => {
|
||||
if (reader.result.indexOf(",") >= 0) content = reader.result.split(",")[1];
|
||||
resolve();
|
||||
};
|
||||
});
|
||||
|
||||
reader.readAsDataURL(file);
|
||||
|
||||
await promise;
|
||||
|
||||
if (!content) return;
|
||||
|
||||
const required = await encrypt_and_store(content, "encrypted_file");
|
||||
toggle_required(data.secret, !required);
|
||||
toggle_required(data.secret_file, required);
|
||||
data.filename.value = file.name;
|
||||
data.submit.removeAttribute("disabled");
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue