mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 13:39:35 +00:00
75 lines
1.8 KiB
JavaScript
75 lines
1.8 KiB
JavaScript
import publicKeyInfical from "~/pages/api/auth/publicKeyInfisical";
|
|
import changeHerokuConfigVars from "~/pages/api/integrations/ChangeHerokuConfigVars";
|
|
|
|
const crypto = require("crypto");
|
|
const {
|
|
encryptSymmetric,
|
|
encryptAssymmetric,
|
|
} = require("../cryptography/crypto");
|
|
const nacl = require("tweetnacl");
|
|
nacl.util = require("tweetnacl-util");
|
|
|
|
const pushKeysIntegration = async ({ obj, integrationId }) => {
|
|
const PRIVATE_KEY = localStorage.getItem("PRIVATE_KEY");
|
|
|
|
let randomBytes = crypto.randomBytes(16).toString("hex");
|
|
|
|
const secrets = Object.keys(obj).map((key) => {
|
|
// encrypt key
|
|
const {
|
|
ciphertext: ciphertextKey,
|
|
iv: ivKey,
|
|
tag: tagKey,
|
|
} = encryptSymmetric({
|
|
plaintext: key,
|
|
key: randomBytes,
|
|
});
|
|
|
|
// encrypt value
|
|
const {
|
|
ciphertext: ciphertextValue,
|
|
iv: ivValue,
|
|
tag: tagValue,
|
|
} = encryptSymmetric({
|
|
plaintext: obj[key],
|
|
key: randomBytes,
|
|
});
|
|
|
|
const visibility = "shared";
|
|
|
|
return {
|
|
ciphertextKey,
|
|
ivKey,
|
|
tagKey,
|
|
hashKey: crypto.createHash("sha256").update(key).digest("hex"),
|
|
ciphertextValue,
|
|
ivValue,
|
|
tagValue,
|
|
hashValue: crypto.createHash("sha256").update(obj[key]).digest("hex"),
|
|
type: visibility,
|
|
};
|
|
});
|
|
|
|
// obtain public keys of all receivers (i.e. members in workspace)
|
|
let publicKeyInfisical = await publicKeyInfical();
|
|
|
|
publicKeyInfisical = (await publicKeyInfisical.json()).publicKey;
|
|
|
|
// assymmetrically encrypt key with each receiver public keys
|
|
|
|
const { ciphertext, nonce } = encryptAssymmetric({
|
|
plaintext: randomBytes,
|
|
publicKey: publicKeyInfisical,
|
|
privateKey: PRIVATE_KEY,
|
|
});
|
|
|
|
const key = {
|
|
encryptedKey: ciphertext,
|
|
nonce,
|
|
};
|
|
|
|
changeHerokuConfigVars({ integrationId, key, secrets });
|
|
};
|
|
|
|
export default pushKeysIntegration;
|