@futdevpro/nts-dynamo 1.15.116 → 1.15.118

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,6 +16,7 @@ import {
16
16
  DyFM_Object
17
17
  } from '@futdevpro/fsm-dynamo';
18
18
  import { DyNTS_archiveSuffix } from '../../_collections/archive.util';
19
+ import { DyNTS_FieldEncryption_Util } from '../../_collections/field-encryption.util';
19
20
  import { DyNTS_DBUpdate } from '../../_models/types/db-update.type';
20
21
  import { DyNTS_DBQueryOptions } from '../../_models/interfaces/db-query-options.interface';
21
22
  import { DyNTS_global_settings } from '../../_collections/global-settings.const';
@@ -100,7 +101,11 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
100
101
  data.__createdBy = issuer;
101
102
  data.__lastModifiedBy = issuer;
102
103
 
103
- const dataModel = new this.dataModel(data);
104
+ // AT-REST field-encryption (opt-in): az encrypt:true mezőket a persist ELŐTT titkosítjuk, egy
105
+ // KLÓNON (a hívó `data`-ja plaintext marad). NO-OP, ha nincs encrypt:true mező.
106
+ const encData: T = DyNTS_FieldEncryption_Util.encryptDoc(data, this.dataParams.properties);
107
+
108
+ const dataModel = new this.dataModel(encData);
104
109
  const newData: T = await dataModel.save().then((res): T => {
105
110
  if (res) {
106
111
  return res?.toObject() as T;
@@ -157,12 +162,18 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
157
162
  data.__lastModifiedBy = issuer;
158
163
  }
159
164
 
160
- /**
161
- * EZ A SZAR TELJESEN SZAR, nem friss, nem a db-be mentett adatokat ad vissza,
162
- * átír random value-kat össze vissza, WTF
165
+ // AT-REST field-encryption (opt-in): az encrypt:true mezőket a persist ELŐTT titkosítjuk, egy
166
+ // KLÓNON. KRITIKUS: a `findByIdAndUpdate` MEGKERÜLI a mongoose settereket/pre-save-hookokat, ezért
167
+ // a titkosítás itt, app-rétegben történik (nem mongoose-hookban). A hívó `data`-ja plaintext marad,
168
+ // így a `stringifyDataId(data)` alant no-op decrypttel a plaintextet adja vissza. NO-OP enc-mező nélkül.
169
+ const encData: T = DyNTS_FieldEncryption_Util.encryptDoc(data, this.dataParams.properties);
170
+
171
+ /**
172
+ * EZ A SZAR TELJESEN SZAR, nem friss, nem a db-be mentett adatokat ad vissza,
173
+ * átír random value-kat össze vissza, WTF
163
174
  * */
164
- /* let newData: T = */
165
- await this.dataModel.findByIdAndUpdate(data._id, data)/* .then((res) => {
175
+ /* let newData: T = */
176
+ await this.dataModel.findByIdAndUpdate(data._id, encData)/* .then((res) => {
166
177
  if (res) {
167
178
  //return res?.toObject() as T;
168
179
  } else {
@@ -1277,6 +1288,11 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
1277
1288
  // PRIVATE FUNCTIONS
1278
1289
 
1279
1290
  private stringifyDataId(data: T, fnName: string): T {
1291
+ // AT-REST field-decryption (opt-in): ez a KÖZÖS read+write post-processor (minden read + a
1292
+ // create/modify EREDMÉNYE is átmegy rajta), ezért itt fejtjük vissza az encrypt:true envelope-
1293
+ // mezőket load után. NO-OP, ha nincs encrypt:true mező (ugyanaz a referencia — nulla változás).
1294
+ data = DyNTS_FieldEncryption_Util.decryptDoc(data, this.dataParams.properties);
1295
+
1280
1296
  if (data?._id && (typeof data._id !== 'string' || typeof data._id === 'object')) {
1281
1297
  data._id = `${data._id}`;
1282
1298