Remove 32 bits SWT.
[lgpl/argeo-commons.git] / org.argeo.cms.ui.workbench / src / org / argeo / cms / ui / workbench / commands / OpenChangePasswordDialog.java
index cd48598746c3e30dd6bff7201626ba1f679a6489..30836b948c19593f6fd15661524b568861c2785f 100644 (file)
@@ -23,6 +23,7 @@ import static org.argeo.cms.CmsMsg.repeatNewPassword;
 import static org.eclipse.jface.dialogs.IMessageProvider.INFORMATION;
 
 import java.security.AccessController;
+import java.util.Arrays;
 
 import javax.naming.InvalidNameException;
 import javax.naming.ldap.LdapName;
@@ -34,6 +35,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.cms.CmsException;
 import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
+import org.argeo.node.security.CryptoKeyring;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
@@ -58,6 +60,7 @@ public class OpenChangePasswordDialog extends AbstractHandler {
        private final static Log log = LogFactory.getLog(OpenChangePasswordDialog.class);
        private UserAdmin userAdmin;
        private UserTransaction userTransaction;
+       private CryptoKeyring keyring = null;
 
        public Object execute(ExecutionEvent event) throws ExecutionException {
                ChangePasswordDialog dialog = new ChangePasswordDialog(HandlerUtil.getActiveShell(event), userAdmin);
@@ -81,11 +84,15 @@ public class OpenChangePasswordDialog extends AbstractHandler {
                User user = (User) userAdmin.getRole(dn.toString());
                if (!user.hasCredential(null, oldPassword))
                        throw new CmsException("Invalid password");
-               if (newPassword.equals(""))
+               if (Arrays.equals(newPassword, new char[0]))
                        throw new CmsException("New password empty");
                try {
                        userTransaction.begin();
                        user.getCredentials().put(null, newPassword);
+                       if (keyring != null) {
+                               keyring.changePassword(oldPassword, newPassword);
+                               // TODO change secret keys in the CMS session
+                       }
                        userTransaction.commit();
                } catch (Exception e) {
                        try {
@@ -124,6 +131,7 @@ public class OpenChangePasswordDialog extends AbstractHandler {
 
                        setMessage(changePassword.lead(), INFORMATION);
                        parent.pack();
+                       oldPassword.setFocus();
                        return composite;
                }
 
@@ -160,4 +168,9 @@ public class OpenChangePasswordDialog extends AbstractHandler {
        public void setUserTransaction(UserTransaction userTransaction) {
                this.userTransaction = userTransaction;
        }
+
+       public void setKeyring(CryptoKeyring keyring) {
+               this.keyring = keyring;
+       }
+
 }