@@ -103,6 +103,7 @@ public async virtual Task<HostSecretsInfo> GetHostSecretsAsync()
103
103
_traceWriter . Verbose ( Resources . TraceNonDecryptedHostSecretRefresh ) ;
104
104
_logger ? . LogDebug ( Resources . TraceNonDecryptedHostSecretRefresh ) ;
105
105
await PersistSecretsAsync ( hostSecrets , null , true ) ;
106
+ hostSecrets = GenerateHostSecrets ( hostSecrets ) ;
106
107
await RefreshSecretsAsync ( hostSecrets ) ;
107
108
}
108
109
@@ -157,13 +158,7 @@ public async virtual Task<IDictionary<string, string>> GetFunctionSecretsAsync(s
157
158
string messageGeneratoin = string . Format ( Resources . TraceFunctionSecretGeneration , functionName ) ;
158
159
_traceWriter . Info ( messageGeneratoin , traceProperties ) ;
159
160
_logger ? . LogInformation ( messageGeneratoin ) ;
160
- secrets = new FunctionSecrets
161
- {
162
- Keys = new List < Key >
163
- {
164
- GenerateKey ( ScriptConstants . DefaultFunctionKeyName )
165
- }
166
- } ;
161
+ secrets = GenerateFunctionSecrets ( ) ;
167
162
168
163
await PersistSecretsAsync ( secrets , functionName ) ;
169
164
}
@@ -179,6 +174,7 @@ public async virtual Task<IDictionary<string, string>> GetFunctionSecretsAsync(s
179
174
_traceWriter . Info ( messageNonDecrypted , traceProperties ) ;
180
175
_logger ? . LogInformation ( messageNonDecrypted ) ;
181
176
await PersistSecretsAsync ( secrets , functionName , true ) ;
177
+ secrets = GenerateFunctionSecrets ( secrets ) ;
182
178
await RefreshSecretsAsync ( secrets , functionName ) ;
183
179
}
184
180
@@ -417,6 +413,45 @@ private HostSecrets GenerateHostSecrets()
417
413
} ;
418
414
}
419
415
416
+ private static HostSecrets GenerateHostSecrets ( HostSecrets secrets )
417
+ {
418
+ if ( secrets . MasterKey . IsEncrypted )
419
+ {
420
+ secrets . MasterKey . Value = GenerateSecret ( ) ;
421
+ }
422
+ secrets . SystemKeys = RegenerateKeys ( secrets . SystemKeys ) ;
423
+ secrets . FunctionKeys = RegenerateKeys ( secrets . FunctionKeys ) ;
424
+ return secrets ;
425
+ }
426
+
427
+ private FunctionSecrets GenerateFunctionSecrets ( )
428
+ {
429
+ return new FunctionSecrets
430
+ {
431
+ Keys = new List < Key >
432
+ {
433
+ GenerateKey ( ScriptConstants . DefaultFunctionKeyName )
434
+ }
435
+ } ;
436
+ }
437
+
438
+ private static FunctionSecrets GenerateFunctionSecrets ( FunctionSecrets secrets )
439
+ {
440
+ secrets . Keys = RegenerateKeys ( secrets . Keys ) ;
441
+ return secrets ;
442
+ }
443
+ private static IList < Key > RegenerateKeys ( IList < Key > list )
444
+ {
445
+ return list . Select ( k =>
446
+ {
447
+ if ( k . IsEncrypted )
448
+ {
449
+ k . Value = GenerateSecret ( ) ;
450
+ }
451
+ return k ;
452
+ } ) . ToList ( ) ;
453
+ }
454
+
420
455
private Task RefreshSecretsAsync < T > ( T secrets , string keyScope = null ) where T : ScriptSecrets
421
456
{
422
457
var refreshedSecrets = secrets . Refresh ( _keyValueConverterFactory ) ;
0 commit comments