1- // Copyright (c) .NET Foundation. All rights reserved.
1+ // Copyright (c) .NET Foundation. All rights reserved.
22// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33
44using System ;
@@ -29,6 +29,16 @@ public CachingSecretReader(ISecretReader secretReader,
2929 _refreshIntervalBeforeExpiry = TimeSpan . FromSeconds ( refreshIntervalBeforeExpirySec ) ;
3030 }
3131
32+ public string GetSecret ( string secretName )
33+ {
34+ return GetSecret ( secretName , logger : null ) ;
35+ }
36+
37+ public string GetSecret ( string secretName , ILogger logger )
38+ {
39+ return GetSecretObject ( secretName , logger ) . Value ;
40+ }
41+
3242 public async Task < string > GetSecretAsync ( string secretName )
3343 {
3444 return await GetSecretAsync ( secretName , logger : null ) ;
@@ -39,32 +49,51 @@ public async Task<string> GetSecretAsync(string secretName, ILogger logger)
3949 return ( await GetSecretObjectAsync ( secretName , logger ) ) . Value ;
4050 }
4151
42- public async Task < ISecret > GetSecretObjectAsync ( string secretName )
52+ public ISecret GetSecretObject ( string secretName )
4353 {
44- return await GetSecretObjectAsync ( secretName , logger : null ) ;
54+ return GetSecretObject ( secretName , logger : null ) ;
4555 }
4656
47- public async Task < ISecret > GetSecretObjectAsync ( string secretName , ILogger logger )
57+ public ISecret GetSecretObject ( string secretName , ILogger logger )
4858 {
49- if ( string . IsNullOrEmpty ( secretName ) )
59+ if ( TryGetCachedSecretObject ( secretName , logger , out var cachedSecret ) )
5060 {
51- throw new ArgumentException ( "Null or empty secret name" , nameof ( secretName ) ) ;
61+ return cachedSecret ;
5262 }
5363
54- // If the cache contains the secret and it is not expired, return the cached value.
64+ var start = DateTimeOffset . UtcNow ;
65+
66+ var updatedValue = new CachedSecret ( _internalReader . GetSecretObject ( secretName ) ) ;
67+
68+ return UpdateCachedSecret ( secretName , logger , start , updatedValue ) ;
69+ }
70+
71+ public async Task < ISecret > GetSecretObjectAsync ( string secretName )
72+ {
73+ return await GetSecretObjectAsync ( secretName , logger : null ) ;
74+ }
75+
76+ public async Task < ISecret > GetSecretObjectAsync ( string secretName , ILogger logger )
77+ {
5578 if ( TryGetCachedSecretObject ( secretName , logger , out var cachedSecret ) )
5679 {
5780 return cachedSecret ;
5881 }
5982
6083 var start = DateTimeOffset . UtcNow ;
61- // The cache does not contain a fresh copy of the secret. Fetch and cache the secret.
84+
6285 var updatedValue = new CachedSecret ( await _internalReader . GetSecretObjectAsync ( secretName ) ) ;
86+
87+ return UpdateCachedSecret ( secretName , logger , start , updatedValue ) ;
88+ }
89+
90+ private ISecret UpdateCachedSecret ( string secretName , ILogger logger , DateTimeOffset start , CachedSecret updatedValue )
91+ {
6392 var updatedSecret = _cache . AddOrUpdate ( secretName , updatedValue , ( key , old ) => updatedValue ) . Secret ;
6493
6594 logger ? . LogInformation ( "Refreshed secret {SecretName}, Expiring at: {ExpirationTime}. Took {ElapsedMilliseconds}ms." ,
6695 updatedSecret . Name ,
67- updatedSecret . Expiration == null ? "null" : ( ( DateTimeOffset ) updatedSecret . Expiration ) . UtcDateTime . ToString ( ) ,
96+ updatedSecret . Expiration == null ? "null" : ( ( DateTimeOffset ) updatedSecret . Expiration ) . UtcDateTime . ToString ( ) ,
6897 ( DateTimeOffset . UtcNow - start ) . TotalMilliseconds . ToString ( "F2" ) ) ;
6998
7099 return updatedSecret ;
@@ -87,6 +116,11 @@ public bool TryGetCachedSecret(string secretName, ILogger logger, out string sec
87116
88117 public bool TryGetCachedSecretObject ( string secretName , ILogger logger , out ISecret secretObject )
89118 {
119+ if ( string . IsNullOrEmpty ( secretName ) )
120+ {
121+ throw new ArgumentException ( "Null or empty secret name" , nameof ( secretName ) ) ;
122+ }
123+
90124 secretObject = null ;
91125 if ( _cache . TryGetValue ( secretName , out CachedSecret result )
92126 && ! IsSecretOutdated ( result ) )
@@ -122,4 +156,4 @@ public CachedSecret(ISecret secret)
122156
123157 }
124158 }
125- }
159+ }
0 commit comments