Support resetting user's master password.
This commit is contained in:
@@ -21,6 +21,7 @@ package com.lyndir.masterpassword.gui.util;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
@@ -91,11 +92,21 @@ public abstract class Components {
|
||||
return new GradientPanel( layout, color );
|
||||
}
|
||||
|
||||
public static JDialog showDialog(@Nullable final Component owner, @Nullable final String title, final JOptionPane pane) {
|
||||
public static int showDialog(@Nullable final Component owner, @Nullable final String title, final JOptionPane pane) {
|
||||
JDialog dialog = pane.createDialog( owner, title );
|
||||
dialog.setModalityType( Dialog.ModalityType.DOCUMENT_MODAL );
|
||||
showDialog( dialog );
|
||||
|
||||
return showDialog( dialog );
|
||||
Object selectedValue = pane.getValue();
|
||||
if(selectedValue == null)
|
||||
return JOptionPane.CLOSED_OPTION;
|
||||
|
||||
Object[] options = pane.getOptions();
|
||||
if(options == null)
|
||||
return (selectedValue instanceof Integer)? (Integer) selectedValue: JOptionPane.CLOSED_OPTION;
|
||||
|
||||
int option = Arrays.binarySearch( options, selectedValue );
|
||||
return (option < 0)? JOptionPane.CLOSED_OPTION: option;
|
||||
}
|
||||
|
||||
public static JDialog showDialog(@Nullable final Component owner, @Nullable final String title, final Container content) {
|
||||
|
@@ -132,6 +132,10 @@ public abstract class Res {
|
||||
return icon( "media/icon_lock.png" );
|
||||
}
|
||||
|
||||
public Icon reset() {
|
||||
return icon( "media/icon_reset.png" );
|
||||
}
|
||||
|
||||
public Icon settings() {
|
||||
return icon( "media/icon_settings.png" );
|
||||
}
|
||||
|
@@ -37,8 +37,8 @@ public class UserContentPanel extends JPanel implements FilesPanel.Listener, MPU
|
||||
private static final Logger logger = Logger.get( UserContentPanel.class );
|
||||
private static final JButton iconButton = Components.button( Res.icons().user(), null, null );
|
||||
|
||||
private final JButton addButton = Components.button( Res.icons().add(), event -> addUser(),
|
||||
"Add a new user to Master Password." );
|
||||
private final JButton addButton = Components.button( Res.icons().add(), event -> addUser(),
|
||||
"Add a new user to Master Password." );
|
||||
|
||||
private final JPanel userToolbar = Components.panel( BoxLayout.PAGE_AXIS );
|
||||
private final JPanel siteToolbar = Components.panel( BoxLayout.PAGE_AXIS );
|
||||
@@ -142,6 +142,8 @@ public class UserContentPanel extends JPanel implements FilesPanel.Listener, MPU
|
||||
|
||||
private final JButton deleteButton = Components.button( Res.icons().delete(), event -> deleteUser(),
|
||||
"Delete this user from Master Password." );
|
||||
private final JButton resetButton = Components.button( Res.icons().reset(), event -> resetUser(),
|
||||
"Change the master password for this user." );
|
||||
|
||||
private final JPasswordField masterPasswordField = Components.passwordField();
|
||||
private final JLabel errorLabel = Components.label();
|
||||
@@ -156,6 +158,7 @@ public class UserContentPanel extends JPanel implements FilesPanel.Listener, MPU
|
||||
|
||||
userToolbar.add( addButton );
|
||||
userToolbar.add( deleteButton );
|
||||
userToolbar.add( resetButton );
|
||||
|
||||
add( Components.heading( user.getFullName(), SwingConstants.CENTER ) );
|
||||
add( Components.strut() );
|
||||
@@ -180,12 +183,48 @@ public class UserContentPanel extends JPanel implements FilesPanel.Listener, MPU
|
||||
return;
|
||||
|
||||
if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(
|
||||
this, strf( "<html>Delete the user <strong>%s</strong>?<br><br><em>%s</em></html>",
|
||||
fileUser.getFullName(), fileUser.getFile().getName() ),
|
||||
SwingUtilities.windowForComponent( this ), strf( "<html>Delete the user <strong>%s</strong>?<br><br><em>%s</em></html>",
|
||||
fileUser.getFullName(), fileUser.getFile().getName() ),
|
||||
"Delete User", JOptionPane.YES_NO_OPTION ))
|
||||
MPFileUserManager.get().delete( fileUser );
|
||||
}
|
||||
|
||||
private void resetUser() {
|
||||
JPasswordField passwordField = Components.passwordField();
|
||||
if (JOptionPane.OK_OPTION == Components.showDialog( this, "Reset User", new JOptionPane( Components.panel(
|
||||
BoxLayout.PAGE_AXIS,
|
||||
Components.label( strf( "<html>Enter the new master password for <strong>%s</strong>:</html>",
|
||||
user.getFullName() ) ),
|
||||
Components.strut(),
|
||||
passwordField,
|
||||
Components.strut(),
|
||||
Components.label( strf( "<html><em><strong>Note:</strong><br>Changing the master password "
|
||||
+ "will change all of the user's passwords.<br>"
|
||||
+ "Changing back to the original master password will also restore<br>"
|
||||
+ "the user's original passwords.</em></html>",
|
||||
user.getFullName() ) ) ), JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION ) {
|
||||
@Override
|
||||
public void selectInitialValue() {
|
||||
passwordField.requestFocusInWindow();
|
||||
}
|
||||
} )) {
|
||||
char[] masterPassword = passwordField.getPassword();
|
||||
if ((masterPassword != null) && (masterPassword.length > 0))
|
||||
try {
|
||||
user.reset();
|
||||
user.authenticate( masterPassword );
|
||||
}
|
||||
catch (final MPIncorrectMasterPasswordException e) {
|
||||
errorLabel.setText( e.getLocalizedMessage() );
|
||||
throw logger.bug( e );
|
||||
}
|
||||
catch (final MPAlgorithmException e) {
|
||||
logger.err( e, "While resetting master password." );
|
||||
errorLabel.setText( e.getLocalizedMessage() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent event) {
|
||||
updateIdenticon();
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.1 KiB |
Reference in New Issue
Block a user