From 8e6b0aa8e8ea94fa9be96123e51555a650cd9d3c Mon Sep 17 00:00:00 2001 From: irengrig Date: Tue, 15 Feb 2011 23:36:10 +0300 Subject: [PATCH] SVN: ask GNOME Keyring password --- .../idea/svn/SvnAuthenticationManager.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationManager.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationManager.java index 6c10446fdc44..0542feabb651 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationManager.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationManager.java @@ -31,6 +31,7 @@ import com.intellij.openapi.vcs.changes.committed.AbstractCalledLater; import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier; import com.intellij.util.EventDispatcher; import com.intellij.util.net.HttpConfigurable; +import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.svn.auth.ProviderType; import org.jetbrains.idea.svn.auth.SvnAuthenticationInteraction; @@ -150,10 +151,12 @@ public class SvnAuthenticationManager extends DefaultSVNAuthenticationManager im private class PersistentAuthenticationProviderProxy implements ISVNAuthenticationProvider, ISVNPersistentAuthenticationProvider { private final ISVNAuthenticationProvider myDelegate; + private final ISVNGnomeKeyringPasswordProvider myISVNGnomeKeyringPasswordProvider; private final File myAuthDir; private Project myProject; private PersistentAuthenticationProviderProxy(File authDir, String userName) { + myISVNGnomeKeyringPasswordProvider = new MyKeyringMasterKeyProvider(myProject); ISVNAuthenticationStorageOptions delegatingOptions = new ISVNAuthenticationStorageOptions() { public boolean isNonInteractive() throws SVNException { return getAuthenticationStorageOptions().isNonInteractive(); @@ -165,7 +168,7 @@ public class SvnAuthenticationManager extends DefaultSVNAuthenticationManager im @Override public ISVNGnomeKeyringPasswordProvider getGnomeKeyringPasswordProvider() { - return getAuthenticationStorageOptions().getGnomeKeyringPasswordProvider(); + return myISVNGnomeKeyringPasswordProvider; } @Override @@ -790,4 +793,24 @@ public class SvnAuthenticationManager extends DefaultSVNAuthenticationManager im return myDelegate.readPassphrase(realm, authParameters); } } + + private static class MyKeyringMasterKeyProvider implements ISVNGnomeKeyringPasswordProvider { + private final Project myProject; + + public MyKeyringMasterKeyProvider(Project project) { + myProject = project; + } + + @Override + public String getKeyringPassword(final String keyringName) throws SVNException { + final String[] s = new String[1]; + UIUtil.invokeAndWaitIfNeeded(new Runnable() { + @Override + public void run() { + s[0] = Messages.showInputDialog(myProject, "Please provide '" + keyringName + "' GNOME Keyring password", "Subversion", Messages.getQuestionIcon()); + } + }); + return s[0]; + } + } }