@@ -195,10 +195,11 @@ class RuntimeEnvironment extends AdvancedBase {
195
195
format : require ( 'string-template' ) ,
196
196
}
197
197
198
- constructor ( { logger, entry_path } ) {
198
+ constructor ( { logger, entry_path, boot_parameters } ) {
199
199
super ( ) ;
200
200
this . logger = logger ;
201
201
this . entry_path = entry_path ;
202
+ this . boot_parameters = boot_parameters ;
202
203
this . path_checks = path_checks ( this ) ( this . modules ) ;
203
204
this . config_paths = config_paths ( this ) ( this . modules ) ;
204
205
this . runtime_paths = runtime_paths ( this ) ( this . modules ) ;
@@ -258,15 +259,44 @@ class RuntimeEnvironment extends AdvancedBase {
258
259
}
259
260
}
260
261
262
+ const owrite_config = this . boot_parameters . args . overwriteConfig ;
263
+
261
264
const { fs, path_, crypto } = this . modules ;
262
- let config_values = { } ;
263
- if ( ! using_config ) {
265
+ if ( ! using_config || owrite_config ) {
266
+ const generated_values = { } ;
267
+ generated_values . cookie_name = crypto . randomUUID ( ) ;
268
+ generated_values . jwt_secret = crypto . randomUUID ( ) ;
269
+ generated_values . url_signature_secret = crypto . randomUUID ( ) ;
270
+ generated_values . private_uid_secret = crypto . randomBytes ( 24 ) . toString ( 'hex' ) ;
271
+ generated_values . private_uid_namespace = crypto . randomUUID ( ) ;
272
+ if ( using_config ) {
273
+ this . logger . info (
274
+ `Overwriting ${ quot ( using_config ) } because ` +
275
+ `${ hl ( '--overwrite-config' ) } is set`
276
+ ) ;
277
+ // make backup
278
+ fs . copyFileSync (
279
+ path_ . join ( config_path_entry . path , using_config ) ,
280
+ path_ . join ( config_path_entry . path , using_config + '.bak' ) ,
281
+ ) ;
282
+ // preserve generated values
283
+ {
284
+ const config_raw = fs . readFileSync (
285
+ path_ . join ( config_path_entry . path , using_config ) ,
286
+ 'utf8' ,
287
+ ) ;
288
+ const config_values = JSON . parse ( config_raw ) ;
289
+ for ( const k in generated_values ) {
290
+ if ( config_values [ k ] ) {
291
+ generated_values [ k ] = config_values [ k ] ;
292
+ }
293
+ }
294
+ }
295
+ }
264
296
const generated_config = {
265
297
...default_config ,
298
+ ...generated_values ,
266
299
} ;
267
- generated_config . cookie_name = crypto . randomUUID ( ) ;
268
- generated_config . jwt_secret = crypto . randomUUID ( ) ;
269
- generated_config . url_signature_secret = crypto . randomUUID ( ) ;
270
300
generated_config [ "" ] = null ; // for trailing comma
271
301
fs . writeFileSync (
272
302
path_ . join ( config_path_entry . path , 'config.json' ) ,
0 commit comments