Repository: openmeetings Updated Branches: refs/heads/3.3.x 58dacee00 -> 4b5c310b7
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4b5c310b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java index 0070ede..7d1a71a 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java @@ -24,7 +24,6 @@ import static org.apache.openmeetings.web.app.Application.getBean; import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONES; import static org.apache.openmeetings.web.app.WebSession.getRights; import static org.apache.openmeetings.web.app.WebSession.getUserId; -import static org.apache.wicket.validation.validator.StringValidator.minimumLength; import java.time.LocalDate; import java.util.ArrayList; @@ -32,6 +31,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; +import org.apache.openmeetings.core.util.StrongPasswordValidator; import org.apache.openmeetings.db.dao.basic.ConfigurationDao; import org.apache.openmeetings.db.dao.user.GroupDao; import org.apache.openmeetings.db.dao.user.UserDao; @@ -73,6 +73,7 @@ public class GeneralUserForm extends Form<User> { private final PasswordTextField passwordField; private final RequiredTextField<String> email; private final List<GroupUser> grpUsers = new ArrayList<>(); + private final StrongPasswordValidator passValidator; private final boolean isAdminForm; public GeneralUserForm(String id, IModel<User> model, boolean isAdminForm) { @@ -82,7 +83,8 @@ public class GeneralUserForm extends Form<User> { //TODO should throw exception if non admin User edit somebody else (or make all fields read-only) add(passwordField = new PasswordTextField("password", new Model<String>())); ConfigurationDao cfgDao = getBean(ConfigurationDao.class); - passwordField.setResetPassword(false).setRequired(false).add(minimumLength(getMinPasswdLength(cfgDao))); + passwordField.setResetPassword(false) + .add(passValidator = new StrongPasswordValidator(getMinPasswdLength(cfgDao), model.getObject())); updateModelObject(getModelObject(), isAdminForm); add(new DropDownChoice<>("salutation" @@ -176,6 +178,7 @@ public class GeneralUserForm extends Form<User> { public void updateModelObject(User u, boolean isAdminForm) { grpUsers.clear(); grpUsers.addAll(u.getGroupUsers()); + passValidator.setUser(u); if (isAdminForm) { List<Group> grpList = hasGroupAdminLevel(getRights()) ? getBean(GroupDao.class).get(null, getUserId(), 0, Integer.MAX_VALUE, null) http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4b5c310b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ActivatePage.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ActivatePage.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ActivatePage.java index ed02171..baef490 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ActivatePage.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ActivatePage.java @@ -20,30 +20,28 @@ package org.apache.openmeetings.web.pages; import static org.apache.openmeetings.web.app.Application.getBean; -import java.util.Date; - import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.db.entity.user.User.Right; import org.apache.openmeetings.db.util.AuthLevelUtil; import org.apache.openmeetings.web.app.Application; import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.util.string.StringValue; public class ActivatePage extends BaseNotInitedPage { private static final long serialVersionUID = 1L; public static final String ACTIVATION_PARAM = "u"; - + public ActivatePage(PageParameters pp) { - String userHash = pp.get(ACTIVATION_PARAM).toString(); - if (userHash != null) { - User user = getBean(UserDao.class).getUserByActivationHash(userHash); + StringValue userHash = pp.get(ACTIVATION_PARAM); + if (!userHash.isEmpty()) { + User user = getBean(UserDao.class).getByActivationHash(userHash.toString()); if (user != null && !AuthLevelUtil.hasLoginLevel(user.getRights())) { // activate user.getRights().add(Right.Login); - user.setUpdated(new Date()); - - getBean(UserDao.class).update(user, null); + user.setActivatehash(null); + getBean(UserDao.class).update(user, user.getId()); } } setResponsePage(Application.get().getSignInPageClass()); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4b5c310b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java index 402853b..888f798 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java @@ -22,6 +22,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import static org.apache.openmeetings.web.app.Application.getBean; import java.util.Arrays; +import java.util.Date; import java.util.List; import java.util.UUID; @@ -238,7 +239,8 @@ public class ForgetPasswordDialog extends AbstractFormDialog<String> { private static void sendHashByUser(User us, String appLink, UserDao userDao) { log.debug("User: " + us.getLogin()); us.setResethash(UUID.randomUUID().toString()); - userDao.update(us, -1L); + us.setResetDate(new Date()); + userDao.update(us, null); String reset_link = appLink + "?hash=" + us.getResethash(); String email = us.getAddress().getEmail(); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4b5c310b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java index bb19049..05efde5 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java @@ -20,11 +20,11 @@ package org.apache.openmeetings.web.pages.auth; import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength; import static org.apache.openmeetings.web.app.Application.getBean; -import static org.apache.wicket.validation.validator.StringValidator.minimumLength; import java.util.Arrays; import java.util.List; +import org.apache.openmeetings.core.util.StrongPasswordValidator; import org.apache.openmeetings.db.dao.basic.ConfigurationDao; import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.entity.user.User; @@ -52,11 +52,16 @@ public class ResetPasswordDialog extends NonClosableDialog<String> { private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true)); private PasswordTextField password; private final User user; - final MessageDialog confirmReset; + MessageDialog confirmReset; public ResetPasswordDialog(String id, final User user) { super(id, Application.getString(325)); this.user = user; + } + + @Override + protected void onInitialize() { + super.onInitialize(); add(form = new Form<String>("form") { private static final long serialVersionUID = 1L; private TextField<String> login; @@ -66,14 +71,11 @@ public class ResetPasswordDialog extends NonClosableDialog<String> { add(login = new TextField<>("login", Model.of(user.getLogin()))); login.setOutputMarkupId(true); add(password = new PasswordTextField("password", new Model<String>())); - password.setOutputMarkupId(true); - password.setLabel(Model.of(Application.getString(328))); + password.setLabel(Model.of(getString("328"))).setOutputMarkupId(true); ConfigurationDao cfgDao = getBean(ConfigurationDao.class); - password.setRequired(false).add(minimumLength(getMinPasswdLength(cfgDao))); + password.setRequired(false).add(new StrongPasswordValidator(getMinPasswdLength(cfgDao), user)); add(confirmPassword = new PasswordTextField("confirmPassword", new Model<String>())); - confirmPassword.setOutputMarkupId(true); - confirmPassword.setLabel(Model.of(Application.getString(329))); - confirmPassword.setRequired(true).add(minimumLength(getMinPasswdLength(cfgDao))); + confirmPassword.setLabel(Model.of(getString("329"))).setOutputMarkupId(true); add(new AjaxButton("submit") { // FAKE button so "submit-on-enter" works as expected private static final long serialVersionUID = 1L; @@ -94,13 +96,13 @@ public class ResetPasswordDialog extends NonClosableDialog<String> { protected void onValidate() { String pass = password.getConvertedInput(); if (pass != null && !pass.isEmpty() && !pass.equals(confirmPassword.getConvertedInput())) { - error(Application.getString(232)); + error(getString("232")); } super.onValidate(); } }); - confirmReset = new NonClosableMessageDialog("confirmReset", Application.getString(325), Application.getString(332)) { + confirmReset = new NonClosableMessageDialog("confirmReset", getString("325"), getString("332")) { private static final long serialVersionUID = 1L; @Override http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4b5c310b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java index 8a1fdd0..6c65334 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java @@ -41,7 +41,9 @@ import java.util.Locale; import java.util.Map; import org.apache.openmeetings.cli.ConnectionPropertiesPatcher; +import org.apache.openmeetings.core.util.StrongPasswordValidator; import org.apache.openmeetings.db.dao.label.LabelDao; +import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.installation.ImportInitvalues; import org.apache.openmeetings.installation.InstallationConfig; import org.apache.openmeetings.util.ConnectionProperties; @@ -424,7 +426,8 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> { super.onInitialize(); add(new RequiredTextField<String>("username").setLabel(Model.of(getString("install.wizard.params.step1.username"))).add(minimumLength(USER_LOGIN_MINIMUM_LENGTH))); add(new PasswordTextField("password") - .setResetPassword(false).setLabel(Model.of(getString("install.wizard.params.step1.password"))).add(minimumLength(USER_PASSWORD_MINIMUM_LENGTH))); + .setResetPassword(false).setLabel(Model.of(getString("install.wizard.params.step1.password"))) + .add(new StrongPasswordValidator(USER_PASSWORD_MINIMUM_LENGTH, new User()))); add(new RequiredTextField<String>("email").setLabel(Model.of(getString("install.wizard.params.step1.email"))).add(RfcCompliantEmailAddressValidator.getInstance())); add(new RequiredTextField<String>("group").setLabel(Model.of(getString("install.wizard.params.step1.group")))); } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4b5c310b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java index bf8c141..f37ee23 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java @@ -140,12 +140,11 @@ public class StartSharingButton extends OmButton { private static String getLabels(int ... ids) { StringBuilder result = new StringBuilder(CDATA_BEGIN); boolean delim = false; - LabelDao labelDao = getBean(LabelDao.class); for (int id : ids) { if (delim) { result.append(';'); } - result.append(labelDao.getString(id, getLanguage())); + result.append(LabelDao.getString(id, getLanguage())); delim = true; } result.append(CDATA_END); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4b5c310b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml index 1e8bce6..ee98717 100644 --- a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml +++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml @@ -92,30 +92,41 @@ <bean id="openmeetings.RecordingConverter" class="org.apache.openmeetings.core.converter.RecordingConverter" /> <bean id="openmeetings.SlaveHTTPConnectionManager" class="org.apache.openmeetings.webservice.cluster.SlaveHTTPConnectionManager" /> - <!-- 1800000 == 30 min - 3600000 == 1 hour - 5000 == 5 sec - 300000 == 5 min - 900000 == 15 min + <!-- + 5000 == 5 sec + 300000 == 5 min + 900000 == 15 min + 1800000 == 30 min + 3600000 == 1 hour + 86400000 == 1 day --> <bean id="cleanupJob" class="org.apache.openmeetings.service.quartz.scheduler.CleanupJob" - p:sessionTimeout="1800000" p:testSetupTimeout="3600000" p:roomFilesTtl="3600000" /> + p:sessionTimeout="1800000" p:testSetupTimeout="3600000" p:roomFilesTtl="3600000" p:resetHashTtl="86400000" /> + <!-- sessions clean-up --> <bean id="cleanSessionsJobDetails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" p:targetObject-ref="cleanupJob" p:targetMethod="cleanSessions" p:concurrent="false" /> <bean id="triggerCleanSessions" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean" p:jobDetail-ref="cleanSessionsJobDetails" p:startDelay="5000" p:repeatInterval="300000" /> + <!-- test setup clean-up --> <bean id="cleanTestSetupJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" p:targetObject-ref="cleanupJob" p:targetMethod="cleanTestSetup" p:concurrent="false" /> <bean id="triggerCleanTestSetup" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean" p:jobDetail-ref="cleanTestSetupJobDetail" p:startDelay="1800000" p:repeatInterval="1800000" /> + <!-- room files clean-up --> <bean id="cleanRoomFilesJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" p:targetObject-ref="cleanupJob" p:targetMethod="cleanRoomFiles" p:concurrent="false" /> <bean id="triggerCleanRoomFiles" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean" - p:jobDetail-ref="cleanRoomFilesJobDetail" p:startDelay="10000" p:repeatInterval="1800000" /> <!-- p:startDelay="1800000" --> + p:jobDetail-ref="cleanRoomFilesJobDetail" p:startDelay="10000" p:repeatInterval="1800000" /> + <!-- expired recordings clean-up --> <bean id="cleanExpiredRecJobDetails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" p:targetObject-ref="cleanupJob" p:targetMethod="cleanExpiredRecordings" p:concurrent="false" /> <bean id="triggerCleanExpiredRec" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean" p:jobDetail-ref="cleanExpiredRecJobDetails" p:startDelay="5000" p:repeatInterval="3600000" /> + <!-- expired reset hash --> + <bean id="cleanExpiredResetHashJobDetails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" + p:targetObject-ref="cleanupJob" p:targetMethod="cleanExpiredResetHash" p:concurrent="false" /> + <bean id="triggerCleanExpiredResetHash" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean" + p:jobDetail-ref="cleanExpiredResetHashJobDetails" p:startDelay="5000" p:repeatInterval="3600000" /> <bean id="reminderJob" class="org.apache.openmeetings.service.quartz.scheduler.ReminderJob"/> <bean id="meetingReminderJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" @@ -145,6 +156,7 @@ <ref bean="triggerCleanTestSetup" /> <ref bean="triggerCleanRoomFiles" /> <ref bean="triggerCleanExpiredRec" /> + <ref bean="triggerCleanExpiredResetHash" /> <ref bean="triggerMeetingReminder" /> <ref bean="triggerExpiringRecording" /> <ref bean="triggerResetSendingMailStatus" /> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4b5c310b/openmeetings-web/src/main/webapp/css/theme.css ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/webapp/css/theme.css b/openmeetings-web/src/main/webapp/css/theme.css index aff4d76..1457d6c 100644 --- a/openmeetings-web/src/main/webapp/css/theme.css +++ b/openmeetings-web/src/main/webapp/css/theme.css @@ -445,7 +445,7 @@ html, body { .offline.om-icon { background-image: url(images/bullet_red.png); } -.signin .error .k-notification-wrap { +.signin .error .k-notification-wrap, .adminPanel .k-notification-wrap { white-space: normal; } .error { http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4b5c310b/openmeetings-web/src/test/java/org/apache/openmeetings/test/selenium/AbstractTestDefaults.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/selenium/AbstractTestDefaults.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/selenium/AbstractTestDefaults.java index 0869fad..7613c77 100644 --- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/selenium/AbstractTestDefaults.java +++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/selenium/AbstractTestDefaults.java @@ -30,13 +30,9 @@ import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxProfile; -import org.springframework.beans.factory.annotation.Autowired; @Category(SeleniumTests.class) public abstract class AbstractTestDefaults extends AbstractSpringTest { - @Autowired - private LabelDao labelDao; - public WebDriver driver = null; private String BASE_URL = "http://localhost:5080/openmeetings"; @@ -81,7 +77,7 @@ public abstract class AbstractTestDefaults extends AbstractSpringTest { public boolean doTearDownAfterTest = false; public String getString(long id) { - return labelDao.getString(id, getLanguageId()); + return LabelDao.getString(id, getLanguageId()); } /** http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4b5c310b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ErrorWebService.java ---------------------------------------------------------------------- diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ErrorWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ErrorWebService.java index 87599ea..f5a0a1a 100644 --- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ErrorWebService.java +++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ErrorWebService.java @@ -44,11 +44,11 @@ import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; /** - * + * * The Service contains methods to get localized errors - * + * * @author solomax - * + * */ @WebService(serviceName="org.apache.openmeetings.webservice.ErrorWebService", targetNamespace = TNS) @Features(features = "org.apache.cxf.feature.LoggingFeature") @@ -60,8 +60,6 @@ public class ErrorWebService { @Autowired private ErrorDao errorDao; @Autowired - private LabelDao labelDao; - @Autowired private SessiondataDao sessionDao; /** @@ -69,12 +67,12 @@ public class ErrorWebService { * Error-id, it needs a languageId to specify in which language you want to * display/read the error-message. English has the Language-ID one, for * different one see the list of languages - * + * * @param id * the error id (negative Value here!) * @param lang * The id of the language - * + * * @return - error with the code given */ @WebMethod @@ -87,8 +85,8 @@ public class ErrorWebService { if (eValues != null) { log.debug("eValues.getLabelId() = " + eValues.getLabelId()); log.debug("eValues.getErrorType() = " + eValues.getType()); - String eValue = labelDao.getString(eValues.getLabelId(), lang); - String tValue = labelDao.getString("error.type." + eValues.getType().name(), lang); + String eValue = LabelDao.getString(eValues.getLabelId(), lang); + String tValue = LabelDao.getString("error.type." + eValues.getType().name(), lang); if (eValue != null) { return new ServiceResult(id, eValue, tValue); } @@ -101,7 +99,7 @@ public class ErrorWebService { } return null; } - + @WebMethod @POST @Path("/report/") http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4b5c310b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java ---------------------------------------------------------------------- diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java index 0ff9f7f..2297d57 100644 --- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java +++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java @@ -43,6 +43,7 @@ import javax.ws.rs.core.MediaType; import org.apache.cxf.feature.Features; import org.apache.openmeetings.IApplication; +import org.apache.openmeetings.core.util.StrongPasswordValidator; import org.apache.openmeetings.db.dao.basic.ConfigurationDao; import org.apache.openmeetings.db.dao.server.SOAPLoginDao; import org.apache.openmeetings.db.dao.server.SessiondataDao; @@ -59,12 +60,17 @@ import org.apache.openmeetings.db.entity.user.Address; import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.db.entity.user.User.Right; import org.apache.openmeetings.db.util.AuthLevelUtil; +import org.apache.openmeetings.db.util.UserHelper; import org.apache.openmeetings.util.OmException; import org.apache.openmeetings.util.OpenmeetingsVariables; import org.apache.openmeetings.webservice.cluster.UserService; import org.apache.openmeetings.webservice.error.ServiceException; import org.apache.wicket.Application; import org.apache.wicket.util.string.Strings; +import org.apache.wicket.validation.IValidationError; +import org.apache.wicket.validation.IValidator; +import org.apache.wicket.validation.Validatable; +import org.apache.wicket.validation.ValidationError; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -171,6 +177,16 @@ public class UserWebService implements UserService { if (user.getLanguageId() == null) { user.setLanguageId(1L); } + IValidator<String> passValidator = new StrongPasswordValidator(true, UserHelper.getMinPasswdLength(cfgDao), user.get(userDao)); + Validatable<String> passVal = new Validatable<>(user.getPassword()); + passValidator.validate(passVal); + if (!passVal.isValid()) { + StringBuilder sb = new StringBuilder(); + for (IValidationError err : passVal.getErrors()) { + sb.append(((ValidationError)err).getMessage()).append(System.lineSeparator()); + } + throw new ServiceException(sb.toString()); + } Long userId = userManagement.registerUser(user.getLogin(), user.getPassword(), user.getLastname(), user.getFirstname(), user.getAddress().getEmail(), new Date(), user.getAddress().getStreet(), user.getAddress().getAdditionalname(), user.getAddress().getFax(), user.getAddress().getZip(), user.getAddress().getCountry()
