Skip to content

Commit 12dac94

Browse files
committed
Move save/modify credentials to diskCache
1 parent f1b60a3 commit 12dac94

File tree

2 files changed

+92
-47
lines changed

2 files changed

+92
-47
lines changed

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/sso/DiskCache.kt

Lines changed: 84 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ import software.aws.toolkits.core.utils.touch
3232
import software.aws.toolkits.core.utils.tryDirOp
3333
import software.aws.toolkits.core.utils.tryFileOp
3434
import software.aws.toolkits.core.utils.tryOrNull
35+
import software.aws.toolkits.telemetry.AwsTelemetry
36+
import software.aws.toolkits.telemetry.CredentialModification
37+
import software.aws.toolkits.telemetry.Result
3538
import java.io.InputStream
3639
import java.io.OutputStream
3740
import java.nio.file.Path
@@ -108,20 +111,64 @@ class DiskCache(
108111

109112
override fun saveClientRegistration(cacheKey: ClientRegistrationCacheKey, registration: ClientRegistration) {
110113
LOG.debug { "saveClientRegistration for $cacheKey" }
111-
val registrationCache = clientRegistrationCache(cacheKey)
112-
writeKey(registrationCache) {
113-
objectMapper.writeValue(it, registration)
114+
try {
115+
val registrationCache = clientRegistrationCache(cacheKey)
116+
writeKey(registrationCache) {
117+
objectMapper.writeValue(it, registration)
118+
}
119+
} catch (e: Exception) {
120+
AwsTelemetry.saveCredentials(
121+
result = Result.Failed,
122+
reason = "Failed to save ClientRegistration to cache,",
123+
reasonDesc = e.message
124+
)
125+
throw e
114126
}
127+
AwsTelemetry.saveCredentials(
128+
result = Result.Succeeded,
129+
)
115130
}
116131

117132
override fun invalidateClientRegistration(cacheKey: ClientRegistrationCacheKey) {
118133
LOG.debug { "invalidateClientRegistration for $cacheKey" }
119-
clientRegistrationCache(cacheKey).tryDeleteIfExists()
134+
try {
135+
clientRegistrationCache(cacheKey).tryDeleteIfExists()
136+
} catch (e: Exception) {
137+
AwsTelemetry.modifyCredentials(
138+
credentialModification = CredentialModification.Delete,
139+
result = Result.Failed,
140+
reason = "Failed to invalidate ClientRegistration",
141+
reasonDesc = e.message,
142+
source = "DiskCache.invalidateClientRegistration"
143+
)
144+
throw e
145+
}
146+
AwsTelemetry.modifyCredentials(
147+
credentialModification = CredentialModification.Delete,
148+
result = Result.Succeeded,
149+
source = "DiskCache.invalidateClientRegistration"
150+
)
120151
}
121152

122153
override fun invalidateAccessToken(ssoUrl: String) {
123154
LOG.debug { "invalidateAccessToken for $ssoUrl" }
124-
accessTokenCache(ssoUrl).tryDeleteIfExists()
155+
try {
156+
accessTokenCache(ssoUrl).tryDeleteIfExists()
157+
} catch (e: Exception) {
158+
AwsTelemetry.modifyCredentials(
159+
credentialModification = CredentialModification.Delete,
160+
result = Result.Failed,
161+
reason = "Failed to invalidate AccessToken",
162+
reasonDesc = e.message,
163+
source = "DiskCache.invalidateAccessToken"
164+
)
165+
throw e
166+
}
167+
AwsTelemetry.modifyCredentials(
168+
credentialModification = CredentialModification.Delete,
169+
result = Result.Succeeded,
170+
source = "DiskCache.invalidateAccessToken"
171+
)
125172
}
126173

127174
override fun loadAccessToken(cacheKey: AccessTokenCacheKey): AccessToken? {
@@ -136,15 +183,43 @@ class DiskCache(
136183

137184
override fun saveAccessToken(cacheKey: AccessTokenCacheKey, accessToken: AccessToken) {
138185
LOG.debug { "saveAccessToken for $cacheKey" }
139-
val accessTokenCache = accessTokenCache(cacheKey)
140-
writeKey(accessTokenCache) {
141-
objectMapper.writeValue(it, accessToken)
186+
try {
187+
val accessTokenCache = accessTokenCache(cacheKey)
188+
writeKey(accessTokenCache) {
189+
objectMapper.writeValue(it, accessToken)
190+
}
191+
} catch (e: Exception) {
192+
AwsTelemetry.saveCredentials(
193+
result = Result.Failed,
194+
reason = "Failed to save AccessToken to cache,",
195+
reasonDesc = e.message
196+
)
197+
throw e
142198
}
199+
AwsTelemetry.saveCredentials(
200+
result = Result.Succeeded,
201+
)
143202
}
144203

145204
override fun invalidateAccessToken(cacheKey: AccessTokenCacheKey) {
146205
LOG.debug { "invalidateAccessToken for $cacheKey" }
147-
accessTokenCache(cacheKey).tryDeleteIfExists()
206+
try {
207+
accessTokenCache(cacheKey).tryDeleteIfExists()
208+
} catch (e: Exception){
209+
AwsTelemetry.modifyCredentials(
210+
credentialModification = CredentialModification.Delete,
211+
result = Result.Failed,
212+
reason = "Failed to invalidate AccessToken",
213+
reasonDesc = e.message,
214+
source = "DiskCache.invalidateAccessToken"
215+
)
216+
throw e
217+
}
218+
AwsTelemetry.modifyCredentials(
219+
credentialModification = CredentialModification.Delete,
220+
result = Result.Succeeded,
221+
source = "DiskCache.invalidateAccessToken"
222+
)
148223
}
149224

150225
private fun clientRegistrationCache(ssoRegion: String): Path = cacheDir.resolve("aws-toolkit-jetbrains-client-id-$ssoRegion.json")

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/sso/SsoAccessTokenProvider.kt

Lines changed: 8 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import software.aws.toolkits.jetbrains.utils.sleepWithCancellation
2828
import software.aws.toolkits.resources.AwsCoreBundle
2929
import software.aws.toolkits.telemetry.AuthType
3030
import software.aws.toolkits.telemetry.AwsTelemetry
31-
import software.aws.toolkits.telemetry.CredentialModification
3231
import software.aws.toolkits.telemetry.CredentialSourceId
3332
import software.aws.toolkits.telemetry.Result
3433
import java.time.Clock
@@ -482,48 +481,19 @@ class SsoAccessTokenProvider(
482481

483482
private fun saveClientRegistration(registration: ClientRegistration) {
484483
val credentialType = registration::class.java.name
485-
try {
486-
when (registration) {
487-
is DeviceAuthorizationClientRegistration -> {
488-
cache.saveClientRegistration(dagClientRegistrationCacheKey, registration)
489-
}
490-
491-
is PKCEClientRegistration -> {
492-
cache.saveClientRegistration(pkceClientRegistrationCacheKey, registration)
493-
}
484+
when (registration) {
485+
is DeviceAuthorizationClientRegistration -> {
486+
cache.saveClientRegistration(dagClientRegistrationCacheKey, registration)
487+
}
488+
is PKCEClientRegistration -> {
489+
cache.saveClientRegistration(pkceClientRegistrationCacheKey, registration)
494490
}
495-
} catch (e: Exception) {
496-
AwsTelemetry.saveCredentials(
497-
result = Result.Failed,
498-
reason = "$credentialType failed to write to cache",
499-
reasonDesc = e.message
500-
)
501-
throw e
502491
}
503-
AwsTelemetry.saveCredentials(
504-
result = Result.Succeeded,
505-
reason = "$credentialType successfully written to cache",
506-
)
507492
}
508493

509494
private fun invalidateClientRegistration() {
510-
try {
511-
cache.invalidateClientRegistration(dagClientRegistrationCacheKey)
512-
cache.invalidateClientRegistration(pkceClientRegistrationCacheKey)
513-
} catch (e: Exception) {
514-
AwsTelemetry.modifyCredentials(
515-
credentialModification = CredentialModification.Delete,
516-
result = Result.Failed,
517-
reason = "Failed to invalidate client registration",
518-
reasonDesc = e.message,
519-
source = "SsoAccessTokenProvider.invalidateClientRegistration"
520-
)
521-
}
522-
AwsTelemetry.modifyCredentials(
523-
credentialModification = CredentialModification.Delete,
524-
result = Result.Succeeded,
525-
source = "SsoAccessTokenProvider.invalidateClientRegistration"
526-
)
495+
cache.invalidateClientRegistration(dagClientRegistrationCacheKey)
496+
cache.invalidateClientRegistration(pkceClientRegistrationCacheKey)
527497
}
528498

529499
private fun saveAccessToken(token: AccessToken) {

0 commit comments

Comments
 (0)