@growy/strapi-plugin-encrypted-field 1.7.0 → 1.7.1
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.
- package/package.json +1 -1
- package/server/bootstrap.js +80 -92
package/package.json
CHANGED
package/server/bootstrap.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const { encrypt, decrypt, validateValue, isEncryptedField } = require('./utils/crypto');
|
|
2
2
|
|
|
3
3
|
module.exports = ({ strapi }) => {
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
const models = Object.values(strapi.contentTypes);
|
|
6
6
|
|
|
7
7
|
models.forEach((model) => {
|
|
@@ -13,113 +13,101 @@ module.exports = ({ strapi }) => {
|
|
|
13
13
|
|
|
14
14
|
strapi.log.info(`Registrando lifecycles de cifrado para ${uid}`);
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
strapi.db.lifecycles.subscribe({
|
|
18
18
|
models: [uid],
|
|
19
19
|
|
|
20
20
|
async beforeCreate(event) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (!validation.valid) {
|
|
42
|
-
throw new Error(`Validación fallida para el campo "${key}": ${validation.error}`);
|
|
21
|
+
if (!event.model?.uid) return;
|
|
22
|
+
|
|
23
|
+
const { data } = event.params;
|
|
24
|
+
const currentModel = strapi.getModel(event.model.uid);
|
|
25
|
+
|
|
26
|
+
if (!currentModel?.attributes) return;
|
|
27
|
+
|
|
28
|
+
for (const [key, attribute] of Object.entries(currentModel.attributes)) {
|
|
29
|
+
if (!isEncryptedField(attribute)) continue;
|
|
30
|
+
if (Object.prototype.hasOwnProperty.call(data, key)) {
|
|
31
|
+
const value = data[key];
|
|
32
|
+
if (value === null || value === undefined || value === '') continue;
|
|
33
|
+
|
|
34
|
+
const validation = validateValue(value, attribute);
|
|
35
|
+
if (!validation.valid) {
|
|
36
|
+
throw new Error(`Validación fallida para el campo "${key}": ${validation.error}`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
strapi.log.info(`Cifrando campo ${key} en ${event.model.uid}`);
|
|
40
|
+
data[key] = encrypt(value, strapi);
|
|
43
41
|
}
|
|
44
|
-
|
|
45
|
-
strapi.log.info(`Cifrando campo ${key} en ${event.model.uid}`);
|
|
46
|
-
data[key] = encrypt(value, strapi);
|
|
47
42
|
}
|
|
48
|
-
}
|
|
49
|
-
},
|
|
43
|
+
},
|
|
50
44
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (!validation.valid) {
|
|
73
|
-
throw new Error(`Validación fallida para el campo "${key}": ${validation.error}`);
|
|
45
|
+
async beforeUpdate(event) {
|
|
46
|
+
if (!event.model?.uid) return;
|
|
47
|
+
|
|
48
|
+
const { data } = event.params;
|
|
49
|
+
const currentModel = strapi.getModel(event.model.uid);
|
|
50
|
+
|
|
51
|
+
if (!currentModel?.attributes) return;
|
|
52
|
+
|
|
53
|
+
for (const [key, attribute] of Object.entries(currentModel.attributes)) {
|
|
54
|
+
if (!isEncryptedField(attribute)) continue;
|
|
55
|
+
if (Object.prototype.hasOwnProperty.call(data, key)) {
|
|
56
|
+
const value = data[key];
|
|
57
|
+
if (value === null || value === undefined || value === '') continue;
|
|
58
|
+
|
|
59
|
+
const validation = validateValue(value, attribute);
|
|
60
|
+
if (!validation.valid) {
|
|
61
|
+
throw new Error(`Validación fallida para el campo "${key}": ${validation.error}`);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
strapi.log.info(`Cifrando campo ${key} en ${event.model.uid}`);
|
|
65
|
+
data[key] = encrypt(value, strapi);
|
|
74
66
|
}
|
|
75
|
-
|
|
76
|
-
strapi.log.info(`Cifrando campo ${key} en ${event.model.uid}`);
|
|
77
|
-
data[key] = encrypt(value, strapi);
|
|
78
67
|
}
|
|
79
|
-
}
|
|
80
|
-
},
|
|
68
|
+
},
|
|
81
69
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
70
|
+
async afterFindOne(event) {
|
|
71
|
+
const { result } = event;
|
|
72
|
+
if (!result) return;
|
|
73
|
+
if (!event.model?.uid) return;
|
|
74
|
+
|
|
75
|
+
const currentModel = strapi.getModel(event.model.uid);
|
|
76
|
+
|
|
77
|
+
if (!currentModel?.attributes) return;
|
|
78
|
+
|
|
79
|
+
for (const [key, attribute] of Object.entries(currentModel.attributes)) {
|
|
80
|
+
if (!isEncryptedField(attribute)) continue;
|
|
81
|
+
if (Object.prototype.hasOwnProperty.call(result, key)) {
|
|
82
|
+
const value = result[key];
|
|
83
|
+
if (typeof value === 'string' && value) {
|
|
84
|
+
strapi.log.info(`Descifrando campo ${key} en ${event.model.uid}`);
|
|
85
|
+
result[key] = decrypt(value, strapi);
|
|
86
|
+
}
|
|
98
87
|
}
|
|
99
88
|
}
|
|
100
|
-
}
|
|
101
|
-
},
|
|
89
|
+
},
|
|
102
90
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
91
|
+
async afterFindMany(event) {
|
|
92
|
+
const { result } = event;
|
|
93
|
+
if (!result || !Array.isArray(result)) return;
|
|
94
|
+
if (!event.model?.uid) return;
|
|
95
|
+
|
|
96
|
+
const currentModel = strapi.getModel(event.model.uid);
|
|
97
|
+
|
|
98
|
+
if (!currentModel?.attributes) return;
|
|
99
|
+
|
|
100
|
+
for (const item of result) {
|
|
101
|
+
for (const [key, attribute] of Object.entries(currentModel.attributes)) {
|
|
102
|
+
if (!isEncryptedField(attribute)) continue;
|
|
103
|
+
if (Object.prototype.hasOwnProperty.call(item, key)) {
|
|
104
|
+
const value = item[key];
|
|
105
|
+
if (typeof value === 'string' && value) {
|
|
106
|
+
item[key] = decrypt(value, strapi);
|
|
107
|
+
}
|
|
119
108
|
}
|
|
120
109
|
}
|
|
121
110
|
}
|
|
122
|
-
}
|
|
123
111
|
},
|
|
124
112
|
});
|
|
125
113
|
});
|