@@ -85,7 +85,22 @@ module.exports = class Vault extends Item {
85
85
return String ( new mongodb . ObjectId ( ) ) ;
86
86
} ) ,
87
87
name : Joi . string ( ) . required ( ) ,
88
- identifier : Joi . string ( ) . required ( ) , // TODO: remove
88
+ identifier : Joi . string ( ) . allow ( null ) . default ( null ) . custom ( ( value ) => {
89
+
90
+ if ( process . env . NODE_ENV === "development" ) {
91
+
92
+ let { logger } = Vault . scope ;
93
+
94
+ let msg = `Property .identifier is deprecated and will be removed in furhter version.\r\n` ;
95
+ msg += `Use the .labels array instead as custom fields for identifing items.` ;
96
+
97
+ logger . warn ( msg ) ;
98
+
99
+ }
100
+
101
+ return value ;
102
+
103
+ } ) , // TODO: remove
89
104
description : Joi . string ( ) . allow ( null ) . default ( null ) ,
90
105
secrets : Joi . array ( ) . items ( Secret . schema ( ) ) . default ( [ ] )
91
106
} ) ;
@@ -137,9 +152,27 @@ module.exports = class Vault extends Item {
137
152
* @returns {Object } Key = Secret key property, Value = decrypted value
138
153
*/
139
154
decrypt ( ) {
140
- return this . secrets . reduce ( ( prev , cur ) => {
141
- prev [ cur . key ] = cur . decrypt ( ) ;
142
- return prev ;
155
+ return this . secrets . reduce ( ( obj , secret ) => {
156
+
157
+ try {
158
+
159
+ // try to decrypt secret
160
+ // this can fail when no vaule is set
161
+ // e.g. default value = null,
162
+ // see https://github.com/OpenHausIO/backend/issues/568
163
+ obj [ secret . key ] = secret . decrypt ( ) ;
164
+
165
+ } catch ( err ) {
166
+
167
+ let { logger } = Vault . scope ;
168
+ logger . warn ( err , `Could not decrypt secret "${ secret . name } "` ) ;
169
+
170
+ obj [ secret . key ] = null ;
171
+
172
+ }
173
+
174
+ return obj ;
175
+
143
176
} , { } ) ;
144
177
}
145
178
0 commit comments