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;
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;
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);
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 {
setMessage(changePassword.lead(), INFORMATION);
parent.pack();
+ oldPassword.setFocus();
return composite;
}
public void setUserTransaction(UserTransaction userTransaction) {
this.userTransaction = userTransaction;
}
+
+ public void setKeyring(CryptoKeyring keyring) {
+ this.keyring = keyring;
+ }
+
}