Using PasswordSafe to load credentials editable in a Configurable

Answered

I'm trying to implement a plugin that requires the user to input some credentials the right way, using PasswordSafe and a Configurable. However, no matter how I twist my logic of when I read the credentials from PasswordSafe, I always end up with the ‘Slow operations are prohibited on EDT.’  error.

I have a Settings class that has all the plugin's settings, along with the credentials. This is the class I wish to use throughout my plugin and these data must be available to it. To avoid persisting the credentials, I've annotated them as @Transient, but the fields are present in the class.

Now, I wish to enable the user to edit these Settings using a Configurable. To do so, before I present the user with the old credentials, I must fetch them from the PasswordSafe. But regardless of whether I do this in PersistentStateComponent.loadState() or Configurable.reset(), I always get the ‘Slow operations are prohibited on EDT.’  error.

I've tried consulting the “How to use PasswordSafe” (https://plugins.jetbrains.com/docs/intellij/persisting-sensitive-data.html), but the examples are all removed from any context, including this one.

So, where should I do this step so that I don't get this error?

0
1 comment

I've solved the problem. I've added a StartupActivity that loads all the passwords from PasswordSafe before the Configurable needs to show them to the user, as well as a Task.Backgroundable that persists the modified passwords in Configurable.apply().

0

Please sign in to leave a comment.