/* * 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.plugin.securityconfig.masterpassword; import java.awt.event.*; import net.java.sip.communicator.plugin.securityconfig.*; import net.java.sip.communicator.service.credentialsstorage.*; import net.java.sip.communicator.plugin.desktoputil.*; /** * UI dialog to change the master password. * * @author Dmitri Melnikov * @author Boris Grozev */ public class MasterPasswordChangeDialog extends PasswordChangeDialog implements ActionListener, KeyListener { /** * Callback interface. Implementing classes know how to change the master * password from the old to the new one. */ interface MasterPasswordExecutable { /** * The actions to execute to change the master password. * * @param masterPassword old master password * @param newMasterPassword new master password * @return true on success, false on failure. */ public boolean execute(String masterPassword, String newMasterPassword); } /** * Callback to execute on password change. */ private MasterPasswordExecutable callback; /** * Dialog instance of this class. */ private static MasterPasswordChangeDialog dialog; /** * Builds the dialog. */ private MasterPasswordChangeDialog() { super(SecurityConfigActivator.getCredentialsStorageService() .isUsingMasterPassword()); setTitle(resources.getI18NString( "plugin.securityconfig.masterpassword.MP_TITLE")); setInfoText(resources.getI18NString( "plugin.securityconfig.masterpassword.INFO_TEXT")); getOkButton().addActionListener(this); } /** * OK button event handler. * * @param e action event */ public void actionPerformed(ActionEvent e) { boolean close = false; CredentialsStorageService credentialsStorageService = SecurityConfigActivator.getCredentialsStorageService(); String oldMasterPassword = null; if (credentialsStorageService.isUsingMasterPassword()) { oldMasterPassword = getCurrentPassword(); if (oldMasterPassword.length() == 0) { displayPopupError(resources.getI18NString( "plugin.securityconfig.masterpassword.MP_CURRENT_EMPTY")); return; } boolean verified = credentialsStorageService .verifyMasterPassword(oldMasterPassword); if (!verified) { displayPopupError(resources.getI18NString( "plugin.securityconfig.masterpassword.MP_VERIFICATION_FAILURE_MSG")); return; } } // if the callback executes OK, we close the dialog if (callback != null) { close = callback.execute(oldMasterPassword, getNewPassword()); } if (close) { dialog = null; dispose(); } } /** * @return dialog instance */ public static MasterPasswordChangeDialog getInstance() { if (dialog == null) dialog = new MasterPasswordChangeDialog(); return dialog; } /** * @param callbackInstance callback instance. */ public void setCallback(MasterPasswordExecutable callbackInstance) { this.callback = callbackInstance; } }