diff options
Diffstat (limited to 'bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/WorkbenchUserAuthenticator.java')
-rw-r--r-- | bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/WorkbenchUserAuthenticator.java | 362 |
1 files changed, 0 insertions, 362 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/WorkbenchUserAuthenticator.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/WorkbenchUserAuthenticator.java deleted file mode 100644 index f28cc5a59..000000000 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/WorkbenchUserAuthenticator.java +++ /dev/null @@ -1,362 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Atsuhiko Yamanaka, JCraft,Inc. - implementation of promptForKeyboradInteractive - *******************************************************************************/ -package org.eclipse.team.internal.ccvs.ui; - -import java.util.Map; - -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.window.Window; -import org.eclipse.osgi.util.NLS; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.*; -import org.eclipse.team.internal.ccvs.core.*; - -/** - * An authenticator that prompts the user for authentication info, - * and stores the results in the Platform's authentication key-ring. - */ -public class WorkbenchUserAuthenticator implements IUserAuthenticator { - public static boolean USE_ALTERNATE_PROMPTER = false; - - /** - * WorkbenchUserAuthenticator constructor. - */ - public WorkbenchUserAuthenticator() { - super(); - // Initialize USE_ALTERNATE_PROMPTER - IIgnoreInfo[] ignores = Team.getAllIgnores(); - boolean found = false; - for (int i = 0; i < ignores.length; i++) { - if (ignores[i].getPattern().equals("*.notes")) { //$NON-NLS-1$ - found = true; - } - } - if (!found) return; - IStringMapping[] mappings = Team.getFileContentManager().getExtensionMappings(); - for (int i = 0; i < mappings.length; i++) { - if (mappings[i].getString().equals("notes")) { //$NON-NLS-1$ - USE_ALTERNATE_PROMPTER = true; - return; - } - } - USE_ALTERNATE_PROMPTER = false; - } - /** - * @see IUserAuthenticator#authenticateUser - */ - public void promptForUserInfo(final ICVSRepositoryLocation location, final IUserInfo userinfo, final String message) throws CVSException { - if (!userinfo.isUsernameMutable() && USE_ALTERNATE_PROMPTER) { - alternatePromptForUserInfo(userinfo); - return; - } - // ask the user for a password - final String[] result = new String[2]; - Display display = Display.getCurrent(); - final boolean allowCaching[] = {false}; - if (display != null) { - allowCaching[0] = promptForPassword(location, userinfo.getUsername(), message, userinfo.isUsernameMutable(), result); - } else { - // sync exec in default thread - final CVSException[] exception = new CVSException[] { null }; - Display.getDefault().syncExec(new Runnable() { - public void run() { - try { - allowCaching[0] = promptForPassword(location, userinfo.getUsername(), message, userinfo.isUsernameMutable(), result); - } catch (CVSException e) { - exception[0] = e; - } - } - }); - if (exception[0] != null) { - throw exception[0]; - } - } - - if (result[0] == null) { - throw new OperationCanceledException(CVSUIMessages.WorkbenchUserAuthenticator_cancelled); - } - - if (userinfo.isUsernameMutable()) { - userinfo.setUsername(result[0]); - - } - userinfo.setPassword(result[1]); - - if(location != null) { - if (userinfo.isUsernameMutable()) { - location.setUsername(result[0]); - } - location.setPassword(result[1]); - location.setAllowCaching(allowCaching[0]); - } - } - - /** - * Asks the user to enter a password. Places the - * results in the supplied string[]. result[0] must - * contain the username, result[1] must contain the password. - * If the user canceled, both values must be zero. - * - * @param location the location to obtain the password for - * @param username the username - * @param message a message to display to the user - * @param userMutable whether the user can be changed in the dialog - * @param result a String array of length two in which to put the result - * @throws CVSException - */ - private boolean promptForPassword(final ICVSRepositoryLocation location, final String username, final String message, final boolean userMutable, final String[] result) throws CVSException { - String domain = location == null ? null : location.getLocation(true); - boolean cachingCheckbox=true; - - if(location != null && location.getMethod().getName().equals("pserverssh2")){ //$NON-NLS-1$ - /** - * If this method 'promptForPassword' is invoked for ssh2 connection, - * we want to disable the checkbox for password caching, because it will - * overwrite the password for pserver with the password for ssh2. - * - * In pserverssh2 connection type, its location name will be like - * pserverssh2:pserver_username@ssh2_username@ssh2_host@pserver_host - * - * The problem is that there is not a method to know if we are invoked from ssh2 or pserver. - * The following code will guess that if 'username' is equals to 'ssh2_userver' we are from ssh2, - * but if 'pserver2_username' is equals to 'ssh2_username', this guess will not be correct. - */ - String host = location.getHost(); // ssh2_username@ssh2_host@pserver_host - int index = host.indexOf("@"); //$NON-NLS-1$ - if (index != -1) { - cachingCheckbox = false; - if (index != 0) { - if (!username.equals(host.substring(0, index))) { - cachingCheckbox = true; - } - } - } - } - - UserValidationDialog dialog = new UserValidationDialog(null, domain, (username==null)?"":username, message, cachingCheckbox);//$NON-NLS-1$ - dialog.setUsernameMutable(userMutable); - dialog.open(); - result[0] = dialog.getUsername(); - result[1] = dialog.getPassword(); - return dialog.getAllowCaching(); - } - - /** - * Asks the user to enter values. - * - * @param location the location to obtain the password for - * @param destication the location - * @param name the name - * @param instruction the instruction - * @param prompt the titles for text fields - * @param echo '*' should be used or not - * @param result the entered values, or null if user canceled. - */ - public String[] promptForKeyboradInteractive(final ICVSRepositoryLocation location, - final String destination, - final String name, - final String instruction, - final String[] prompt, - final boolean[] echo) throws CVSException { - final String[][] result = new String[1][]; - final boolean[] allowCaching=new boolean[1]; - Display display = Display.getCurrent(); - if (display != null) { - result[0]=_promptForUserInteractive(location, destination, name, instruction, prompt, echo, allowCaching); - } - else { - // sync exec in default thread - Display.getDefault().syncExec(new Runnable() { - public void run() { - result[0]=_promptForUserInteractive(location, destination, name, instruction, prompt, echo, allowCaching); - } - }); - } - if (result[0] != null && location != null && - KeyboardInteractiveDialog.isPasswordAuth(prompt)) { - location.setPassword(result[0][0]); - location.setAllowCaching(allowCaching[0]); - } - return result[0]; - } - - private String[] _promptForUserInteractive(final ICVSRepositoryLocation location, - final String destination, - final String name, - final String instruction, - final String[] prompt, - final boolean[] echo, - final boolean[] allowCaching) { - - String domain = location == null ? null : location.getLocation(true); - String userName = location == null ? null : location.getUsername(); - boolean cachingCheckbox=true; - - if (location != null - && location.getMethod().getName().equals("pserverssh2")) { //$NON-NLS-1$ - /** - * We want to disable the checkbox for password caching, because it will - * overwrite the password for pserver with the password for ssh2. - * - * In pserverssh2 connection type, its location name will be like - * pserverssh2:pserver_username@ssh2_username@ssh2_host@pserver_host - * - * 'userName' is 'pserver_username', so we also have to change it to 'ssh2_username'. - */ - String host = location.getHost(); // ssh2_username@ssh2_host@pserver_host - int index = host.indexOf("@"); //$NON-NLS-1$ - if (index != -1) { - if (index != 0) { - userName = host.substring(0, index); - } - cachingCheckbox = false; - } - } - - KeyboardInteractiveDialog dialog = new KeyboardInteractiveDialog(null, - domain, - destination, - name, - userName, - instruction, - prompt, - echo, - cachingCheckbox); - dialog.open(); - String[] _result=dialog.getResult(); - if(_result!=null) - allowCaching[0]=dialog.getAllowCaching(); - return _result; - } - - /** - * Special alternate prompting. Returns the password. Username must be fixed. - */ - private String alternatePromptForPassword(final String username) { - AlternateUserValidationDialog dialog = new AlternateUserValidationDialog(null, (username == null) ? "" : username); //$NON-NLS-1$ - dialog.setUsername(username); - int result = dialog.open(); - if (result == Window.CANCEL) return null; - return dialog.getPassword(); - } - - /** - * Special alternate prompting. - */ - public void alternatePromptForUserInfo(final IUserInfo userinfo) { - // ask the user for a password - final String[] result = new String[1]; - Display display = Display.getCurrent(); - if (display != null) { - result[0] = alternatePromptForPassword(userinfo.getUsername()); - } else { - // sync exec in default thread - Display.getDefault().syncExec(new Runnable() { - public void run() { - result[0] = alternatePromptForPassword(userinfo.getUsername()); - } - }); - } - - if (result[0] == null) { - throw new OperationCanceledException(CVSUIMessages.WorkbenchUserAuthenticator_The_operation_was_canceled_by_the_user_1); - } - - userinfo.setPassword(result[0]); - } - - /* (non-Javadoc) - * @see org.eclipse.team.internal.ccvs.core.IUserAuthenticator#prompt(org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation, int, java.lang.String, java.lang.String, int[], int) - */ - public int prompt(final ICVSRepositoryLocation location, final int promptType, final String title, final String message, final int[] promptResponses, final int defaultResponse) { - final Display display = CVSUIPlugin.getStandardDisplay(); - final int[] retval = new int[1]; - final String[] buttons = new String[promptResponses.length]; - for (int i = 0; i < promptResponses.length; i++) { - int prompt = promptResponses[i]; - switch(prompt) { - case IUserAuthenticator.OK_ID: buttons[i] = IDialogConstants.OK_LABEL; break; - case IUserAuthenticator.CANCEL_ID: buttons[i] = IDialogConstants.CANCEL_LABEL; break; - case IUserAuthenticator.NO_ID: buttons[i] = IDialogConstants.NO_LABEL; break; - case IUserAuthenticator.YES_ID: buttons[i] = IDialogConstants.YES_LABEL; break; - } - } - - display.syncExec(new Runnable() { - public void run() { - final MessageDialog dialog = new MessageDialog( - new Shell(display), - title, - null /* title image */, - NLS.bind(CVSUIMessages.WorkbenchUserAuthenticator_0, message, location.getLocation(true)), - promptType, - buttons, - 1 - ); - retval[0] = dialog.open(); - } - }); - return retval[0]; - } - - public boolean promptForHostKeyChange(final ICVSRepositoryLocation location) { - final boolean[] openConfirm = new boolean[] { false }; - final Display display = CVSUIPlugin.getStandardDisplay(); - display.syncExec(new Runnable() { - public void run() { - openConfirm[0] = MessageDialog.openConfirm(null, CVSUIMessages.WorkbenchUserAuthenticator_1, NLS.bind(CVSUIMessages.WorkbenchUserAuthenticator_2, new String[] { location.getHost() })); // - } - }); - if (!openConfirm[0]) { - throw new OperationCanceledException(); - } - return openConfirm[0]; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.team.internal.ccvs.core.IUserAuthenticator#promptToConfigureRepositoryLocations(java.util.Map) - */ - public Map promptToConfigureRepositoryLocations(final Map alternativeMap) { - final Map[] result = new Map[1]; - Display display = Display.getCurrent(); - if (display != null) { - result[0] = openAlternativeRepositoryDialog(alternativeMap); - } else { - // sync exec in default thread - Display.getDefault().syncExec(new Runnable() { - public void run() { - result[0] = openAlternativeRepositoryDialog(alternativeMap); - } - }); - } - return result[0]; - } - - /** - * Opens the Alternative Repository Selection dialog. - * - * @param alternativeMap - * @return a map with selected repositories to use or <code>null</code> - * when canceled. - */ - private Map openAlternativeRepositoryDialog(Map alternativeMap) { - ConfigureRepositoryLocationsDialog dialog = new ConfigureRepositoryLocationsDialog( - null, alternativeMap); - int result = dialog.open(); - return result == IDialogConstants.CANCEL_ID ? null : dialog - .getSelected(); - } -} |