@@ -18,6 +18,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryp
1818import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.BearerCredentials
1919import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.UpdateCredentialsPayload
2020import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.UpdateCredentialsPayloadData
21+ import software.aws.toolkits.jetbrains.utils.isQConnected
22+ import software.aws.toolkits.jetbrains.utils.isQExpired
2123import java.util.concurrent.CompletableFuture
2224
2325class DefaultAuthCredentialsService (
@@ -28,55 +30,17 @@ class DefaultAuthCredentialsService(
2830 BearerTokenProviderListener ,
2931 ToolkitConnectionManagerListener {
3032
31- init {
32- project.messageBus.connect(serverInstance).subscribe(BearerTokenProviderListener .TOPIC , this )
33- project.messageBus.connect(serverInstance).subscribe(ToolkitConnectionManagerListener .TOPIC , this )
34-
35- val connection = ToolkitConnectionManager .getInstance(project)
36- .activeConnectionForFeature(QConnection .getInstance())
37-
38- val provider = (connection?.getConnectionSettings() as ? TokenConnectionSettings )
39- ?.tokenProvider
40- ?.delegate as ? BearerTokenProvider
41-
42- provider?.currentToken()?.accessToken?.let { token ->
43- updateTokenCredentials(token, true )
44- }
45- }
46-
47- override fun onChange (providerId : String , newScopes : List <String >? ) {
48- val connection = ToolkitConnectionManager .getInstance(project).activeConnectionForFeature(QConnection .getInstance())
49- ? : return
50- val provider = (connection.getConnectionSettings() as ? TokenConnectionSettings )
51- ?.tokenProvider
52- ?.delegate as ? BearerTokenProvider
53- ? : return
54-
55- provider.currentToken()?.accessToken?.let { token ->
56- updateTokenCredentials(token, true )
33+ init {
34+ project.messageBus.connect(serverInstance).apply {
35+ subscribe(BearerTokenProviderListener .TOPIC , this @DefaultAuthCredentialsService)
36+ subscribe(ToolkitConnectionManagerListener .TOPIC , this @DefaultAuthCredentialsService)
5737 }
58- }
5938
60- override fun activeConnectionChanged (newConnection : ToolkitConnection ? ) {
61- val qConnection = ToolkitConnectionManager .getInstance(project)
62- .activeConnectionForFeature(QConnection .getInstance())
63- ? : return
64- if (newConnection?.id != qConnection.id) return
65- // Handle new connection
66- val provider = (newConnection.getConnectionSettings() as ? TokenConnectionSettings )
67- ?.tokenProvider
68- ?.delegate as ? BearerTokenProvider
69- ? : return
70-
71- provider.currentToken()?.accessToken?.let { token ->
72- updateTokenCredentials(token, true )
39+ if (isQConnected(project) && ! isQExpired(project)) {
40+ updateTokenFromActiveConnection()
7341 }
7442 }
7543
76- override fun invalidate (providerId : String ) {
77- deleteTokenCredentials()
78- }
79-
8044 override fun updateTokenCredentials (accessToken : String , encrypted : Boolean ): CompletableFuture <ResponseMessage > {
8145 val payload = createUpdateCredentialsPayload(accessToken, encrypted)
8246
@@ -93,6 +57,41 @@ class DefaultAuthCredentialsService(
9357 } ? : completableFuture.completeExceptionally(IllegalStateException (" LSP Server not running" ))
9458 }
9559
60+ override fun onChange (providerId : String , newScopes : List <String >? ) {
61+ updateTokenFromActiveConnection()
62+ }
63+
64+ override fun activeConnectionChanged (newConnection : ToolkitConnection ? ) {
65+ val qConnection = ToolkitConnectionManager .getInstance(project)
66+ .activeConnectionForFeature(QConnection .getInstance())
67+ ? : return
68+ if (newConnection?.id != qConnection.id) return
69+
70+ updateTokenFromConnection(newConnection)
71+ }
72+
73+ private fun updateTokenFromActiveConnection () {
74+ val connection = ToolkitConnectionManager .getInstance(project)
75+ .activeConnectionForFeature(QConnection .getInstance())
76+ ? : return
77+
78+ updateTokenFromConnection(connection)
79+ }
80+
81+ private fun updateTokenFromConnection (connection : ToolkitConnection ) {
82+ (connection.getConnectionSettings() as ? TokenConnectionSettings )
83+ ?.tokenProvider
84+ ?.delegate
85+ ?.let { it as ? BearerTokenProvider }
86+ ?.currentToken()
87+ ?.accessToken
88+ ?.let { token -> updateTokenCredentials(token, true ) }
89+ }
90+
91+ override fun invalidate (providerId : String ) {
92+ deleteTokenCredentials()
93+ }
94+
9695 private fun createUpdateCredentialsPayload (token : String , encrypted : Boolean ): UpdateCredentialsPayload =
9796 if (encrypted) {
9897 UpdateCredentialsPayload (
0 commit comments