001package jmri.jmrit.permission.swing; 002 003import java.awt.event.ActionEvent; 004 005import javax.swing.Icon; 006 007import jmri.*; 008import jmri.util.swing.*; 009 010 011/** 012 * Let a user change his own password. 013 * 014 * @author Daniel Bergqvist (C) 2024 015 */ 016public class ChangePasswordAction extends JmriAbstractAction { 017 018 public ChangePasswordAction(String s, WindowInterface wi) { 019 super(s, wi); 020 checkPermission(); 021 } 022 023 public ChangePasswordAction(String s, Icon i, WindowInterface wi) { 024 super(s, i, wi); 025 checkPermission(); 026 } 027 028 public ChangePasswordAction() { 029 super(Bundle.getMessage("ChangePasswordAction_Title")); 030 checkPermission(); 031 } 032 033 private void checkPermission() { 034 var permissionManager = InstanceManager.getDefault(PermissionManager.class); 035 036 if (permissionManager.isEnabled()) { 037 setEnabled(permissionManager.isLoggedIn()); 038 permissionManager.addLoginListener((isLogin) -> { 039 setEnabled(isLogin && permissionManager.isCurrentUserPermittedToChangePassword()); 040 }); 041 } else { 042 setEnabled(false); 043 } 044 } 045 046 @Override 047 public void actionPerformed(ActionEvent e) { 048 var permissionManager = InstanceManager.getDefault(PermissionManager.class); 049 if (!permissionManager.hasAtLeastPermission(PermissionsSystemAdmin.PERMISSION_EDIT_PERMISSIONS, 050 BooleanPermission.BooleanValue.TRUE)) { 051 // Note that the line above _asks_ about the permission and the line below 052 // _checks_ for the permission. If the line below doesn't have the permission, 053 // a JOptionPane will show an error message. 054 if (!permissionManager.ensureAtLeastPermission(PermissionsSystemAdmin.PERMISSION_EDIT_OWN_PASSWORD, 055 BooleanPermission.BooleanValue.TRUE)) { 056 return; 057 } 058 } 059 new ChangePasswordDialog().setVisible(true); 060 } 061 062 @Override 063 public JmriPanel makePanel() { 064 throw new IllegalArgumentException("Should not be invoked"); 065 } 066 067}