diff --git a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java index 6ae0e19613d24cec778a0a988954ce7546e142a2..1d7a5c164b509dc8d98702af4e7e992bc5a0cc33 100644 --- a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java +++ b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java @@ -907,7 +907,6 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, GenericEventListe errors.insert("LDAP connection ERROR"); log.error("LDAP batch sync: LDAP connection empty", null); freeSyncLock(); - success = false; return success; } Date timeBeforeSync = new Date(); diff --git a/src/main/java/org/olat/ldap/ui/LDAPAdminController.java b/src/main/java/org/olat/ldap/ui/LDAPAdminController.java index afa7b1f910f2c959bb123bb674b17dcf39464295..8d35fb37ad5f11f6be25931cd98ce3e19bed3f24 100644 --- a/src/main/java/org/olat/ldap/ui/LDAPAdminController.java +++ b/src/main/java/org/olat/ldap/ui/LDAPAdminController.java @@ -44,7 +44,6 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowC import org.olat.core.gui.control.generic.wizard.Step; import org.olat.core.gui.control.generic.wizard.StepRunnerCallback; import org.olat.core.gui.control.generic.wizard.StepsMainRunController; -import org.olat.core.gui.control.generic.wizard.StepsRunContext; import org.olat.core.id.Identity; import org.olat.core.logging.LogRealTimeViewerController; import org.olat.core.util.coordinate.CoordinatorManager; @@ -69,12 +68,10 @@ public class LDAPAdminController extends BasicController implements GenericEvent private VelocityContainer ldapAdminVC; private DateFormat dateFormatter; private Link syncStartLink; - private Link deletStartLink; + private Link deleteStartLink; private StepsMainRunController deleteStepController; - private boolean hasIdentitiesToDelete; private boolean hasIdentitiesToDeleteAfterRun; private Integer amountUsersToDelete; - private List<Identity> identitiesToDelete; private LDAPLoginManager ldapLoginManager; private UserSearchController userSearchCtrl; @@ -94,29 +91,23 @@ public class LDAPAdminController extends BasicController implements GenericEvent updateLastSyncDateInVC(); // Create start LDAP sync link syncStartLink = LinkFactory.createButton("sync.button.start", ldapAdminVC, this); - // sync one user only -// syncOneUserLink = LinkFactory.createButton("one.user.sync.button.start", ldapAdminVC, this); - + // remove olat-fallback authentications for ldap-users, see FXOLAT-284 if (ldapLoginModule.isCacheLDAPPwdAsOLATPwdOnLogin()){ removeFallBackAuthsLink = LinkFactory.createButton("remove.fallback.auth", ldapAdminVC, this); } // Create start delete User link - deletStartLink = LinkFactory.createButton("delete.button.start", ldapAdminVC, this); + deleteStartLink = LinkFactory.createButton("delete.button.start", ldapAdminVC, this); // Create real-time log viewer LogRealTimeViewerController logViewController = new LogRealTimeViewerController(ureq, control, "org.olat.ldap", Level.DEBUG, true); listenTo(logViewController); ldapAdminVC.put("logViewController", logViewController.getInitialComponent()); // CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, null, LDAPLoginManager.ldapSyncLockOres); - - + putInitialPanel(ldapAdminVC); } - /** - * @see org.olat.core.gui.control.DefaultController#doDispose() - */ @Override protected void doDispose() { // Controller autodisposed by basic controller @@ -133,11 +124,6 @@ public class LDAPAdminController extends BasicController implements GenericEvent } } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.components.Component, - * org.olat.core.gui.control.Event) - */ @Override protected void event(UserRequest ureq, Component source, Event event) { if (source == syncStartLink) { @@ -154,110 +140,33 @@ public class LDAPAdminController extends BasicController implements GenericEvent calloutCtr.addDisposableChildController(userSearchCtrl); calloutCtr.activate(); listenTo(calloutCtr); - } else if (source == deletStartLink) { - // cancel if some one else is making sync or delete job - if (!ldapLoginManager.acquireSyncLock()) { - showError("delete.error.lock"); - } else { - deletStartLink.setEnabled(false); - - // check and get LDAP connection - LdapContext ctx = ldapLoginManager.bindSystem(); - if (ctx == null) { - showError("delete.error.connection"); - return; - } - // get deleted users - identitiesToDelete = ldapLoginManager.getIdentitysDeletedInLdap(ctx); - try { - ctx.close(); - } catch (NamingException e) { - showError("delete.error.connection.close"); - logError("Could not close LDAP connection on manual delete sync", e); - } - - if (identitiesToDelete != null) { - for(Iterator<Identity> it=identitiesToDelete.iterator(); it.hasNext(); ) { - if(Identity.STATUS_PERMANENT.equals(it.next().getStatus())) { - it.remove(); - } - } - } - - if (identitiesToDelete != null && identitiesToDelete.size() != 0) { - hasIdentitiesToDelete = true; - /* - * start step which spawns the whole wizard - */ - Step start = new DeletStep00(ureq, hasIdentitiesToDelete, identitiesToDelete); - /* - * wizard finish callback called after "finish" is called - */ - StepRunnerCallback finishCallback = new StepRunnerCallback() { - @Override - public Step execute(UserRequest uureq, WindowControl control, StepsRunContext runContext) { - hasIdentitiesToDeleteAfterRun = ((Boolean) runContext.get("hasIdentitiesToDelete")).booleanValue(); - if (hasIdentitiesToDeleteAfterRun) { - - @SuppressWarnings("unchecked") - List<Identity> idToDelete = (List<Identity>) runContext.get("identitiesToDelete"); - amountUsersToDelete = idToDelete.size(); - // Delete all identities now and tell everybody that - // we are finished - ldapLoginManager.deleteIdentities(idToDelete, getIdentity()); - return StepsMainRunController.DONE_MODIFIED; - } else { - return StepsMainRunController.DONE_UNCHANGED; - } - // otherwise return without deleting anything - } - - }; - deleteStepController = new StepsMainRunController(ureq, getWindowControl(), start, finishCallback, null, - translate("admin.deleteUser.title"), "o_sel_ldap_delete_user_wizard"); - listenTo(deleteStepController); - getWindowControl().pushAsModalDialog(deleteStepController.getInitialComponent()); - } - else { - hasIdentitiesToDelete = false; - showInfo("delete.step.noUsers"); - deletStartLink.setEnabled(true); - ldapLoginManager.freeSyncLock(); - } - } + } else if (source == deleteStartLink) { + doStartDeleteProcess(ureq); } else if (source == removeFallBackAuthsLink){ removeFallBackAuthsLink.setEnabled(false); ldapLoginManager.removeFallBackAuthentications(); showInfo("opsuccess"); } - } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.controller.Controller, - * org.olat.core.gui.control.Event) - */ + @Override protected void event(UserRequest ureq, Controller source, Event event) { if (source == deleteStepController) { if (event == Event.CANCELLED_EVENT || event == Event.FAILED_EVENT) { getWindowControl().pop(); removeAsListenerAndDispose(deleteStepController); showInfo("delete.step.cancel"); - ldapLoginManager.freeSyncLock(); - deletStartLink.setEnabled(true); + deleteStartLink.setEnabled(true); } else if (event == Event.CHANGED_EVENT || event == Event.DONE_EVENT) { getWindowControl().pop(); removeAsListenerAndDispose(deleteStepController); if(hasIdentitiesToDeleteAfterRun){ showInfo("delete.step.finish.users", amountUsersToDelete.toString()); - } - else{ + } else{ showInfo("delete.step.finish.noUsers"); } - ldapLoginManager.freeSyncLock(); - deletStartLink.setEnabled(true); - } else if (source == userSearchCtrl){ + deleteStartLink.setEnabled(true); + } else if (source == userSearchCtrl) { calloutCtr.deactivate(); Identity choosenIdent = ((SingleIdentityChosenEvent)event).getChosenIdentity(); ldapLoginManager.doSyncSingleUser(choosenIdent); @@ -265,6 +174,70 @@ public class LDAPAdminController extends BasicController implements GenericEvent } } + private void doStartDeleteProcess(UserRequest ureq) { + // cancel if some one else is making sync or delete job + if (!ldapLoginManager.acquireSyncLock()) { + showError("delete.error.lock"); + } else { + // check and get LDAP connection + LdapContext ctx = ldapLoginManager.bindSystem(); + if (ctx == null) { + showError("delete.error.connection"); + ldapLoginManager.freeSyncLock(); + return; + } + + deleteStartLink.setEnabled(false); + // get deleted users + List<Identity> identitiesToDelete = null; + try { + identitiesToDelete = ldapLoginManager.getIdentitysDeletedInLdap(ctx); + ctx.close(); + } catch (NamingException e) { + showError("delete.error.connection.close"); + logError("Could not close LDAP connection on manual delete sync", e); + } finally { + ldapLoginManager.freeSyncLock(); + } + + if (identitiesToDelete != null) { + for(Iterator<Identity> it=identitiesToDelete.iterator(); it.hasNext(); ) { + if(Identity.STATUS_PERMANENT.equals(it.next().getStatus())) { + it.remove(); + } + } + } + + if (identitiesToDelete != null && !identitiesToDelete.isEmpty()) { + // start step which spawns the whole wizard + Step start = new DeletStep00(ureq, true, identitiesToDelete); + // wizard finish callback called after "finish" is called + StepRunnerCallback finishCallback = (uureq, control, runContext) -> { + hasIdentitiesToDeleteAfterRun = ((Boolean) runContext.get("hasIdentitiesToDelete")).booleanValue(); + if (hasIdentitiesToDeleteAfterRun) { + @SuppressWarnings("unchecked") + List<Identity> idToDelete = (List<Identity>) runContext.get("identitiesToDelete"); + amountUsersToDelete = idToDelete.size(); + // Delete all identities now and tell everybody that + // we are finished + ldapLoginManager.deleteIdentities(idToDelete, getIdentity()); + return StepsMainRunController.DONE_MODIFIED; + } else { + // otherwise return without deleting anything + return StepsMainRunController.DONE_UNCHANGED; + } + }; + deleteStepController = new StepsMainRunController(ureq, getWindowControl(), start, finishCallback, null, + translate("admin.deleteUser.title"), "o_sel_ldap_delete_user_wizard"); + listenTo(deleteStepController); + getWindowControl().pushAsModalDialog(deleteStepController.getInitialComponent()); + } else { + showInfo("delete.step.noUsers"); + deleteStartLink.setEnabled(true); + } + } + } + /** * Callback method for asynchronous sync thread. Called when sync is finished @@ -272,7 +245,7 @@ public class LDAPAdminController extends BasicController implements GenericEvent * @param success * @param errors */ - void syncTaskFinished(boolean success, LDAPError errors) { + private void syncTaskFinished(boolean success, LDAPError errors) { if (success) { showWarning("admin.synchronize.finished.success"); logInfo("LDAP user synchronize job finished successfully", null);