@@ -93,6 +93,7 @@ public async virtual Task<HostSecretsInfo> GetHostSecretsAsync()
93
93
{
94
94
_logger ? . LogDebug ( Resources . TraceNonDecryptedHostSecretRefresh ) ;
95
95
await PersistSecretsAsync ( hostSecrets , null , true ) ;
96
+ hostSecrets = GenerateHostSecrets ( hostSecrets ) ;
96
97
await RefreshSecretsAsync ( hostSecrets ) ;
97
98
}
98
99
@@ -139,13 +140,7 @@ public async virtual Task<IDictionary<string, string>> GetFunctionSecretsAsync(s
139
140
// no secrets exist for this function so generate them
140
141
string message = string . Format ( Resources . TraceFunctionSecretGeneration , functionName ) ;
141
142
_logger . LogDebug ( message ) ;
142
- secrets = new FunctionSecrets
143
- {
144
- Keys = new List < Key >
145
- {
146
- GenerateKey ( ScriptConstants . DefaultFunctionKeyName )
147
- }
148
- } ;
143
+ secrets = GenerateFunctionSecrets ( ) ;
149
144
150
145
await PersistSecretsAsync ( secrets , functionName ) ;
151
146
}
@@ -160,6 +155,7 @@ public async virtual Task<IDictionary<string, string>> GetFunctionSecretsAsync(s
160
155
string message = string . Format ( Resources . TraceNonDecryptedFunctionSecretRefresh , functionName ) ;
161
156
_logger ? . LogDebug ( message ) ;
162
157
await PersistSecretsAsync ( secrets , functionName , true ) ;
158
+ secrets = GenerateFunctionSecrets ( secrets ) ;
163
159
await RefreshSecretsAsync ( secrets , functionName ) ;
164
160
}
165
161
@@ -378,13 +374,53 @@ private HostSecrets GenerateHostSecrets()
378
374
{
379
375
MasterKey = GenerateKey ( ScriptConstants . DefaultMasterKeyName ) ,
380
376
FunctionKeys = new List < Key >
377
+ {
378
+ GenerateKey ( ScriptConstants . DefaultFunctionKeyName )
379
+ } ,
380
+ SystemKeys = new List < Key > ( )
381
+ } ;
382
+ }
383
+
384
+ private HostSecrets GenerateHostSecrets ( HostSecrets secrets )
385
+ {
386
+ if ( secrets . MasterKey . IsEncrypted )
387
+ {
388
+ secrets . MasterKey . Value = GenerateSecret ( ) ;
389
+ }
390
+ secrets . SystemKeys = RegenerateList ( secrets . SystemKeys ) ;
391
+ secrets . FunctionKeys = RegenerateList ( secrets . FunctionKeys ) ;
392
+ return secrets ;
393
+ }
394
+
395
+ private FunctionSecrets GenerateFunctionSecrets ( )
396
+ {
397
+ return new FunctionSecrets
398
+ {
399
+ Keys = new List < Key >
381
400
{
382
401
GenerateKey ( ScriptConstants . DefaultFunctionKeyName )
383
- } ,
384
- SystemKeys = new List < Key > ( )
402
+ }
385
403
} ;
386
404
}
387
405
406
+ private FunctionSecrets GenerateFunctionSecrets ( FunctionSecrets secrets )
407
+ {
408
+ secrets . Keys = RegenerateList ( secrets . Keys ) ;
409
+ return secrets ;
410
+ }
411
+
412
+ private IList < Key > RegenerateList ( IList < Key > list )
413
+ {
414
+ return list . Select ( k =>
415
+ {
416
+ if ( k . IsEncrypted )
417
+ {
418
+ k . Value = GenerateSecret ( ) ;
419
+ }
420
+ return k ;
421
+ } ) . ToList ( ) ;
422
+ }
423
+
388
424
private Task RefreshSecretsAsync < T > ( T secrets , string keyScope = null ) where T : ScriptSecrets
389
425
{
390
426
var refreshedSecrets = secrets . Refresh ( _keyValueConverterFactory ) ;
0 commit comments