mirror of https://github.com/dapr/quickstarts.git
89 lines
2.5 KiB
JavaScript
89 lines
2.5 KiB
JavaScript
import { createReadStream, createWriteStream } from "node:fs";
|
|
import { readFile, writeFile } from "node:fs/promises";
|
|
import { pipeline } from "node:stream/promises";
|
|
|
|
import { DaprClient, CommunicationProtocolEnum } from "@dapr/dapr";
|
|
|
|
const daprHost = process.env.DAPR_HOST ?? "127.0.0.1";
|
|
const daprPort = process.env.DAPR_GRPC_PORT ?? "50001";
|
|
|
|
const testFileName = "federico-di-dio-photography-Q4g0Q-eVVEg-unsplash.jpg";
|
|
|
|
async function start() {
|
|
const client = new DaprClient({
|
|
daprHost,
|
|
daprPort,
|
|
communicationProtocol: CommunicationProtocolEnum.GRPC,
|
|
});
|
|
|
|
// Encrypt and decrypt a message from a buffer
|
|
await encryptDecryptBuffer(client);
|
|
|
|
// Encrypt and decrypt a message using streams
|
|
await encryptDecryptStream(client);
|
|
}
|
|
|
|
async function encryptDecryptBuffer(client) {
|
|
// Message to encrypt
|
|
const plaintext = `The secret is "passw0rd"`
|
|
|
|
// First, encrypt the message
|
|
console.log("== Encrypting message using buffers");
|
|
|
|
const encrypted = await client.crypto.encrypt(plaintext, {
|
|
componentName: "localstorage",
|
|
keyName: "rsa-private-key.pem",
|
|
keyWrapAlgorithm: "RSA",
|
|
});
|
|
|
|
console.log("Encrypted the message, got", encrypted.length, "bytes");
|
|
|
|
// Decrypt the message
|
|
console.log("== Decrypting message using buffers");
|
|
const decrypted = await client.crypto.decrypt(encrypted, {
|
|
componentName: "localstorage",
|
|
});
|
|
|
|
console.log("Decrypted the message, got", decrypted.length, "bytes");
|
|
console.log(decrypted.toString("utf8"));
|
|
|
|
// The contents should be equal
|
|
if (decrypted.toString("utf8") != plaintext) {
|
|
throw new Error("Decrypted message does not match original message");
|
|
}
|
|
}
|
|
|
|
async function encryptDecryptStream(client) {
|
|
// First, encrypt the message
|
|
console.log("== Encrypting message using streams");
|
|
console.log("Encrypting", testFileName, "to encrypted.out");
|
|
|
|
await pipeline(
|
|
createReadStream(testFileName),
|
|
await client.crypto.encrypt({
|
|
componentName: "localstorage",
|
|
keyName: "symmetric-key-256",
|
|
keyWrapAlgorithm: "A256KW",
|
|
}),
|
|
createWriteStream("encrypted.out"),
|
|
);
|
|
|
|
console.log("Encrypted the message to encrypted.out");
|
|
|
|
// Decrypt the message
|
|
console.log("== Decrypting message using streams");
|
|
console.log("Decrypting encrypted.out to decrypted.out.jpg");
|
|
await pipeline(
|
|
createReadStream("encrypted.out"),
|
|
await client.crypto.decrypt({
|
|
componentName: "localstorage",
|
|
}),
|
|
createWriteStream("decrypted.out.jpg"),
|
|
);
|
|
|
|
console.log("Decrypted the message to decrypted.out.jpg");
|
|
}
|
|
|
|
// Start the code
|
|
await start();
|