/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.impl.gui.main.login; import javax.swing.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.service.protocol.*; /** * Utility class that can be used in cases where components other than the main * user interface may need to launch provider registration. At the time I am * writing this, the <tt>DefaultSecurityAuthority</tt> is being used by the * systray and uri handlers. * * @author Yana Stamcheva * @author Emil Ivov */ public class DefaultSecurityAuthority implements SecurityAuthority { private ProtocolProviderService protocolProvider; private boolean isUserNameEditable = false; /** * Creates an instance of <tt>SecurityAuthorityImpl</tt>. * * @param protocolProvider The <tt>ProtocolProviderService</tt> for this * <tt>SecurityAuthority</tt>. */ public DefaultSecurityAuthority(ProtocolProviderService protocolProvider) { this.protocolProvider = protocolProvider; } /** * Implements the <code>SecurityAuthority.obtainCredentials</code> method. * Creates and show an <tt>AuthenticationWindow</tt>, where user could enter * its password. * @param realm The realm that the credentials are needed for. * @param userCredentials the values to propose the user by default * @param reasonCode indicates the reason for which we're obtaining the * credentials. * @return The credentials associated with the specified realm or null if * none could be obtained. */ public UserCredentials obtainCredentials( String realm, UserCredentials userCredentials, int reasonCode) { String errorMessage = null; if (reasonCode == WRONG_PASSWORD || reasonCode == WRONG_USERNAME) { errorMessage = GuiActivator.getResources().getI18NString( "service.gui.AUTHENTICATION_FAILED", new String[]{realm}); } AuthenticationWindow loginWindow = null; String userName = userCredentials.getUserName(); char[] password = userCredentials.getPassword(); ImageIcon icon = AuthenticationWindow.getAuthenticationWindowIcon(protocolProvider); if (errorMessage == null) loginWindow = new AuthenticationWindow( userName, password, realm, isUserNameEditable, icon); else loginWindow = new AuthenticationWindow( userName, password, realm, isUserNameEditable, icon, errorMessage); loginWindow.setVisible(true); if (!loginWindow.isCanceled()) { userCredentials.setUserName(loginWindow.getUserName()); userCredentials.setPassword(loginWindow.getPassword()); userCredentials.setPasswordPersistent( loginWindow.isRememberPassword()); } else { userCredentials.setUserName(null); userCredentials = null; } return userCredentials; } /** * Implements the <code>SecurityAuthority.obtainCredentials</code> method. * Creates and show an <tt>AuthenticationWindow</tt>, where user could enter * its password. * @param realm The realm that the credentials are needed for. * @param userCredentials the values to propose the user by default * @return The credentials associated with the specified realm or null if * none could be obtained. */ public UserCredentials obtainCredentials( String realm, UserCredentials userCredentials) { return this.obtainCredentials(realm, userCredentials, SecurityAuthority.AUTHENTICATION_REQUIRED); } /** * Sets the userNameEditable property, which indicates if the user name * could be changed by user or not. * * @param isUserNameEditable indicates if the user name could be changed by * user */ public void setUserNameEditable(boolean isUserNameEditable) { this.isUserNameEditable = isUserNameEditable; } /** * Indicates if the user name is currently editable, i.e. could be changed * by user or not. * * @return <code>true</code> if the user name could be changed, * <code>false</code> - otherwise. */ public boolean isUserNameEditable() { return isUserNameEditable; } }