Skip to content
This repository was archived by the owner on Apr 23, 2025. It is now read-only.

Commit e3e247a

Browse files
authored
fix: load/save token in a task, avoid slow operation error (#958) (#965)
Signed-off-by: Andre Dietisheim <[email protected]>
1 parent 8cede1f commit e3e247a

File tree

1 file changed

+35
-8
lines changed

1 file changed

+35
-8
lines changed

src/main/java/org/jboss/tools/intellij/openshift/oauth/model/ServersRepository.java

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@
1717
import com.intellij.openapi.components.Service;
1818
import com.intellij.openapi.components.State;
1919
import com.intellij.openapi.components.Storage;
20+
import com.intellij.openapi.progress.ProgressIndicator;
21+
import com.intellij.openapi.progress.Task;
2022
import org.jboss.tools.intellij.openshift.Constants;
2123
import org.jdom.Element;
2224
import org.jetbrains.annotations.NotNull;
23-
import org.jetbrains.annotations.Nullable;
2425

2526
import java.util.ArrayList;
2627
import java.util.List;
@@ -48,16 +49,29 @@ private CredentialAttributes getAttributes(IAccount account, String attribute) {
4849
}
4950

5051
private Element account2Node(IAccount account) {
52+
savePasswordSafe(account);
5153
Element node = new Element(ACCOUNT_TAG);
5254
node.setAttribute(ID_ATTRIBUTE, account.getId());
53-
PasswordSafe.getInstance().set(getAttributes(account, ID_TOKEN_ATTRIBUTE), new Credentials(null, account.getIDToken()));
54-
PasswordSafe.getInstance().set(getAttributes(account, ACCESS_TOKEN_ATTRIBUTE), new Credentials(null, account.getAccessToken()));
55-
PasswordSafe.getInstance().set(getAttributes(account, REFRESH_TOKEN_ATTRIBUTE), new Credentials(null, account.getRefreshToken()));
5655
node.setAttribute(ACCESS_TOKEN_EXPIRES_IN_ATTRIBUTE, String.valueOf(account.getAccessTokenExpiryTime()));
5756
node.setAttribute(REFRESH_TOKEN_EXPIRES_IN_ATTRIBUTE, String.valueOf(account.getRefreshTokenExpiryTime()));
5857
node.setAttribute(LAST_REFRESHED_TIME_ATTRIBUTE, String.valueOf(account.getLastRefreshedTime()));
5958
return node;
6059
}
60+
61+
private void savePasswordSafe(IAccount account) {
62+
var task = new Task.Backgroundable(null, "Saving tokens", false) {
63+
@Override
64+
public void run(@NotNull ProgressIndicator progressIndicator) {
65+
var safe = PasswordSafe.getInstance();
66+
safe.set(getAttributes(account, ID_TOKEN_ATTRIBUTE), new Credentials(null, account.getIDToken()));
67+
safe.set(getAttributes(account, ACCESS_TOKEN_ATTRIBUTE), new Credentials(null, account.getAccessToken()));
68+
safe.set(getAttributes(account, REFRESH_TOKEN_ATTRIBUTE), new Credentials(null, account.getRefreshToken()));
69+
}
70+
};
71+
72+
task.queue();
73+
}
74+
6175
private Element server2Node(IAuthorizationServer server) {
6276
Element node = new Element(SERVER_TAG);
6377
node.setAttribute(ID_ATTRIBUTE, server.getId());
@@ -68,7 +82,7 @@ private Element server2Node(IAuthorizationServer server) {
6882
}
6983

7084
@Override
71-
public @Nullable Element getState() {
85+
public Element getState() {
7286
Element root = new Element(SERVERS_TAG);
7387
for(IAuthorizationServer server : servers) {
7488
root.addContent(server2Node(server));
@@ -83,9 +97,7 @@ public void loadState(@NotNull Element state) {
8397
IAuthorizationServer server = new AuthorizationServer(serverNode.getAttributeValue(ID_ATTRIBUTE));
8498
for(Element accountNode : serverNode.getChildren(ACCOUNT_TAG)) {
8599
IAccount account = new Account(accountNode.getAttributeValue(ID_ATTRIBUTE), server);
86-
account.setIDToken(PasswordSafe.getInstance().getPassword(getAttributes(account, ID_TOKEN_ATTRIBUTE)));
87-
account.setAccessToken(PasswordSafe.getInstance().getPassword(getAttributes(account, ACCESS_TOKEN_ATTRIBUTE)));
88-
account.setRefreshToken(PasswordSafe.getInstance().getPassword(getAttributes(account, REFRESH_TOKEN_ATTRIBUTE)));
100+
loadPasswordSafe(account);
89101
account.setAccessTokenExpiryTime(Long.parseLong(accountNode.getAttributeValue(ACCESS_TOKEN_EXPIRES_IN_ATTRIBUTE)));
90102
account.setRefreshTokenExpiryTime(Long.parseLong(accountNode.getAttributeValue(REFRESH_TOKEN_EXPIRES_IN_ATTRIBUTE)));
91103
account.setLastRefreshedTime(Long.parseLong(accountNode.getAttributeValue(LAST_REFRESHED_TIME_ATTRIBUTE)));
@@ -95,6 +107,21 @@ public void loadState(@NotNull Element state) {
95107
}
96108
}
97109

110+
private void loadPasswordSafe(IAccount account) {
111+
var task = new Task.Backgroundable(null, "Loading tokens", false) {
112+
@Override
113+
public void run(@NotNull ProgressIndicator progressIndicator) {
114+
var safe = PasswordSafe.getInstance();
115+
account.setIDToken(safe.getPassword(getAttributes(account, ID_TOKEN_ATTRIBUTE)));
116+
account.setAccessToken(safe.getPassword(getAttributes(account, ACCESS_TOKEN_ATTRIBUTE)));
117+
account.setRefreshToken(safe.getPassword(getAttributes(account, REFRESH_TOKEN_ATTRIBUTE)));
118+
}
119+
};
120+
121+
task.queue();
122+
123+
}
124+
98125
public List<IAuthorizationServer> getServers() {
99126
return servers;
100127
}

0 commit comments

Comments
 (0)