no jira: strong password validation is implemented
Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/e81d12ea Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/e81d12ea Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/e81d12ea Branch: refs/heads/master Commit: e81d12eaf4989a006425847a2d5aa981931c3a9b Parents: f2a22dc Author: Maxim Solodovnik <[email protected]> Authored: Wed May 24 08:11:00 2017 +0700 Committer: Maxim Solodovnik <[email protected]> Committed: Wed May 24 08:12:29 2017 +0700 ---------------------------------------------------------------------- .../openmeetings/core/remote/MobileService.java | 6 +- .../core/util/StrongPasswordValidator.java | 147 +++++++++++++++++++ .../openmeetings/db/dao/basic/ErrorDao.java | 6 +- .../openmeetings/db/dao/label/LabelDao.java | 4 +- .../openmeetings/db/dao/user/UserDao.java | 9 +- .../openmeetings/db/entity/user/User.java | 36 ++--- .../apache/openmeetings/db/util/UserHelper.java | 4 - .../openmeetings/backup/BackupImport.java | 6 +- .../java/org/apache/openmeetings/cli/Admin.java | 24 +-- .../installation/ImportInitvalues.java | 20 ++- .../src/site/xdoc/GeneralConfiguration.xml | 12 +- .../service/calendar/AppointmentLogic.java | 14 +- .../service/quartz/scheduler/CleanupJob.java | 37 +++-- .../util/OpenmeetingsVariables.java | 2 +- .../web/app/Application.properties.xml | 6 + .../web/app/Application_ar.properties.xml | 6 + .../web/app/Application_bg.properties.xml | 6 + .../web/app/Application_ca.properties.xml | 6 + .../web/app/Application_cs.properties.xml | 6 + .../web/app/Application_da.properties.xml | 6 + .../web/app/Application_de.properties.xml | 6 + .../web/app/Application_el.properties.xml | 6 + .../web/app/Application_es.properties.xml | 6 + .../web/app/Application_fa.properties.xml | 6 + .../web/app/Application_fi.properties.xml | 6 + .../web/app/Application_fr.properties.xml | 6 + .../web/app/Application_gl.properties.xml | 6 + .../web/app/Application_hu.properties.xml | 6 + .../web/app/Application_id.properties.xml | 6 + .../web/app/Application_it.properties.xml | 6 + .../web/app/Application_ja.properties.xml | 6 + .../web/app/Application_ko.properties.xml | 6 + .../web/app/Application_nl.properties.xml | 6 + .../web/app/Application_pl.properties.xml | 6 + .../web/app/Application_pt.properties.xml | 6 + .../web/app/Application_pt_BR.properties.xml | 6 + .../web/app/Application_ru.properties.xml | 6 + .../web/app/Application_sk.properties.xml | 6 + .../web/app/Application_sv.properties.xml | 6 + .../web/app/Application_th.properties.xml | 6 + .../web/app/Application_tr.properties.xml | 6 + .../web/app/Application_uk.properties.xml | 6 + .../web/app/Application_zh_CN.properties.xml | 6 + .../web/app/Application_zh_TW.properties.xml | 6 + .../web/common/GeneralUserForm.java | 7 +- .../openmeetings/web/pages/ActivatePage.java | 16 +- .../web/pages/auth/ForgetPasswordDialog.java | 4 +- .../web/pages/auth/ResetPasswordDialog.java | 22 +-- .../web/pages/install/InstallWizard.java | 5 +- .../web/room/menu/StartSharingButton.java | 3 +- .../WEB-INF/classes/applicationContext.xml | 26 +++- openmeetings-web/src/main/webapp/css/theme.css | 2 +- .../test/selenium/AbstractTestDefaults.java | 6 +- .../webservice/ErrorWebService.java | 18 +-- .../openmeetings/webservice/UserWebService.java | 16 ++ 55 files changed, 493 insertions(+), 139 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java index a0d25fc..63f6460 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java @@ -82,8 +82,6 @@ public class MobileService { @Autowired private RoomDao roomDao; @Autowired - private LabelDao labelDao; - @Autowired private ChatDao chatDao; @Autowired private ScopeApplicationAdapter scopeAdapter; @@ -303,8 +301,8 @@ public class MobileService { User u = userDao.get(c.getUserId()); //my rooms List<Room> myl = new ArrayList<>(); - myl.add(roomDao.getUserRoom(u.getId(), Room.Type.conference, labelDao.getString(1306L, u.getLanguageId()))); - myl.add(roomDao.getUserRoom(u.getId(), Room.Type.restricted, labelDao.getString(1307L, u.getLanguageId()))); + myl.add(roomDao.getUserRoom(u.getId(), Room.Type.conference, LabelDao.getString(1306L, u.getLanguageId()))); + myl.add(roomDao.getUserRoom(u.getId(), Room.Type.restricted, LabelDao.getString(1307L, u.getLanguageId()))); myl.addAll(roomDao.getAppointedRoomsByUser(u.getId())); for (Room r : myl) { addRoom("my", null, false, result, r); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/StrongPasswordValidator.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/StrongPasswordValidator.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/StrongPasswordValidator.java new file mode 100644 index 0000000..d390596e --- /dev/null +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/StrongPasswordValidator.java @@ -0,0 +1,147 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.core.util; + +import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; + +import java.util.Map; + +import org.apache.directory.api.util.Strings; +import org.apache.openmeetings.db.dao.label.LabelDao; +import org.apache.openmeetings.db.entity.user.User; +import org.apache.wicket.util.collections.MicroMap; +import org.apache.wicket.validation.IValidatable; +import org.apache.wicket.validation.IValidator; +import org.apache.wicket.validation.ValidationError; +import org.red5.logging.Red5LoggerFactory; +import org.slf4j.Logger; + +public class StrongPasswordValidator implements IValidator<String> { + private static final long serialVersionUID = 1L; + private static final Logger log = Red5LoggerFactory.getLogger(StrongPasswordValidator.class, webAppRootKey); + private final int minLength; + private final boolean web; + private User u; + + public StrongPasswordValidator(final int minLength, final User u) { + this(true, minLength, u); + } + + public StrongPasswordValidator(final boolean web, final int minLength, final User u) { + this.minLength = minLength; + this.web = web; + this.u = u; + } + + private static boolean noDigit(String password) { + return password == null || !password.matches(".*\\d+.*"); + } + + private static boolean noSymbol(String password) { + return password == null || !password.matches(".*[!@#$%^&*\\]\\[]+.*"); + } + + private static boolean noUpperCase(String password) { + return password == null || password.equals(password.toLowerCase()); + } + + private static boolean noLowerCase(String password) { + return password == null || password.equals(password.toUpperCase()); + } + + private boolean badLength(String password) { + return password == null || password.length() < minLength; + } + + private static boolean checkWord(String password, String word) { + if (Strings.isEmpty(word) || word.length() < 3) { + return false; + } + for (int i = 0; i < word.length() - 3; ++i) { + String substr = word.toLowerCase().substring(i, i + 3); + if (password.toLowerCase().indexOf(substr) > -1) { + return true; + } + } + return false; + } + + private boolean hasStopWords(String password) { + if (checkWord(password, u.getLogin())) { + return true; + } + if (u.getAddress() != null) { + String email = u.getAddress().getEmail(); + if (!Strings.isEmpty(email)) { + for (String part : email.split("[.@]")) { + if (checkWord(password, part)) { + return true; + } + } + } + } + return false; + } + + private void error(IValidatable<String> pass, String key) { + error(pass, key, null); + } + + private void error(IValidatable<String> pass, String key, Map<String, Object> params) { + if (web) { + pass.error(new ValidationError().addKey(key).setVariables(params)); + } else { + String msg = LabelDao.getString(key, 1L); + if (params != null && !params.isEmpty() && !Strings.isEmpty(msg)) { + for (Map.Entry<String, Object> e : params.entrySet()) { + msg.replace(String.format("${%s}", e.getKey()), "" + e.getValue()); + } + } + System.err.print(msg); // for command line + log.warn(msg); + pass.error(new ValidationError(msg)); + } + } + + @Override + public void validate(IValidatable<String> pass) { + if (badLength(pass.getValue())) { + error(pass, "bad.password.short", new MicroMap<String, Object>("0", minLength)); + } + if (noLowerCase(pass.getValue())) { + error(pass, "bad.password.lower"); + } + if (noUpperCase(pass.getValue())) { + error(pass, "bad.password.upper"); + } + if (noDigit(pass.getValue())) { + error(pass, "bad.password.digit"); + } + if (noSymbol(pass.getValue())) { + error(pass, "bad.password.special"); + } + if (hasStopWords(pass.getValue())) { + error(pass, "bad.password.stop"); + } + } + + public void setUser(User u) { + this.u = u; + } +} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ErrorDao.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ErrorDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ErrorDao.java index a57491f..c526055 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ErrorDao.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ErrorDao.java @@ -32,7 +32,6 @@ import org.apache.openmeetings.db.entity.basic.ErrorValue; import org.apache.openmeetings.db.entity.basic.ErrorValue.Type; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @Transactional @@ -42,9 +41,6 @@ public class ErrorDao { @PersistenceContext private EntityManager em; - @Autowired - private LabelDao labelDao; - public Long add(Long id, Type type, Long labelId) { try { ErrorValue eValue = new ErrorValue(); @@ -85,6 +81,6 @@ public class ErrorDao { if (ev == null) { return null; } - return labelDao.getString(ev.getLabelId(), langId); + return LabelDao.getString(ev.getLabelId(), langId); } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java index efcdaaa..1730056 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java @@ -102,11 +102,11 @@ public class LabelDao implements IDataProviderDao<StringLabel>{ labelCache.put(l, new ArrayList<StringLabel>()); } - public String getString(long fieldValuesId, long langId) { + public static String getString(long fieldValuesId, long langId) { return ensureApplication(langId).getOmString(fieldValuesId, langId); } - public String getString(String key, long langId) { + public static String getString(String key, long langId) { return ensureApplication(langId).getOmString(key, langId); } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java index 23eb445..2998497 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java @@ -511,7 +511,7 @@ public class UserDao implements IGroupAdminDataProviderDao<User> { * @param hash * @return */ - public User getUserByActivationHash(String hash) { + public User getByActivationHash(String hash) { TypedQuery<User> query = em.createQuery("SELECT u FROM User as u WHERE u.activatehash = :activatehash" + " AND u.deleted = false", User.class); query.setParameter("activatehash", hash); @@ -674,7 +674,6 @@ public class UserDao implements IGroupAdminDataProviderDao<User> { u.setSendSMS(sendSMS); u.setRights(rights); u.setLastlogin(new Date()); - u.setLasttrans(new Long(0)); u.setSalutation(Salutation.mr); u.setActivatehash(hash); u.setTimeZoneId(timezone.getID()); @@ -705,4 +704,10 @@ public class UserDao implements IGroupAdminDataProviderDao<User> { return update(u, null); } + + public List<User> getByExpiredHash(long ttl) { + return em.createNamedQuery("getUserByExpiredHash", User.class) + .setParameter("date", new Date(System.currentTimeMillis() - ttl)) + .getResultList(); + } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java index 3417837..c38a75a 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java @@ -18,8 +18,6 @@ */ package org.apache.openmeetings.db.entity.user; -import static org.apache.openmeetings.db.util.UserHelper.invalidPassword; - import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Date; @@ -82,6 +80,7 @@ import org.simpleframework.xml.Root; @NamedQuery(name = "getUserByLogin", query = "SELECT u FROM User u WHERE u.deleted = false AND u.type = :type AND u.login = :login AND ((:domainId = 0 AND u.domainId IS NULL) OR (:domainId > 0 AND u.domainId = :domainId))"), @NamedQuery(name = "getUserByEmail", query = "SELECT u FROM User u WHERE u.deleted = false AND u.type = :type AND u.address.email = :email AND ((:domainId = 0 AND u.domainId IS NULL) OR (:domainId > 0 AND u.domainId = :domainId))"), @NamedQuery(name = "getUserByHash", query = "SELECT u FROM User u WHERE u.deleted = false AND u.type = :type AND u.resethash = :resethash"), + @NamedQuery(name = "getUserByExpiredHash", query = "SELECT u FROM User u WHERE u.resetDate < :date"), @NamedQuery(name = "getContactByEmailAndUser", query = "SELECT u FROM User u WHERE u.deleted = false AND u.address.email = :email AND u.type = :type AND u.ownerId = :ownerId"), @NamedQuery(name = "selectMaxFromUsersWithSearch", query = "select count(c.id) from User c " + "where c.deleted = false " + "AND (" @@ -193,10 +192,6 @@ public class User implements IDataProviderEntity { @Element(data = true, required = false) private String lastname; - @Column(name = "lasttrans") - @Element(data = true, required = false) - private Long lasttrans; - @Column(name = "login") @Element(data = true, required = false) private String login; @@ -238,6 +233,10 @@ public class User implements IDataProviderEntity { @Element(data = true, required = false) private String resethash; + @Column(name = "resetdate") + @Element(data = true, required = false) + private Date resetDate; + @Column(name = "activatehash") @Element(data = true, required = false) private String activatehash; @@ -372,14 +371,6 @@ public class User implements IDataProviderEntity { this.lastname = lastname; } - public Long getLasttrans() { - return lasttrans; - } - - public void setLasttrans(Long lasttrans) { - this.lasttrans = lasttrans; - } - public String getLogin() { return login; } @@ -389,15 +380,6 @@ public class User implements IDataProviderEntity { } public void updatePassword(ConfigurationDao configDao, String pass) throws NoSuchAlgorithmException { - updatePassword(configDao, pass, false); - } - - public void updatePassword(ConfigurationDao configDao, String pass, boolean empty) throws NoSuchAlgorithmException { - if (!empty) { - if (invalidPassword(pass, configDao)) { - throw new RuntimeException("Password of invalid length is provided"); - } - } if (configDao.isSipEnabled()) { AsteriskSipUser u = getSipUser(); if (u == null) { @@ -498,6 +480,14 @@ public class User implements IDataProviderEntity { this.resethash = resethash; } + public Date getResetDate() { + return resetDate; + } + + public void setResetDate(Date resetDate) { + this.resetDate = resetDate; + } + public String getActivatehash() { return activatehash; } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/UserHelper.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/UserHelper.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/UserHelper.java index 232db04..32a0945 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/UserHelper.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/UserHelper.java @@ -33,8 +33,4 @@ public class UserHelper { public static int getMinPasswdLength(ConfigurationDao cfgDao) { return cfgDao.getConfValue(CONFIG_PASS_MIN_LENGTH_KEY, Integer.class, "" + USER_PASSWORD_MINIMUM_LENGTH); } - - public static boolean invalidPassword(String pass, ConfigurationDao cfgDao) { - return (pass == null || pass.length() < getMinPasswdLength(cfgDao)); - } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java index c92eb40..f7c4230 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java @@ -114,6 +114,7 @@ import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.db.entity.user.User.Right; import org.apache.openmeetings.db.entity.user.User.Salutation; import org.apache.openmeetings.db.entity.user.UserContact; +import org.apache.openmeetings.db.util.AuthLevelUtil; import org.apache.openmeetings.db.util.TimezoneUtil; import org.apache.openmeetings.util.CalendarPatterns; import org.apache.openmeetings.util.OmFileHelper; @@ -348,8 +349,6 @@ public class BackupImport { if (u.getType() == User.Type.contact && u.getLogin().length() < minLoginLength) { u.setLogin(UUID.randomUUID().toString()); } - //FIXME: OPENMEETINGS-750 - //Convert old Backups with OmTimeZone to new schema String tz = u.getTimeZoneId(); if (tz == null) { @@ -375,6 +374,9 @@ public class BackupImport { if (!Strings.isEmpty(u.getExternalType())) { u.setType(User.Type.external); } + if (AuthLevelUtil.hasLoginLevel(u.getRights()) && !Strings.isEmpty(u.getActivatehash())) { + u.setActivatehash(null); + } userDao.update(u, Long.valueOf(-1)); userMap.put(userId, u.getId()); } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java index 2162223..5fa6aae 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java @@ -21,7 +21,6 @@ package org.apache.openmeetings.cli; import static java.nio.charset.StandardCharsets.UTF_8; import static org.apache.openmeetings.db.util.ApplicationHelper.destroyApplication; import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength; -import static org.apache.openmeetings.db.util.UserHelper.invalidPassword; import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH; import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH; @@ -50,10 +49,12 @@ import org.apache.openmeetings.backup.BackupExport; import org.apache.openmeetings.backup.BackupImport; import org.apache.openmeetings.backup.ProgressHolder; import org.apache.openmeetings.core.ldap.LdapLoginManagement; +import org.apache.openmeetings.core.util.StrongPasswordValidator; import org.apache.openmeetings.db.dao.basic.ConfigurationDao; import org.apache.openmeetings.db.dao.file.FileExplorerItemDao; import org.apache.openmeetings.db.dao.record.RecordingDao; import org.apache.openmeetings.db.dao.user.UserDao; +import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.db.util.ApplicationHelper; import org.apache.openmeetings.installation.ImportInitvalues; import org.apache.openmeetings.installation.InstallationConfig; @@ -65,6 +66,8 @@ import org.apache.openmeetings.util.OmFileHelper; import org.apache.openmeetings.util.OpenmeetingsVariables; import org.apache.openmeetings.util.mail.MailUtil; import org.apache.wicket.util.string.StringValue; +import org.apache.wicket.validation.IValidator; +import org.apache.wicket.validation.Validatable; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; import org.springframework.scheduling.quartz.SchedulerFactoryBean; @@ -416,16 +419,19 @@ public class Admin { System.out.println("User group was not provided, or too short, should be at least 1 character long: " + cfg.group); System.exit(1); } - cfg.setPassword(cmdl.getOptionValue("password")); - ConfigurationDao cfgDao = getApplicationContext().getBean(ConfigurationDao.class); - if (invalidPassword(cfg.getPassword(), cfgDao)) { + if (!cmdl.hasOption("password")) { System.out.print("Please enter password for the user '" + cfg.username + "':"); - cfg.setPassword(new BufferedReader(new InputStreamReader(System.in, UTF_8)).readLine()); - if (invalidPassword(cfg.getPassword(), cfgDao)) { - System.out.println("Password was not provided, or too short, should be at least " + getMinPasswdLength(cfgDao) + " character long."); - System.exit(1); - } + } else { + cfg.setPassword(cmdl.getOptionValue("password")); } + ConfigurationDao cfgDao = getApplicationContext().getBean(ConfigurationDao.class); + IValidator<String> passValidator = new StrongPasswordValidator(true, getMinPasswdLength(cfgDao), new User()); + Validatable<String> passVal; + do { + passVal = new Validatable<>(cfg.getPassword()); + passValidator.validate(passVal); + cfg.setPassword(new BufferedReader(new InputStreamReader(System.in, UTF_8)).readLine()); + } while (!passVal.isValid()); Map<String, String> tzMap = ImportHelper.getAllTimeZones(TimeZone.getAvailableIDs()); cfg.ical_timeZone = null; if (cmdl.hasOption("tz")) { http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java index b7b7b81..c620c7e 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java @@ -123,8 +123,6 @@ public class ImportInitvalues { private GroupDao groupDao; @Autowired private RoomDao roomDao; - @Autowired - private LabelDao labelDao; private int progress = 0; @@ -330,7 +328,7 @@ public class ImportInitvalues { "Number of chars needed in a user login"); cfgDao.add(CONFIG_PASS_MIN_LENGTH_KEY, "" + USER_PASSWORD_MINIMUM_LENGTH, null, - "Number of chars needed in a user login"); + "Number of chars needed in a user password"); cfgDao.add("calendar.conference.rooms.default.size", "50", null, "Default number of participants conference room created via calendar"); @@ -415,22 +413,22 @@ public class ImportInitvalues { public void loadDefaultRooms(boolean createRooms, long langId) { if (createRooms) { - createRoom(labelDao.getString("install.room.public.interview", langId), Type.interview, 16L, true, null); - createRoom(labelDao.getString("install.room.public.conference", langId), Type.conference, 32L, true, null); - Room r = createRoom(labelDao.getString("install.room.public.video.only", langId), Type.conference, 32L, true, null); + createRoom(LabelDao.getString("install.room.public.interview", langId), Type.interview, 16L, true, null); + createRoom(LabelDao.getString("install.room.public.conference", langId), Type.conference, 32L, true, null); + Room r = createRoom(LabelDao.getString("install.room.public.video.only", langId), Type.conference, 32L, true, null); r.hide(RoomElement.Whiteboard); roomDao.update(r, null); - createRoom(labelDao.getString("install.room.public.video.wb", langId), Type.conference, 32L, true, null); - createRoom(labelDao.getString("install.room.public.restricted", langId), Type.restricted, 100L, true, null); - r = createRoom(labelDao.getString("install.room.restricted.micro", langId), Type.restricted, 100L, true, null); + createRoom(LabelDao.getString("install.room.public.video.wb", langId), Type.conference, 32L, true, null); + createRoom(LabelDao.getString("install.room.public.restricted", langId), Type.restricted, 100L, true, null); + r = createRoom(LabelDao.getString("install.room.restricted.micro", langId), Type.restricted, 100L, true, null); r.getHiddenElements().clear(); roomDao.update(r, null); - r = createRoom(labelDao.getString("install.room.conference.micro", langId), Type.conference, 32L, true, null); + r = createRoom(LabelDao.getString("install.room.conference.micro", langId), Type.conference, 32L, true, null); r.getHiddenElements().clear(); roomDao.update(r, null); - createRoom(labelDao.getString("install.room.private.conference", langId), Type.conference, 32L, false, 1L); + createRoom(LabelDao.getString("install.room.private.conference", langId), Type.conference, 32L, false, 1L); } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml ---------------------------------------------------------------------- diff --git a/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml b/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml index 750724b..20159ee 100644 --- a/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml +++ b/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml @@ -76,11 +76,9 @@ </tr> <tr> <td> user.pass.minimum.length </td> - <td> 4 </td> - <td> minimum chars required for the password to create a - user - </td> - <td> 1.9.x </td> + <td> 8 </td> + <td> minimum chars required for the password to create a user </td> + <td> 1.9.x <b>default value changed in 3.3.0</b> </td> </tr> <tr> <td> number.minutes.reminder.send </td> @@ -93,9 +91,7 @@ <tr> <td> max_upload_size </td> <td> 1073741824 </td> - <td> Maximum size of upload file (bytes) 1073741824 bytes - = 1GB - </td> + <td> Maximum size of upload file (bytes) 1073741824 bytes = 1GB </td> <td> 1.8.x </td> </tr> <tr> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java ---------------------------------------------------------------------- diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java index 8e19356..b7ec0ed 100644 --- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java +++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java @@ -61,8 +61,6 @@ public class AppointmentLogic { @Autowired private ConfigurationDao configurationDao; @Autowired - private LabelDao langDao; - @Autowired private RoomDao roomDao; @Autowired private IInvitationManager invitationManager; @@ -85,7 +83,7 @@ public class AppointmentLogic { i.setRoom(a.getRoom()); sendReminder(u, a, i); } - + private void sendReminder(User u, Appointment a, Invitation inv) throws Exception { if (inv == null) { log.error(String.format("Error retrieving Invitation for member %s in Appointment %s" @@ -99,7 +97,7 @@ public class AppointmentLogic { // Get the required labels one time for all meeting members. The // Language of the email will be the system default language - String smsSubject = generateSMSSubject(langDao.getString(1158L, langId), a); + String smsSubject = generateSMSSubject(LabelDao.getString(1158L, langId), a); AbstractSubjectEmailTemplate t = AppointmentReminderTemplate.get(u, a, tz); invitationManager.sendInvitationLink(inv, MessageType.Create, t.getSubject(), t.getEmail(), false); @@ -110,7 +108,7 @@ public class AppointmentLogic { invitationDao.update(inv); } } - + /** * Sending Reminder in Simple mail format 5 minutes before Meeting begins */ @@ -183,7 +181,7 @@ public class AppointmentLogic { private String generateSMSSubject(String labelid1158, Appointment ment) { String subj = configurationDao.getConfValue("sms.subject", String.class, null); - return subj == null || subj.length() == 0 ? + return subj == null || subj.length() == 0 ? labelid1158 + " " + ment.getTitle() : subj; } @@ -231,7 +229,7 @@ public class AppointmentLogic { public MeetingMember getMeetingMember(Long userId, Long langId, String str) { String[] params = str.split(","); - + try { return meetingMemberDao.get(Long.valueOf(params[0])); } catch (Exception e) { @@ -246,7 +244,7 @@ public class AppointmentLogic { if (mm.getUser() == null) { mm.setUser(userDao.getContact(params[3], params[1], params[2], langId, params[5], userId)); } - + return mm; } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java ---------------------------------------------------------------------- diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java index 5dbdd2b..bcef9cf 100644 --- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java +++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java @@ -25,6 +25,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import java.io.File; import java.io.FileFilter; +import java.util.List; import java.util.Map; import org.apache.commons.io.FileUtils; @@ -32,8 +33,10 @@ import org.apache.commons.lang3.math.NumberUtils; import org.apache.openmeetings.core.data.whiteboard.WhiteboardCache; import org.apache.openmeetings.core.session.SessionManager; import org.apache.openmeetings.db.dao.server.SessiondataDao; +import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.dto.room.Whiteboard; import org.apache.openmeetings.db.dto.room.Whiteboards; +import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.util.InitializationContainer; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; @@ -44,6 +47,7 @@ public class CleanupJob extends AbstractJob { private long sessionTimeout = 30 * 60 * 1000L; private long testSetupTimeout = 60 * 60 * 1000L; // 1 hour private long roomFilesTtl = 60 * 60 * 1000L; // 1 hour + private long resetHashTtl = 24 * 60 * 60 * 1000L; // 1 day @Autowired private SessiondataDao sessionDao; @@ -51,31 +55,25 @@ public class CleanupJob extends AbstractJob { private SessionManager sessionManager; @Autowired private WhiteboardCache wbManager; - - public long getSessionTimeout() { - return sessionTimeout; - } + @Autowired + private UserDao userDao; public void setSessionTimeout(long sessionTimeout) { this.sessionTimeout = sessionTimeout; } - public long getTestSetupTimeout() { - return testSetupTimeout; - } - public void setTestSetupTimeout(long testSetupTimeout) { this.testSetupTimeout = testSetupTimeout; } - public long getRoomFilesTtl() { - return roomFilesTtl; - } - public void setRoomFilesTtl(long roomFilesTtl) { this.roomFilesTtl = roomFilesTtl; } + public void setResetHashTtl(long resetHashTtl) { + this.resetHashTtl = resetHashTtl; + } + public void cleanTestSetup() { log.debug("CleanupJob.cleanTestSetup"); if (!InitializationContainer.initComplete) { @@ -176,4 +174,19 @@ public class CleanupJob extends AbstractJob { } }); } + + public void cleanExpiredResetHash() { + log.debug("CleanupJob.cleanExpiredResetHash"); + if (!InitializationContainer.initComplete) { + return; + } + List<User> users = userDao.getByExpiredHash(resetHashTtl); + log.debug("... {} expired hashes were found", users.size()); + for (User u : users) { + u.setResetDate(null); + u.setResethash(null); + userDao.update(u, null); + } + log.debug("... DONE CleanupJob.cleanExpiredResetHash"); + } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java ---------------------------------------------------------------------- diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java index 4ea8b8a..310d833 100644 --- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java +++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java @@ -74,7 +74,7 @@ public class OpenmeetingsVariables { public static String webAppRootPath = null; public static String configKeyCryptClassName = null; public static final int USER_LOGIN_MINIMUM_LENGTH = 4; - public static final int USER_PASSWORD_MINIMUM_LENGTH = 4; + public static final int USER_PASSWORD_MINIMUM_LENGTH = 8; public static Boolean whiteboardDrawStatus = null; public static String wicketApplicationName = null; public static String APPLICATION_NAME = null; http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml index b9b950d..916bf5f 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml index 275adfd..deaf8a0 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml index 045ab0e..c3b41c1 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml index fea2ddb..ebc2432 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml index ab4ff0a..10b3b82 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml index c2bd1cc..e3bcbec 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml index b27e359..2cd4fd5 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml @@ -1919,4 +1919,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml index c4c354f..2f8dea1 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml index ed46e85..e195e2f 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml index 85d175d..1c6d5b5 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml index df7779f..1f3b8bf 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml index a052e86..8bb53b2 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml @@ -1906,4 +1906,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml index c527e8c..76b9df0 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml index 57ed57d..694ab25 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml @@ -1902,4 +1902,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml index 175d2fd..d2cb807 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml index b5f9e9e..9528111 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml @@ -1916,4 +1916,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml index 3158a91..082a4d2 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml index 617f1f4..0244164 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml @@ -1916,4 +1916,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml index b7ffbf9..f5a8ac1 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml index 07da9c4..fac249e 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml index d270f87..4e18087 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml index 6569531..185f570 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml index 283292e..19d4092 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml @@ -1915,4 +1915,10 @@ <entry key="right.presenter.request.self">Я Ñ Ð¾Ñел Ð±Ñ Ð±ÑÑÑ ÐокладÑиком в ÑÑой комнаÑе</entry> <entry key="captcha.text">ТекÑÑ ÐºÐ°Ð¿Ñи</entry> <entry key="bad.captcha.text">ÐÑ Ð²Ð²ÐµÐ»Ð¸ невеÑнÑй ÑекÑÑ ÐºÐ°Ð¿Ñи</entry> + <entry key="bad.password.short"><![CDATA['СлабÑй' паÑолÑ: минималÑÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° паÑÐ¾Ð»Ñ ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['СлабÑй' паÑолÑ: обÑзаÑелена по кÑайней меÑе одна ÑÑÑоÑÐ½Ð°Ñ Ð±Ñква]]></entry> + <entry key="bad.password.upper"><![CDATA['СлабÑй' паÑолÑ: обÑзаÑелена по кÑайней меÑе одна пÑопиÑÐ½Ð°Ñ Ð±Ñква]]></entry> + <entry key="bad.password.digit"><![CDATA['СлабÑй' паÑолÑ: обÑзаÑелена по кÑайней меÑе одна ÑиÑÑа]]></entry> + <entry key="bad.password.special"><![CDATA['СлабÑй' паÑолÑ: обÑзаÑелен по кÑайней меÑе один Ñимвол из '!@#$%^&*][']]></entry> + <entry key="bad.password.stop"><![CDATA['СлабÑй' паÑолÑ: паÑÐ¾Ð»Ñ Ð½Ðµ должен ÑодеÑжаÑÑ ÑаÑÑей полÑзоваÑелÑÑкого email или логина]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml index f17a9cc..33af424 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml index 919bc4b..a3611ae 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml index c9f2e98..7713efd 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml index 616b1c2..09396dd 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml index 95e2220..a884f2f 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml @@ -1916,4 +1916,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml index 88b104a..b0cc276 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml @@ -1904,4 +1904,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml index 0284170..48d2581 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml @@ -1914,4 +1914,10 @@ <entry key="right.presenter.request.self">I would like to have right to be presenter in this room</entry> <entry key="captcha.text">Captcha text</entry> <entry key="bad.captcha.text">You have entered incorrect captcha text</entry> + <entry key="bad.password.short"><![CDATA['Weak' password: minimum password length is ${0}]]></entry> + <entry key="bad.password.lower"><![CDATA['Weak' password: at least 1 lower-case letter is required]]></entry> + <entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry> + <entry key="bad.password.digit"><![CDATA['Weak' password: at least 1 digit is required]]></entry> + <entry key="bad.password.special"><![CDATA['Weak' password: at least 1 special symbol '!@#$%^&*][' is required]]></entry> + <entry key="bad.password.stop"><![CDATA['Weak' password: it shouldn't contain part of the user's email address or username]]></entry> </properties> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e81d12ea/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)
