diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/ConfigurationDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/ConfigurationDAO.java index f70424a50..103acdbd7 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/ConfigurationDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/ConfigurationDAO.java @@ -23,10 +23,12 @@ package org.navalplanner.business.common.daos; import java.util.List; +import org.hibernate.Query; import org.navalplanner.business.common.entities.Configuration; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** @@ -54,4 +56,13 @@ public class ConfigurationDAO extends GenericDAOHibernate return getConfiguration(); } + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void saveChangedDefaultAdminPassword(boolean change) { + Query query = getSession() + .createQuery( + "UPDATE Configuration e SET e.changedDefaultAdminPassword = :change"); + query.setParameter("change", change); + query.executeUpdate(); + } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/IConfigurationDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/IConfigurationDAO.java index f44ede36c..03aa743d8 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/IConfigurationDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/IConfigurationDAO.java @@ -40,4 +40,8 @@ public interface IConfigurationDAO extends IGenericDAO { */ Configuration getConfigurationWithReadOnlyTransaction(); + /** + * It changes the value in the field changedDefaultAdminPassword. + */ + void saveChangedDefaultAdminPassword(boolean change); } diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/common/entities/Configuration.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/common/entities/Configuration.hbm.xml index 3bd3322ea..1f17072cc 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/common/entities/Configuration.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/common/entities/Configuration.hbm.xml @@ -47,6 +47,8 @@ column="expand_resource_load_view_charts" /> + diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/TemplateController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/TemplateController.java index 53c7be103..396ecd1ff 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/TemplateController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/TemplateController.java @@ -129,9 +129,9 @@ public class TemplateController extends GenericForwardComposer { return (templateModel != null) && templateModel.isScenariosVisible(); } - public Boolean getDefaultPasswdVisible() { - return (templateModel != null) && (getIdAdminUser() != null) - && (!templateModel.isChangedDefaultAdminPassword()); + public String getDefaultPasswdVisible() { + return ((templateModel != null) && (getIdAdminUser() != null) && (!templateModel + .isChangedDefaultAdminPassword())) ? "inline" : "none"; } public String getIdAdminUser() { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/IUserModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/IUserModel.java index b2f4a9a41..7a62c2f2b 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/IUserModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/IUserModel.java @@ -120,4 +120,6 @@ public interface IUserModel { */ void setPassword(String password); + String getClearNewPassword(); + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserModel.java index abef991d3..e4d0ceaa3 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserModel.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.Validate; +import org.navalplanner.business.common.Registry; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.users.daos.IUserDAO; @@ -32,12 +33,14 @@ import org.navalplanner.business.users.entities.Profile; import org.navalplanner.business.users.entities.User; import org.navalplanner.business.users.entities.UserRole; import org.navalplanner.web.common.concurrentdetection.OnConcurrentModification; +import org.navalplanner.web.users.bootstrap.MandatoryUser; import org.navalplanner.web.users.services.IDBPasswordEncoderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.zkoss.zk.ui.util.Clients; /** * Model for UI operations related to {@link User} @@ -73,9 +76,19 @@ public class UserModel implements IUserModel { //because it must exist to perform the encoding Validate.notEmpty(user.getLoginName()); - if (clearNewPassword != null) { + if (getClearNewPassword() != null) { + + /** + * it ckecks if the admin password has changed and if so sets + * true in the field changedDefaultAdminPassword. + */ + if (user.getLoginName().equalsIgnoreCase( + MandatoryUser.ADMIN.getLoginName())) { + checkIfChangeDefaultAdminPasswd(); + } + user.setPassword(dbPasswordEncoderService. - encodePassword(clearNewPassword, user.getLoginName())); + encodePassword(getClearNewPassword(), user.getLoginName())); } } catch (IllegalArgumentException e) {} @@ -84,6 +97,25 @@ public class UserModel implements IUserModel { userDAO.save(user); } + private void checkIfChangeDefaultAdminPasswd() { + boolean changedPasswd = true; + if (getClearNewPassword().isEmpty() + || getClearNewPassword().equals(MandatoryUser.ADMIN + .getClearPassword())) { + changedPasswd = false; + } + // save the field changedDefaultAdminPassword in configuration. + Registry.getConfigurationDAO().saveChangedDefaultAdminPassword( + changedPasswd); + + // show or hide the warning + if (changedPasswd) { + Clients.evalJavaScript("hideWarningDefaultPasswd();"); + } else { + Clients.evalJavaScript("showWarningDefaultPasswd();"); + } + } + @Override public User getUser() { return user; @@ -176,10 +208,19 @@ public class UserModel implements IUserModel { //user.getLoginName must exist to do that, and we're //not sure at this point if(password != "") { - clearNewPassword = password; + setClearNewPassword(password); } else{ - clearNewPassword = null; + setClearNewPassword(null); } } + + public void setClearNewPassword(String clearNewPassword) { + this.clearNewPassword = clearNewPassword; + } + + @Override + public String getClearNewPassword() { + return clearNewPassword; + } } diff --git a/navalplanner-webapp/src/main/webapp/common/css/navalplan.css b/navalplanner-webapp/src/main/webapp/common/css/navalplan.css index b5687b35d..3e3bd1f92 100644 --- a/navalplanner-webapp/src/main/webapp/common/css/navalplan.css +++ b/navalplanner-webapp/src/main/webapp/common/css/navalplan.css @@ -189,6 +189,6 @@ a.sub_menu:hover { } .footer-messages-area { - color: #ffa100; + color: #CC5013; font-size: 11px; } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/webapp/common/layout/template.zul b/navalplanner-webapp/src/main/webapp/common/layout/template.zul index 1f1013367..7f749584b 100644 --- a/navalplanner-webapp/src/main/webapp/common/layout/template.zul +++ b/navalplanner-webapp/src/main/webapp/common/layout/template.zul @@ -126,11 +126,13 @@ - -
- ${i18n:_('The admin account default password was not changed')}. - [${i18n:_('Click here')}] -
+ + +
+ ${i18n:_('The admin account default password was not changed')}. + [${i18n:_('Click here')}] +
+
diff --git a/navalplanner-webapp/src/main/webapp/users/users.zul b/navalplanner-webapp/src/main/webapp/users/users.zul index 2e76c893d..d4b24cc87 100644 --- a/navalplanner-webapp/src/main/webapp/users/users.zul +++ b/navalplanner-webapp/src/main/webapp/users/users.zul @@ -29,6 +29,20 @@ + +