From dce72511c1cd70b303e138ff426e27eddf58b275 Mon Sep 17 00:00:00 2001 From: Jason Sherman Date: Thu, 22 Aug 2024 13:24:09 -0700 Subject: [PATCH] tweak ux when config is new Signed-off-by: Jason Sherman --- .../designer/settings/FormEventStreamSettings.vue | 2 +- app/src/forms/form/encryptionKey/service.js | 2 ++ app/src/forms/form/eventStreamConfig/service.js | 1 + event-stream-service/package-lock.json | 9 +++++++-- event-stream-service/package.json | 1 + event-stream-service/pullConsumer.js | 14 +++++++++++++- 6 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/frontend/src/components/designer/settings/FormEventStreamSettings.vue b/app/frontend/src/components/designer/settings/FormEventStreamSettings.vue index a3e2bf2ef..0ec6b9a54 100644 --- a/app/frontend/src/components/designer/settings/FormEventStreamSettings.vue +++ b/app/frontend/src/components/designer/settings/FormEventStreamSettings.vue @@ -238,7 +238,7 @@ defineExpose({ - + {{ $t('trans.formSettings.eventStreamUpdatedBy') }}: diff --git a/app/src/forms/form/encryptionKey/service.js b/app/src/forms/form/encryptionKey/service.js index f72719aa9..0470ca83d 100644 --- a/app/src/forms/form/encryptionKey/service.js +++ b/app/src/forms/form/encryptionKey/service.js @@ -30,6 +30,7 @@ const service = { // special case for forms. they have only one event stream configuration // that requires an encryption key if it has private streams. // NOTE: event stream config will remove this key if it is unneeded! + const externalTrx = transaction != undefined; let trx; let id; @@ -51,6 +52,7 @@ const service = { } } else { // add a new configuration. + if (data && !data.algorithm && !data.key) return; // no encryption key to insert id = uuidv4(); data.id = id; data.formId = formId; diff --git a/app/src/forms/form/eventStreamConfig/service.js b/app/src/forms/form/eventStreamConfig/service.js index 6e0d4d1df..27479720d 100644 --- a/app/src/forms/form/eventStreamConfig/service.js +++ b/app/src/forms/form/eventStreamConfig/service.js @@ -24,6 +24,7 @@ const service = { // let's deal with encryption key const encKey = await encryptionKeyService.upsertForEventStreamConfig(formId, data.encryptionKey, currentUser, transaction); data.encryptionKeyId = encKey && data.enablePrivateStream ? encKey.id : null; + data.encryptionKey = null; // only want the id for config upsert if (existing) { // do we need to update? diff --git a/event-stream-service/package-lock.json b/event-stream-service/package-lock.json index 52b4c5de1..db4417a7c 100644 --- a/event-stream-service/package-lock.json +++ b/event-stream-service/package-lock.json @@ -9,9 +9,14 @@ "version": "0.0.0", "license": "Apache-2.0", "dependencies": { + "cryptr": "^6.3.0", "nats": "^2.28.0" - }, - "devDependencies": {} + } + }, + "node_modules/cryptr": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/cryptr/-/cryptr-6.3.0.tgz", + "integrity": "sha512-TA4byAuorT8qooU9H8YJhBwnqD151i1rcauHfJ3Divg6HmukHB2AYMp0hmjv2873J2alr4t15QqC7zAnWFrtfQ==" }, "node_modules/nats": { "version": "2.28.0", diff --git a/event-stream-service/package.json b/event-stream-service/package.json index 4b64f1b4f..836c7a8e4 100644 --- a/event-stream-service/package.json +++ b/event-stream-service/package.json @@ -5,6 +5,7 @@ "license": "Apache-2.0", "scripts": {}, "dependencies": { + "cryptr": "^6.3.0", "nats": "^2.28.0" } } diff --git a/event-stream-service/pullConsumer.js b/event-stream-service/pullConsumer.js index b7678b8ff..44cde7146 100644 --- a/event-stream-service/pullConsumer.js +++ b/event-stream-service/pullConsumer.js @@ -1,4 +1,5 @@ const { AckPolicy, connect } = require("nats"); +const Cryptr = require("cryptr"); // connection info const servers = ["localhost:4222", "localhost:4223", "localhost:4224"]; @@ -13,6 +14,7 @@ const STREAM_NAME = "CHEFS"; const FILTER_SUBJECTS = ["PUBLIC.forms.>", "PRIVATE.forms.>"]; const MAX_MESSAGES = 2; const DURABLE_NAME = "pullConsumer"; +const ENCRYPTION_KEY = ""; const printMsg = (m) => { // illustrate grabbing the sequence and timestamp from the nats message... @@ -22,7 +24,17 @@ const printMsg = (m) => { `msg seq: ${m.seq}, subject: ${m.subject}, timestamp: ${ts}, streamSequence: ${m.info.streamSequence}, deliverySequence: ${m.info.deliverySequence}` ); // illustrate (one way of) grabbing message content as json - console.log(JSON.stringify(m.json(), null, 2)); + const data = m.json(); + console.log(JSON.stringify(data, null, 2)); + try { + if (data && data["payload"] && data["payload"]["data"]) { + const cryptr = new Cryptr(ENCRYPTION_KEY); + const d = cryptr.decrypt(data["payload"]["data"]); + console.log(JSON.stringify(d, null, 2)); + } + } catch (err) { + console.error("Error decrypting payload.data"); + } } catch (e) { console.error(`Error printing message: ${e.message}`); }