package org.eclipse.update.internal.ui; | |
/* | |
* (c) Copyright IBM Corp. 2000, 2001. | |
* All Rights Reserved. | |
*/ | |
import java.net.URL; | |
import java.util.Hashtable; | |
import java.util.Map; | |
import org.eclipse.core.runtime.CoreException; | |
import org.eclipse.core.runtime.Platform; | |
import org.eclipse.swt.widgets.Display; | |
import org.eclipse.swt.widgets.Shell; | |
import org.eclipse.update.internal.core.UpdateManagerPlugin; | |
import org.eclipse.webdav.http.client.IAuthenticator; | |
/** | |
* A transient database that remembers information, such as usernames and | |
* passwords. The information is stored in memory only and is discarted | |
* when the Plaform shuts down. | |
*/ | |
public class AuthorizationDatabase implements IAuthenticator { | |
/** | |
* The Map containing the userid and password | |
*/ | |
private Map result = new Hashtable(); | |
/** | |
* | |
*/ | |
public void addAuthenticationInfo(URL serverUrl, String realm, String scheme, Map info) { | |
try { | |
Platform.addAuthorizationInfo(serverUrl, realm, scheme, info); | |
} | |
catch (CoreException e) { | |
UpdateManagerPlugin.getPluginInstance().getLog().log(e.getStatus()); | |
} | |
} | |
/** | |
* | |
*/ | |
public void addProtectionSpace(URL resourceUrl, String realm) { | |
try { | |
Platform.addProtectionSpace(resourceUrl, realm); | |
} | |
catch (CoreException e) { | |
UpdateManagerPlugin.getPluginInstance().getLog().log(e.getStatus()); | |
} | |
} | |
/** | |
* | |
*/ | |
public Map getAuthenticationInfo(URL serverUrl, String realm, String scheme) { | |
return Platform.getAuthorizationInfo(serverUrl, realm, scheme); | |
} | |
/** | |
* | |
*/ | |
public String getProtectionSpace(URL resourceUrl) { | |
return Platform.getProtectionSpace(resourceUrl); | |
} | |
/** | |
* | |
*/ | |
public Map requestAuthenticationInfo(final URL resourceUrl, final String realm, final String scheme) { | |
result = new Hashtable(); | |
if (scheme.equalsIgnoreCase("Basic")) { | |
Display disp = Display.getCurrent(); | |
if (disp != null) { | |
promptForPassword(resourceUrl, realm, result); | |
} | |
else { | |
Display.getDefault().syncExec(new Runnable() { | |
public void run() { | |
promptForPassword(resourceUrl, realm, result); | |
} | |
}); | |
}; | |
} | |
return result; | |
} | |
/** | |
* | |
*/ | |
private void promptForPassword(URL resourceUrl, String realm, Map info) { | |
Shell shell = new Shell(); | |
UserValidationDialog ui = new UserValidationDialog(shell, resourceUrl, realm, ""); | |
ui.setUsernameMutable(true); | |
ui.setBlockOnOpen(true); | |
ui.open(); | |
if (ui.getReturnCode() != ui.CANCEL) { | |
info.put("username", ui.getUserid()); | |
info.put("password", ui.getPassword()); | |
} | |
shell.dispose(); | |
} | |
} |