X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.ui.workbench%2Fsrc%2Forg%2Fargeo%2Fcms%2Fui%2Fworkbench%2Fcommands%2FOpenChangePasswordDialog.java;h=30836b948c19593f6fd15661524b568861c2785f;hb=5b444174cd13680f99944026877f6cac2e1faba1;hp=960c5fffbc90aa2f429dc1aa3e05c7eca85fe3c0;hpb=328d27b8653a55d9561134f120bca09776f43c1c;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/commands/OpenChangePasswordDialog.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/commands/OpenChangePasswordDialog.java index 960c5fffb..30836b948 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/commands/OpenChangePasswordDialog.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/commands/OpenChangePasswordDialog.java @@ -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; @@ -55,17 +57,16 @@ import org.osgi.service.useradmin.UserAdmin; /** Open the change password dialog */ public class OpenChangePasswordDialog extends AbstractHandler { - private final static Log log = LogFactory - .getLog(OpenChangePasswordDialog.class); + 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); + ChangePasswordDialog dialog = new ChangePasswordDialog(HandlerUtil.getActiveShell(event), userAdmin); if (dialog.open() == Dialog.OK) { - MessageDialog.openInformation(HandlerUtil.getActiveShell(event), - passwordChanged.lead(), passwordChanged.lead()); + MessageDialog.openInformation(HandlerUtil.getActiveShell(event), passwordChanged.lead(), + passwordChanged.lead()); } return null; } @@ -73,8 +74,7 @@ public class OpenChangePasswordDialog extends AbstractHandler { @SuppressWarnings("unchecked") protected void changePassword(char[] oldPassword, char[] newPassword) { Subject subject = Subject.getSubject(AccessController.getContext()); - String name = subject.getPrincipals(X500Principal.class).iterator() - .next().toString(); + String name = subject.getPrincipals(X500Principal.class).iterator().next().toString(); LdapName dn; try { dn = new LdapName(name); @@ -84,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 { @@ -103,14 +107,6 @@ public class OpenChangePasswordDialog extends AbstractHandler { } } - public void setUserAdmin(UserAdmin userDetailsManager) { - this.userAdmin = userDetailsManager; - } - - public void setUserTransaction(UserTransaction userTransaction) { - this.userTransaction = userTransaction; - } - class ChangePasswordDialog extends TitleAreaDialog { private static final long serialVersionUID = -6963970583882720962L; private Text oldPassword, newPassword1, newPassword2; @@ -125,18 +121,17 @@ public class OpenChangePasswordDialog extends AbstractHandler { protected Control createDialogArea(Composite parent) { Composite dialogarea = (Composite) super.createDialogArea(parent); - dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, - true)); + dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); Composite composite = new Composite(dialogarea, SWT.NONE); composite.setLayout(new GridLayout(2, false)); - composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, - false)); + composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); oldPassword = createLP(composite, currentPassword.lead()); newPassword1 = createLP(composite, newPassword.lead()); newPassword2 = createLP(composite, repeatNewPassword.lead()); setMessage(changePassword.lead(), INFORMATION); parent.pack(); + oldPassword.setFocus(); return composite; } @@ -145,8 +140,7 @@ public class OpenChangePasswordDialog extends AbstractHandler { try { if (!newPassword1.getText().equals(newPassword2.getText())) throw new CmsException("New passwords are different"); - changePassword(oldPassword.getTextChars(), - newPassword1.getTextChars()); + changePassword(oldPassword.getTextChars(), newPassword1.getTextChars()); close(); } catch (Exception e) { ErrorFeedback.show("Cannot change password", e); @@ -156,8 +150,7 @@ public class OpenChangePasswordDialog extends AbstractHandler { /** Creates label and password. */ protected Text createLP(Composite parent, String label) { new Label(parent, SWT.NONE).setText(label); - Text text = new Text(parent, SWT.SINGLE | SWT.LEAD | SWT.PASSWORD - | SWT.BORDER); + Text text = new Text(parent, SWT.SINGLE | SWT.LEAD | SWT.PASSWORD | SWT.BORDER); text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); return text; } @@ -167,4 +160,17 @@ public class OpenChangePasswordDialog extends AbstractHandler { shell.setText(changePassword.lead()); } } + + public void setUserAdmin(UserAdmin userAdmin) { + this.userAdmin = userAdmin; + } + + public void setUserTransaction(UserTransaction userTransaction) { + this.userTransaction = userTransaction; + } + + public void setKeyring(CryptoKeyring keyring) { + this.keyring = keyring; + } + }