From 74659a687cea2e8698c5aa9433e1286f6f167d26 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Tue, 4 Dec 2012 09:00:38 +0100 Subject: [PATCH] OO-271: make the option "login blocked" persist across restart of OpenOLAT --- src/main/java/org/olat/admin/AdminModule.java | 72 +++++++---------- .../org/olat/admin/AdminModuleDispatcher.java | 16 ++-- .../BlockLoginConfirmationController.java | 80 +++++++++++++++++++ .../sysinfo/FileSystemTestController.java | 4 +- .../admin/sysinfo/FileSystemTestEvent.java | 9 +-- .../UserSessionConfigAdminController.java | 48 ++++++++--- .../olat/admin/sysinfo/_content/block.html | 4 + .../sysinfo/_i18n/LocalStrings_de.properties | 4 + .../login/LoginAuthprovidersController.java | 27 +++---- .../java/org/olat/login/_content/login.html | 5 ++ .../login/_i18n/LocalStrings_de.properties | 1 + .../login/_i18n/LocalStrings_en.properties | 1 + 12 files changed, 183 insertions(+), 88 deletions(-) create mode 100644 src/main/java/org/olat/admin/sysinfo/BlockLoginConfirmationController.java create mode 100644 src/main/java/org/olat/admin/sysinfo/_content/block.html diff --git a/src/main/java/org/olat/admin/AdminModule.java b/src/main/java/org/olat/admin/AdminModule.java index 2f8e0a11f34..ceb91a884c9 100644 --- a/src/main/java/org/olat/admin/AdminModule.java +++ b/src/main/java/org/olat/admin/AdminModule.java @@ -40,7 +40,6 @@ import org.olat.core.configuration.AbstractOLATModule; import org.olat.core.configuration.PersistedProperties; import org.olat.core.id.User; import org.olat.core.id.context.SiteContextEntryControllerCreator; -import org.olat.core.logging.Tracing; import org.olat.core.util.session.UserSessionManager; import org.olat.instantMessaging.rosterandchat.ChangePresenceJob; import org.olat.properties.Property; @@ -57,6 +56,7 @@ import org.olat.properties.PropertyManager; */ public class AdminModule extends AbstractOLATModule { + private static final String CONFIG_LOGIN_BLOCKED = "loginBlocked"; /** Category for system properties **/ public static String SYSTEM_PROPERTY_CATEGORY = "_o3_"; public static final String PROPERTY_MAINTENANCE_MESSAGE = "maintenanceMessageToken"; @@ -95,22 +95,22 @@ public class AdminModule extends AbstractOLATModule { * The maintenance message itself is managed by the OLATContext from the brasato core * @param message */ - public static void setMaintenanceMessage(String message) { - GlobalStickyMessage.setGlobalStickyMessage(message, true); + public void setMaintenanceMessage(String message) { + GlobalStickyMessage.setGlobalStickyMessage(message, true); } - public static boolean checkMaintenanceMessageToken(HttpServletRequest request, HttpServletResponse response) { + public boolean checkMaintenanceMessageToken(HttpServletRequest request, HttpServletResponse response) { return checkToken(request, PROPERTY_MAINTENANCE_MESSAGE); } - public static boolean checkSessionAdminToken(HttpServletRequest request, HttpServletResponse response) { + public boolean checkSessionAdminToken(HttpServletRequest request, HttpServletResponse response) { return checkToken(request, PROPERTY_SESSION_ADMINISTRATION); } - private static boolean checkToken(HttpServletRequest request, String tokenPropertyName) { + private boolean checkToken(HttpServletRequest request, String tokenPropertyName) { String submittedToken = request.getParameter("token"); if (submittedToken == null) { - Tracing.logAudit("Trying to set maintenance message without using a token. Remote address::" + request.getRemoteAddr(), AdminModule.class); + logAudit("Trying to set maintenance message without using a token. Remote address::" + request.getRemoteAddr()); return false; } // get token and compare @@ -120,7 +120,7 @@ public class AdminModule extends AbstractOLATModule { if (token.matches(submittedToken)) { // limit access to token return true; } else { - Tracing.logAudit("Trying to set maintenance message using a wrong token. Remote address::" + request.getRemoteAddr(), AdminModule.class); + logAudit("Trying to set maintenance message using a wrong token. Remote address::" + request.getRemoteAddr()); return false; } } @@ -129,16 +129,17 @@ public class AdminModule extends AbstractOLATModule { * Does not allow any further login except administrator-logins. * @param newLoginBlocked */ - public static void setLoginBlocked(boolean newLoginBlocked) { - Tracing.logAudit("Session administration: Set login-blocked=" + newLoginBlocked, AdminModule.class); + public void setLoginBlocked(boolean newLoginBlocked, boolean persist) { + logAudit("Session administration: Set login-blocked=" + newLoginBlocked); AuthHelper.setLoginBlocked(newLoginBlocked); + setBooleanProperty(CONFIG_LOGIN_BLOCKED, newLoginBlocked, persist); } /** * Check if login is blocked * @return true = login is blocked */ - public static boolean isLoginBlocked() { + public boolean isLoginBlocked() { return AuthHelper.isLoginBlocked(); } @@ -146,8 +147,8 @@ public class AdminModule extends AbstractOLATModule { * Set the rejectDMZRequests flag - if true this will reject all requests to dmz to other nodes * @param rejectDMZRequests */ - public static void setRejectDMZRequests(boolean rejectDMZRequests) { - Tracing.logAudit("Session administration: Set rejectDMZRequests=" + rejectDMZRequests, AdminModule.class); + public void setRejectDMZRequests(boolean rejectDMZRequests) { + logAudit("Session administration: Set rejectDMZRequests=" + rejectDMZRequests); AuthHelper.setRejectDMZRequests(rejectDMZRequests); } @@ -155,7 +156,7 @@ public class AdminModule extends AbstractOLATModule { * Check if requests to DMZ are rejected resulting in clients to go to another node * @return true = reject all requests to dmz (to other nodes) */ - public static boolean isRejectDMZRequests() { + public boolean isRejectDMZRequests() { return AuthHelper.isRejectDMZRequests(); } @@ -164,36 +165,17 @@ public class AdminModule extends AbstractOLATModule { * 0 = unlimited number of sessions * @param maxSession */ - public static void setMaxSessions(int maxSession) { - Tracing.logAudit("Session administration: Set maxSession=" + maxSession, AdminModule.class); + public void setMaxSessions(int maxSession) { + logAudit("Session administration: Set maxSession=" + maxSession); AuthHelper.setMaxSessions(maxSession); } - - /** - * Invalidated all session except administrator-sessions. - * @return Number of invalidated sessions - */ - public static int invalidateAllSessionsDepr() { - Tracing.logAudit("Session administration: Invalidate all sessions.", AdminModule.class); - return CoreSpringFactory.getImpl(UserSessionManager.class).invalidateAllSessions(); - } - - /** - * Invalidate a number of oldest (last-click time) sessions. - * @param nbrSessions - * @return Number of invalidated sessions - */ - public static int invalidateOldestSessionsDepr(int nbrSessions) { - Tracing.logAudit("Session administration: Invalidate oldest sessions Nbr-Sessions=" + nbrSessions, AdminModule.class); - return CoreSpringFactory.getImpl(UserSessionManager.class).invalidateOldestSessions(nbrSessions); - } /** * Set global session timeout in msec. * @param sessionTimeout */ - public static void setSessionTimeoutDepr(int sessionTimeout) { - Tracing.logAudit("Session administration: Set session-timeout=" + sessionTimeout, AdminModule.class); + public void setSessionTimeoutDepr(int sessionTimeout) { + logAudit("Session administration: Set session-timeout=" + sessionTimeout); //in seconds CoreSpringFactory.getImpl(UserSessionManager.class).setGlobalSessionTimeout(sessionTimeout); @@ -204,7 +186,7 @@ public class AdminModule extends AbstractOLATModule { /** * @return Current session timeout in msec. */ - public static int getSessionTimeout() { + public int getSessionTimeout() { //changepresencejob holds the session timeout so far in milliseconds int sessionTimeoutSeconds = Math.round((ChangePresenceJob.getAutoLogOutCutTimeValue() / 1000)); return sessionTimeoutSeconds; @@ -213,7 +195,7 @@ public class AdminModule extends AbstractOLATModule { /** * @return Current session-limit. */ - public static int getMaxSessions() { + public int getMaxSessions() { return AuthHelper.getMaxSessions(); } @@ -233,6 +215,11 @@ public class AdminModule extends AbstractOLATModule { initializeSystemTokenProperty(PROPERTY_MAINTENANCE_MESSAGE); initializeSystemTokenProperty(PROPERTY_SESSION_ADMINISTRATION); + boolean loginBlocked = getBooleanPropertyValue(CONFIG_LOGIN_BLOCKED); + if(loginBlocked) { + AuthHelper.setLoginBlocked(loginBlocked); + } + // Add controller factory extension point to launch groups NewControllerFactory.getInstance().addContextEntryControllerCreator(User.class.getSimpleName(), new UserAdminContextEntryControllerCreator()); @@ -251,14 +238,11 @@ public class AdminModule extends AbstractOLATModule { @Override protected void initFromChangedProperties() { - // TODO Auto-generated method stub - + //nothin to do } @Override public void setPersistedProperties(PersistedProperties persistedProperties) { this.moduleConfigProperties = persistedProperties; - } - -} +} \ No newline at end of file diff --git a/src/main/java/org/olat/admin/AdminModuleDispatcher.java b/src/main/java/org/olat/admin/AdminModuleDispatcher.java index d4e226e1e1e..f6914302df8 100644 --- a/src/main/java/org/olat/admin/AdminModuleDispatcher.java +++ b/src/main/java/org/olat/admin/AdminModuleDispatcher.java @@ -66,12 +66,13 @@ public class AdminModuleDispatcher implements Dispatcher { /** * @see org.olat.core.dispatcher.Dispatcher#execute(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String) */ - public void execute(HttpServletRequest request, HttpServletResponse response, @SuppressWarnings("unused") String uriPrefix) { + @Override + public void execute(HttpServletRequest request, HttpServletResponse response, String uriPrefix) { String cmd = request.getParameter(PARAMETER_CMD); if (cmd.equalsIgnoreCase(CMD_SET_MAINTENANCE_MESSAGE) || cmd.equalsIgnoreCase(CMD_SET_INFO_MESSAGE)) { handleSetMaintenanceOrInfoMessage(request, response, cmd); } else { - if (AdminModule.checkSessionAdminToken(request, response)) { + if (CoreSpringFactory.getImpl(AdminModule.class).checkSessionAdminToken(request, response)) { handleSessionsCommand(request, response, cmd); } else { DispatcherAction.sendForbidden(request.getPathInfo(), response); @@ -85,10 +86,10 @@ public class AdminModuleDispatcher implements Dispatcher { */ private void handleSessionsCommand(HttpServletRequest request, HttpServletResponse response, String cmd) { if (cmd.equalsIgnoreCase(CMD_SET_LOGIN_BLOCKED)) { - AdminModule.setLoginBlocked(true); + CoreSpringFactory.getImpl(AdminModule.class).setLoginBlocked(true, false); ServletUtil.serveStringResource(request, response, "Ok, login blocked"); } else if (cmd.equalsIgnoreCase(CMD_SET_LOGIN_NOT_BLOCKED)) { - AdminModule.setLoginBlocked(false); + CoreSpringFactory.getImpl(AdminModule.class).setLoginBlocked(false, false); ServletUtil.serveStringResource(request, response, "Ok, login no more blocked"); }else if (cmd.equalsIgnoreCase(CMD_SET_MAX_SESSIONS)) { handleSetMaxSessions(request, response); @@ -116,7 +117,7 @@ public class AdminModuleDispatcher implements Dispatcher { } else { try { int maxSessions = Integer.parseInt(maxSessionsString); - AdminModule.setMaxSessions(maxSessions); + CoreSpringFactory.getImpl(AdminModule.class).setMaxSessions(maxSessions); ServletUtil.serveStringResource(request, response, "Ok, max-session=" + maxSessions); } catch (NumberFormatException nbrException) { ServletUtil.serveStringResource(request, response, "NOT_OK, parameter " + PARAMETER_MAX_MESSAGE + " must be a number"); @@ -166,14 +167,15 @@ public class AdminModuleDispatcher implements Dispatcher { * @param response */ private void handleSetMaintenanceOrInfoMessage(HttpServletRequest request, HttpServletResponse response, String cmd) { - if (AdminModule.checkMaintenanceMessageToken(request, response)) { + AdminModule adminModule = CoreSpringFactory.getImpl(AdminModule.class); + if (adminModule.checkMaintenanceMessageToken(request, response)) { String message = request.getParameter(PARAMETER_MSG); if (cmd.equalsIgnoreCase(CMD_SET_INFO_MESSAGE)){ InfoMessageManager mrg = (InfoMessageManager) CoreSpringFactory.getBean(InfoMessageManager.class); mrg.setInfoMessage(message); ServletUtil.serveStringResource(request, response, "Ok, new infoMessage is::" + message); } else if (cmd.equalsIgnoreCase(CMD_SET_MAINTENANCE_MESSAGE)){ - AdminModule.setMaintenanceMessage(message); + adminModule.setMaintenanceMessage(message); ServletUtil.serveStringResource(request, response, "Ok, new maintenanceMessage is::" + message); } } else { diff --git a/src/main/java/org/olat/admin/sysinfo/BlockLoginConfirmationController.java b/src/main/java/org/olat/admin/sysinfo/BlockLoginConfirmationController.java new file mode 100644 index 00000000000..64a3d278f63 --- /dev/null +++ b/src/main/java/org/olat/admin/sysinfo/BlockLoginConfirmationController.java @@ -0,0 +1,80 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.admin.sysinfo; + +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.components.form.flexible.FormItemContainer; +import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; +import org.olat.core.gui.components.form.flexible.impl.FormBasicController; +import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; +import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.Event; +import org.olat.core.gui.control.WindowControl; + +/** + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class BlockLoginConfirmationController extends FormBasicController { + + private static final String[] keys = { "persist" }; + private MultipleSelectionElement persistEl; + + public BlockLoginConfirmationController(UserRequest ureq, WindowControl wControl) { + super(ureq, wControl, "block"); + initForm(ureq); + } + + @Override + protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { + FormLayoutContainer optionsCont = FormLayoutContainer.createDefaultFormLayout("options", getTranslator()); + formLayout.add(optionsCont); + formLayout.add("options", optionsCont); + String[] values = new String[] { translate("persist.block.login")}; + persistEl = uifactory.addCheckboxesVertical("block.login.options", "block.login.options", optionsCont, keys, values, null, 1); + persistEl.select(keys[0], true); + + FormLayoutContainer buttonCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); + formLayout.add(buttonCont); + formLayout.add("buttons", buttonCont); + uifactory.addFormSubmitButton("ok", buttonCont); + uifactory.addFormCancelButton("cancel", buttonCont, ureq, getWindowControl()); + } + + public boolean isPersist() { + return persistEl.isSelected(0); + } + + @Override + protected void doDispose() { + // + } + + @Override + protected void formOK(UserRequest ureq) { + fireEvent(ureq, Event.DONE_EVENT); + } + + @Override + protected void formCancelled(UserRequest ureq) { + fireEvent(ureq, Event.CANCELLED_EVENT); + } +} \ No newline at end of file diff --git a/src/main/java/org/olat/admin/sysinfo/FileSystemTestController.java b/src/main/java/org/olat/admin/sysinfo/FileSystemTestController.java index 1f1071aa1f5..c6aaa942201 100644 --- a/src/main/java/org/olat/admin/sysinfo/FileSystemTestController.java +++ b/src/main/java/org/olat/admin/sysinfo/FileSystemTestController.java @@ -67,8 +67,6 @@ public class FileSystemTestController extends BasicController implements Generic private final static String STATUS_FILE_WRITTEN = "Written test dirs/files"; private final static String STATUS_CHECKING = "Checking test dirs/files..."; private final static String STATUS_FILE_CHECKED = "File checked"; - private final static String STATUS_WAIT_CHECK = "Waiting for check-result..."; - private final static String STATUS_FINISHED = "Finished"; private String testStatus = STATUS_STOPPED; private int loops = 1; @@ -313,7 +311,7 @@ public class FileSystemTestController extends BasicController implements Generic int loopCounter = 1; while (checkWithRetriesEnabled && loopCounter++ < maxRetries) { try { - Thread.currentThread().sleep(loopCounter * 100); + Thread.sleep(loopCounter * 100); } catch (InterruptedException e) { log.error("Exception in checkFileExists, " + e); } diff --git a/src/main/java/org/olat/admin/sysinfo/FileSystemTestEvent.java b/src/main/java/org/olat/admin/sysinfo/FileSystemTestEvent.java index 722a8769b1c..9685b2f2447 100644 --- a/src/main/java/org/olat/admin/sysinfo/FileSystemTestEvent.java +++ b/src/main/java/org/olat/admin/sysinfo/FileSystemTestEvent.java @@ -31,7 +31,7 @@ import org.olat.core.util.event.MultiUserEvent; * @author Christian Guretzki */ public class FileSystemTestEvent extends MultiUserEvent { - + private static final long serialVersionUID = -2883321872261399010L; protected static final String COMMAND_FILE_WRITTEN = "cmd_file_written"; protected static final String COMMAND_FILE_CHECKED = "cmd_file_checked"; @@ -82,18 +82,11 @@ public class FileSystemTestEvent extends MultiUserEvent { return fileCheckOk; } - public long getDuration() { return duration; } - public boolean isCheckWithRetriesEnabled() { return isCheckWithRetriesEnabled; } - - - - - } diff --git a/src/main/java/org/olat/admin/sysinfo/UserSessionConfigAdminController.java b/src/main/java/org/olat/admin/sysinfo/UserSessionConfigAdminController.java index e6c0d96a91d..cf488a7504f 100644 --- a/src/main/java/org/olat/admin/sysinfo/UserSessionConfigAdminController.java +++ b/src/main/java/org/olat/admin/sysinfo/UserSessionConfigAdminController.java @@ -34,6 +34,7 @@ import org.olat.core.gui.components.link.Link; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; +import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.util.coordinate.CoordinatorManager; @@ -51,21 +52,24 @@ public class UserSessionConfigAdminController extends FormBasicController { private IntegerElement sessionTimeoutAuthEl; private IntegerElement maxSessionsEl; private IntegerElement nbrSessionsEl; - + + private CloseableModalController cmc; private DialogBoxController invalidateAllConfirmController; - private DialogBoxController blockLoginConfirmController; private DialogBoxController rejectDMZRequestsConfirmController; + private BlockLoginConfirmationController blockLoginConfirmController; private FormLink saveLink, invalidateOldSessionLink, invalidateAllSessionLink; private FormLink allowLoginLink, blockLoginLink; private FormLink rejectDMZRequestsLink, allowDMZRequestsLink; + private final AdminModule adminModule; private final UserSessionModule sessionModule; private final UserSessionManager sessionManager; public UserSessionConfigAdminController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl); + adminModule = CoreSpringFactory.getImpl(AdminModule.class); sessionModule = CoreSpringFactory.getImpl(UserSessionModule.class); sessionManager = CoreSpringFactory.getImpl(UserSessionManager.class); @@ -78,7 +82,7 @@ public class UserSessionConfigAdminController extends FormBasicController { sessionTimeoutEl = uifactory.addIntegerElement("session.timeout", "session.timeout.label", sessionTimeout, formLayout); int initialSessionAuth = sessionModule.getSessionTimeoutAuthenticated(); sessionTimeoutAuthEl = uifactory.addIntegerElement("session.timeout.auth", "session.timeout.auth.label", initialSessionAuth, formLayout); - int maxSessions = AdminModule.getMaxSessions(); + int maxSessions = adminModule.getMaxSessions(); maxSessionsEl = uifactory.addIntegerElement("max.sessions", "max.sessions.label", maxSessions, formLayout); FormLayoutContainer buttonsLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); @@ -116,8 +120,8 @@ public class UserSessionConfigAdminController extends FormBasicController { } private void updateLoginBlock() { - blockLoginLink.setVisible(!AdminModule.isLoginBlocked()); - allowLoginLink.setVisible(AdminModule.isLoginBlocked()); + blockLoginLink.setVisible(!adminModule.isLoginBlocked()); + allowLoginLink.setVisible(adminModule.isLoginBlocked()); } @Override @@ -138,7 +142,7 @@ public class UserSessionConfigAdminController extends FormBasicController { int sessionTimeoutAuth = sessionTimeoutAuthEl.getIntValue(); sessionModule.setSessionTimeoutAuthenticated(sessionTimeoutAuth); int maxSessions = maxSessionsEl.getIntValue(); - AdminModule.setMaxSessions(maxSessions); + adminModule.setMaxSessions(maxSessions); sessionManager.setGlobalSessionTimeout(sessionTimeoutAuth); } else if(source == invalidateOldSessionLink) { int nbrSessions = nbrSessionsEl.getIntValue(); @@ -147,14 +151,14 @@ public class UserSessionConfigAdminController extends FormBasicController { } else if(source == invalidateAllSessionLink) { invalidateAllConfirmController = activateYesNoDialog(ureq, null, translate("invalidate.all.sure"), invalidateAllConfirmController); } else if(source == blockLoginLink) { - blockLoginConfirmController = activateYesNoDialog(ureq, null, translate("block.login.sure"), blockLoginConfirmController); + doConfirmLoginBlocked(ureq); } else if(source == allowLoginLink) { - AdminModule.setLoginBlocked(false); + adminModule.setLoginBlocked(false, true); updateLoginBlock(); } else if(source == rejectDMZRequestsLink) { rejectDMZRequestsConfirmController = activateYesNoDialog(ureq, null, translate("reject.dmz.requests.sure"), rejectDMZRequestsConfirmController); } else if(source == allowDMZRequestsLink) { - AdminModule.setRejectDMZRequests(false); + adminModule.setRejectDMZRequests(false); updateDmzBlock(); showInfo("allow.dmz.requests.done"); } else { @@ -170,17 +174,37 @@ public class UserSessionConfigAdminController extends FormBasicController { showInfo("invalidate.session.done", Integer.toString(nbrOfInvalidatedSessions)); } } else if (source == blockLoginConfirmController) { - if (DialogBoxUIFactory.isYesEvent(event)) { - AdminModule.setLoginBlocked(true); + if (event == Event.DONE_EVENT) { + boolean persist = blockLoginConfirmController.isPersist(); + adminModule.setLoginBlocked(true, persist); showInfo("block.login.done"); } + cmc.deactivate(); updateLoginBlock(); } else if (source == rejectDMZRequestsConfirmController) { if (DialogBoxUIFactory.isYesEvent(event)) { - AdminModule.setRejectDMZRequests(true); + adminModule.setRejectDMZRequests(true); showInfo("reject.dmz.requests.done"); } updateDmzBlock(); + } else if(source == cmc) { + cleanUp(); } } + + private void cleanUp() { + removeAsListenerAndDispose(blockLoginConfirmController); + removeAsListenerAndDispose(cmc); + blockLoginConfirmController = null; + cmc = null; + } + + private void doConfirmLoginBlocked(UserRequest ureq) { + blockLoginConfirmController = new BlockLoginConfirmationController(ureq, getWindowControl()); + listenTo(blockLoginConfirmController); + + cmc = new CloseableModalController(getWindowControl(), translate("close"), blockLoginConfirmController.getInitialComponent(), true, translate("block.login.title")); + cmc.activate(); + listenTo(cmc); + } } \ No newline at end of file diff --git a/src/main/java/org/olat/admin/sysinfo/_content/block.html b/src/main/java/org/olat/admin/sysinfo/_content/block.html new file mode 100644 index 00000000000..b6c4dc2fc37 --- /dev/null +++ b/src/main/java/org/olat/admin/sysinfo/_content/block.html @@ -0,0 +1,4 @@ +<p>$r.translate("block.login.sure")</p> +<p>$r.translate("block.login.info")</p> +$r.render("options") +$r.render("buttons") diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties index e4d367a029d..f09c10d3a83 100644 --- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties @@ -1,7 +1,11 @@ #Mon Mar 02 09:54:04 CET 2009 allow.login.done=Loginsperrung ist wieder aufgehoben. block.login.done=Neue Logins sind ab jetzt gesperrt. +block.login.title=Login sperren block.login.sure=Sind Sie sicher, dass Sie für alle neuen Benutzer das Login sperren wollen? +block.login.info=Sie können den "Login sperren" speichern so dass er noch gultig ist nach dem Restart. +block.login.options=Persistieren +persist.block.login=ein buildinfo=Build Information clear.hibernate.statistics=Hibernate Statistik l\u00F6schen disable.hibernate.statistics=Hibernate Statistik ausschalten diff --git a/src/main/java/org/olat/login/LoginAuthprovidersController.java b/src/main/java/org/olat/login/LoginAuthprovidersController.java index c978897f301..182c02639f6 100644 --- a/src/main/java/org/olat/login/LoginAuthprovidersController.java +++ b/src/main/java/org/olat/login/LoginAuthprovidersController.java @@ -210,25 +210,30 @@ public class LoginAuthprovidersController extends MainLayoutBasicController impl contentBorn.contextPut("locale", ureq.getLocale()); // prepare info message - InfoMessageManager mrg = (InfoMessageManager)CoreSpringFactory.getBean(InfoMessageManager.class); + InfoMessageManager mrg = CoreSpringFactory.getImpl(InfoMessageManager.class); String infomsg = mrg.getInfoMessage(); - if (infomsg != null && infomsg.length() > 0) + if (infomsg != null && infomsg.length() > 0) { contentBorn.contextPut("infomsg", infomsg); + } String infomsgNode = mrg.getInfoMessageNodeOnly(); - if (infomsgNode != null && infomsgNode.length() > 0) + if (infomsgNode != null && infomsgNode.length() > 0) { contentBorn.contextPut("infomsgNode", infomsgNode); - + } // add additional login intro message for custom content String customMsg = translate("login.custommsg"); - if(!StringUtils.isBlank(customMsg)) + if(!StringUtils.isBlank(customMsg)) { contentBorn.contextPut("logincustommsg",customMsg); + } + + //login is blocked? + if(AuthHelper.isLoginBlocked()) { + contentBorn.contextPut("loginBlocked", Boolean.TRUE); + } return contentBorn; } - - /** * @see org.olat.core.gui.control.DefaultController#doDispose() @@ -341,7 +346,6 @@ public class LoginAuthprovidersController extends MainLayoutBasicController impl } } - private TreeModel buildTreeModel() { GenericTreeNode root, gtn; @@ -387,9 +391,4 @@ public class LoginAuthprovidersController extends MainLayoutBasicController impl return gtm; } - - - - - -} +} \ No newline at end of file diff --git a/src/main/java/org/olat/login/_content/login.html b/src/main/java/org/olat/login/_content/login.html index 0ccf3ac8797..8835d6f8350 100644 --- a/src/main/java/org/olat/login/_content/login.html +++ b/src/main/java/org/olat/login/_content/login.html @@ -23,6 +23,11 @@ </div> </div> #end + #if($loginBlocked) + <div class="b_warning"> + $r.translate("login.blocked.forAll") + </div> + #end #if($browserWarningOn) <div class="b_warning"> $r.translate("login.browserswitch") diff --git a/src/main/java/org/olat/login/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/login/_i18n/LocalStrings_de.properties index 2d2ef69f76c..3604c561fdf 100644 --- a/src/main/java/org/olat/login/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/login/_i18n/LocalStrings_de.properties @@ -82,6 +82,7 @@ lf.login=OpenOLAT-Benutzername lf.pass=OpenOLAT-Passwort login.altprovider=Alternative M\u00F6glichkeiten f\u00FCr Login login.blocked=<b>Anmeldung ist f\u00FCr diesen Benutzernamen gesperrt.</b><p><font size\="-1">Es wurden zu viele ung\u00FCltige Anmeldeversuche registriert. Eine Anmeldung mit diesem Benutzernamen wurde aus Sicherheitsgr\u00FCnden f\u00FCr die n\u00E4chsten {0} Minuten gesperrt.</p></font> +login.blocked.forAll=Login sind momentan gesperrt. Probieren Sie bitte später. login.browserswitch=Ihr Internet-Browser unterst\u00FCtzt nicht alle Funktionen in OpenOLAT. Beste Resultate erhalten Sie mit Internet Explorer ab Version 7 sowie <a href\="http\://www.mozilla-europe.org/en/products/firefox/">Mozilla Firefox ab Version 2.</a> login.button=Login login.error=Benutzername oder Passwort falsch. Bitte versuchen Sie es erneut oder nutzen Sie die Funktion "$:menu.pw". diff --git a/src/main/java/org/olat/login/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/login/_i18n/LocalStrings_en.properties index 56bf5ccaa62..af6c9f2e572 100644 --- a/src/main/java/org/olat/login/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/login/_i18n/LocalStrings_en.properties @@ -79,6 +79,7 @@ lf.pass=OpenOLAT password loadtest.warn=Attention\! Load test mode is activated\! login.altprovider=Alternative login possibilities. login.blocked=<b>Login blocked for this user name.</b><p><font size\="-1">Too many failed login attempts. For security reasons, further attempts will be blocked for a period of {0} minutes.</p></font> +login.blocked.forAll=Login are blocked. Please try later. login.browserswitch=Your Internet browser does not support all features of OpenOLAT. For best results we recommend Internet Explorer 7 (or a newer version) or <a href\="http\://www.mozilla-europe.org/en/products/firefox/">Mozilla Firefox 2 (or newer version).</a> login.button=Login login.error=User name or password wrong. Please try again or use the function "$:menu.pw". -- GitLab