Skip to content

Commit e182567

Browse files
committed
send token to Flare every 10 seconds
1 parent 9109943 commit e182567

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/auth/DefaultAuthCredentialsService.kt

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@ package software.aws.toolkits.jetbrains.services.amazonq.lsp.auth
55

66
import com.intellij.openapi.Disposable
77
import com.intellij.openapi.project.Project
8+
import com.intellij.util.concurrency.AppExecutorUtil
89
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage
910
import software.aws.toolkits.core.TokenConnectionSettings
11+
import software.aws.toolkits.core.utils.getLogger
12+
import software.aws.toolkits.core.utils.warn
1013
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection
1114
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
1215
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManagerListener
@@ -26,6 +29,9 @@ import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileSe
2629
import software.aws.toolkits.jetbrains.utils.isQConnected
2730
import software.aws.toolkits.jetbrains.utils.isQExpired
2831
import java.util.concurrent.CompletableFuture
32+
import java.util.concurrent.ScheduledExecutorService
33+
import java.util.concurrent.ScheduledFuture
34+
import java.util.concurrent.TimeUnit
2935

3036
class DefaultAuthCredentialsService(
3137
private val project: Project,
@@ -34,7 +40,12 @@ class DefaultAuthCredentialsService(
3440
) : AuthCredentialsService,
3541
BearerTokenProviderListener,
3642
ToolkitConnectionManagerListener,
37-
QRegionProfileSelectedListener {
43+
QRegionProfileSelectedListener,
44+
Disposable {
45+
46+
private val scheduler: ScheduledExecutorService = AppExecutorUtil.getAppScheduledExecutorService()
47+
private var tokenSyncTask: ScheduledFuture<*>? = null
48+
private val tokenSyncIntervalSeconds = 10L
3849

3950
init {
4051
project.messageBus.connect(serverInstance).apply {
@@ -49,6 +60,26 @@ class DefaultAuthCredentialsService(
4960
updateConfiguration()
5061
}
5162
}
63+
64+
// Start periodic token sync
65+
startPeriodicTokenSync()
66+
}
67+
68+
private fun startPeriodicTokenSync() {
69+
tokenSyncTask = scheduler.scheduleWithFixedDelay(
70+
{
71+
try {
72+
if (isQConnected(project) && !isQExpired(project)) {
73+
updateTokenFromActiveConnection()
74+
}
75+
} catch (e: Exception) {
76+
LOG.warn(e) { "Failed to sync bearer token to Flare" }
77+
}
78+
},
79+
tokenSyncIntervalSeconds,
80+
tokenSyncIntervalSeconds,
81+
TimeUnit.SECONDS
82+
)
5283
}
5384

5485
override fun updateTokenCredentials(accessToken: String, encrypted: Boolean): CompletableFuture<ResponseMessage> {
@@ -134,4 +165,13 @@ class DefaultAuthCredentialsService(
134165
server.updateConfiguration(payload)
135166
} ?: (CompletableFuture.failedFuture(IllegalStateException("LSP Server not running")))
136167
}
168+
169+
override fun dispose() {
170+
tokenSyncTask?.cancel(false)
171+
tokenSyncTask = null
172+
}
173+
174+
companion object {
175+
private val LOG = getLogger<DefaultAuthCredentialsService>()
176+
}
137177
}

0 commit comments

Comments
 (0)