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 103acdbd7..503919f66 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 @@ -58,10 +58,12 @@ public class ConfigurationDAO extends GenericDAOHibernate @Override @Transactional(propagation = Propagation.REQUIRES_NEW) - public void saveChangedDefaultAdminPassword(boolean change) { - Query query = getSession() - .createQuery( - "UPDATE Configuration e SET e.changedDefaultAdminPassword = :change"); + public void saveChangedDefaultPassword(String user, boolean change) { + user = user.substring(0, 1).toUpperCase() + + user.substring(1).toLowerCase(); + String sql = "UPDATE Configuration e SET e.changedDefault" + user + + "Password = :change"; + Query query = getSession().createQuery(sql); 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 03aa743d8..031b8705c 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 @@ -41,7 +41,8 @@ public interface IConfigurationDAO extends IGenericDAO { Configuration getConfigurationWithReadOnlyTransaction(); /** - * It changes the value in the field changedDefaultAdminPassword. + * It changes the value in the field changedDefaultAdminPassword of a + * specified user. */ - void saveChangedDefaultAdminPassword(boolean change); -} + void saveChangedDefaultPassword(String user, boolean change); +} \ No newline at end of file diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/Configuration.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/Configuration.java index c8cdad4e9..0646ae8b1 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/Configuration.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/Configuration.java @@ -74,6 +74,12 @@ public class Configuration extends BaseEntity { private Boolean changedDefaultAdminPassword = false; + private Boolean changedDefaultUserPassword = false; + + private Boolean changedDefaultWsreaderPassword = false; + + private Boolean changedDefaultWswriterPassword = false; + private ProgressType progressType = ProgressType.SPREAD_PROGRESS; private String companyLogoURL = ""; @@ -276,4 +282,33 @@ public class Configuration extends BaseEntity { : changedDefaultAdminPassword; } + public void setChangedDefaultUserPassword(Boolean changedDefaultUserPassword) { + this.changedDefaultUserPassword = changedDefaultUserPassword; + } + + public Boolean getChangedDefaultUserPassword() { + return changedDefaultUserPassword != null ? changedDefaultUserPassword + : false; + } + + public void setChangedDefaultWsreaderPassword( + Boolean changedDefaultWsreaderPassword) { + this.changedDefaultWsreaderPassword = changedDefaultWsreaderPassword; + } + + public Boolean getChangedDefaultWsreaderPassword() { + return changedDefaultWsreaderPassword != null ? changedDefaultWsreaderPassword + : false; + } + + public void setChangedDefaultWswriterPassword( + Boolean changedDefaultWswriterPassword) { + this.changedDefaultWswriterPassword = changedDefaultWswriterPassword; + } + + public Boolean getChangedDefaultWswriterPassword() { + return changedDefaultWswriterPassword != null ? changedDefaultWswriterPassword + : false; + } + } \ No newline at end of file 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 1f17072cc..4bcd96272 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 @@ -49,7 +49,12 @@ column="monte_carlo_method_tab_visible" /> - + + + org.navalplanner.business.common.entities.ProgressType diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ITemplateModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ITemplateModel.java index 12166b621..488719610 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ITemplateModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ITemplateModel.java @@ -24,6 +24,7 @@ package org.navalplanner.web.common; import java.util.List; import org.navalplanner.business.scenarios.entities.Scenario; +import org.navalplanner.web.users.bootstrap.MandatoryUser; /** * Contract for {@link TemplateModel}. @@ -49,8 +50,8 @@ public interface ITemplateModel { boolean isScenariosVisible(); - boolean isChangedDefaultAdminPassword(); + boolean isChangedDefaultPassword(MandatoryUser user); - String getIdAdminUser(); + String getIdUser(String login); } 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 396ecd1ff..5ac1baba1 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 @@ -33,6 +33,7 @@ import org.navalplanner.business.scenarios.entities.Scenario; import org.navalplanner.web.common.ITemplateModel.IOnFinished; import org.navalplanner.web.common.components.bandboxsearch.BandboxSearch; import org.navalplanner.web.security.SecurityUtils; +import org.navalplanner.web.users.bootstrap.MandatoryUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -63,9 +64,16 @@ public class TemplateController extends GenericForwardComposer { private IMessagesForUser windowMessages; + private static TemplateController current; + + public static TemplateController getCurrent() { + return current; + } + @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); + TemplateController.current = this; if (templateModel.isScenariosVisible()) { window = (Window) comp.getFellow("changeScenarioWindow"); windowMessages = new MessagesForUser(window @@ -129,12 +137,50 @@ public class TemplateController extends GenericForwardComposer { return (templateModel != null) && templateModel.isScenariosVisible(); } + public String getDefaultPasswdAdminVisible() { + return ((templateModel != null) && (!templateModel + .isChangedDefaultPassword(MandatoryUser.ADMIN))) ? "inline" + : "none"; + } + + public String getDefaultPasswdUserVisible() { + return ((templateModel != null) && (!templateModel + .isChangedDefaultPassword(MandatoryUser.USER))) ? "inline" + : "none"; + } + + public String getDefaultPasswdWsreaderVisible() { + return ((templateModel != null) && (!templateModel + .isChangedDefaultPassword(MandatoryUser.WSREADER))) ? "inline" + : "none"; + } + + public String getDefaultPasswdWswriterVisible() { + return ((templateModel != null) && (!templateModel + .isChangedDefaultPassword(MandatoryUser.WSWRITER))) ? "inline" + : "none"; + } + public String getDefaultPasswdVisible() { - return ((templateModel != null) && (getIdAdminUser() != null) && (!templateModel - .isChangedDefaultAdminPassword())) ? "inline" : "none"; + return (getDefaultPasswdAdminVisible().equals("none") && (getDefaultPasswdUserVisible() + .equals("inline") + || getDefaultPasswdWsreaderVisible().equals("inline") || getDefaultPasswdWswriterVisible() + .equals("inline"))) ? "inline" : "none"; } public String getIdAdminUser() { - return templateModel.getIdAdminUser(); + return templateModel.getIdUser(MandatoryUser.ADMIN.getLoginName()); + } + + public String getIdUser() { + return templateModel.getIdUser(MandatoryUser.USER.getLoginName()); + } + + public String getIdWsreaderUser() { + return templateModel.getIdUser(MandatoryUser.WSREADER.getLoginName()); + } + + public String getIdWswriterUser() { + return templateModel.getIdUser(MandatoryUser.WSWRITER.getLoginName()); } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/TemplateModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/TemplateModel.java index 87ce89e43..42cdb26e8 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/TemplateModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/TemplateModel.java @@ -36,6 +36,7 @@ import org.navalplanner.business.common.IAdHocTransactionService; import org.navalplanner.business.common.IOnTransaction; import org.navalplanner.business.common.Registry; import org.navalplanner.business.common.daos.IConfigurationDAO; +import org.navalplanner.business.common.entities.Configuration; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.TaskSource; @@ -455,15 +456,26 @@ public class TemplateModel implements ITemplateModel { @Override @Transactional(readOnly = true) - public boolean isChangedDefaultAdminPassword() { + public boolean isChangedDefaultPassword(MandatoryUser user) { + Configuration configuration = configurationDAO.getConfiguration(); + + switch (user) { + case ADMIN: + return configuration.getChangedDefaultAdminPassword(); + case USER: + return configuration.getChangedDefaultUserPassword(); + case WSREADER: + return configuration.getChangedDefaultWsreaderPassword(); + case WSWRITER: + return configuration.getChangedDefaultWswriterPassword(); + } return configurationDAO.getConfiguration() .getChangedDefaultAdminPassword(); } @Override @Transactional(readOnly = true) - public String getIdAdminUser() { - String login = MandatoryUser.ADMIN.getLoginName(); + public String getIdUser(String login) { try { return Registry.getUserDAO().findByLoginName(login).getId() .toString(); 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 0925cd458..ad29a3da4 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 @@ -32,6 +32,7 @@ import org.navalplanner.business.users.daos.IUserDAO; 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.TemplateController; import org.navalplanner.web.common.concurrentdetection.OnConcurrentModification; import org.navalplanner.web.users.bootstrap.MandatoryUser; import org.navalplanner.web.users.services.IDBPasswordEncoderService; @@ -44,8 +45,8 @@ import org.zkoss.zk.ui.util.Clients; /** * Model for UI operations related to {@link User} - * * @author Jacobo Aragunde Perez + * @author Susana Montes Pedreira */ @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) @@ -63,7 +64,7 @@ public class UserModel implements IUserModel { private String clearNewPassword; @Override - @Transactional(readOnly=true) + @Transactional(readOnly = true) public List getUsers() { List users = userDAO.list(User.class); initializeUsers(users); @@ -79,52 +80,104 @@ public class UserModel implements IUserModel { } } + private UserCRUDController ctlr; @Override @Transactional public void confirmSave() throws ValidationException { + this.ctlr = ctlr; try { - //user.getLoginName() has to be validated before encoding password, - //because it must exist to perform the encoding + // user.getLoginName() has to be validated before encoding password, + // because it must exist to perform the encoding Validate.notEmpty(user.getLoginName()); if (getClearNewPassword() != null) { /** - * it ckecks if the admin password has changed and if so sets - * true in the field changedDefaultAdminPassword. + * it ckecks if the user password who have admin role has + * changed and if so sets true in the field + * changedDefaultAdminPassword. */ - if (user.getLoginName().equalsIgnoreCase( - MandatoryUser.ADMIN.getLoginName())) { - checkIfChangeDefaultAdminPasswd(); - } + checkIfChangeDefaultPasswd(); - user.setPassword(dbPasswordEncoderService. - encodePassword(getClearNewPassword(), user.getLoginName())); + user.setPassword(dbPasswordEncoderService.encodePassword( + getClearNewPassword(), user.getLoginName())); } + } catch (IllegalArgumentException e) { } - catch (IllegalArgumentException e) {} user.validate(); userDAO.save(user); } - private void checkIfChangeDefaultAdminPasswd() { + private void checkIfChangeDefaultPasswd() { + if (user.getLoginName().equalsIgnoreCase( + MandatoryUser.ADMIN.getLoginName())) { + checkIfChangeDefaultPasswd(MandatoryUser.ADMIN); + return; + } + if (user.getLoginName().equalsIgnoreCase( + MandatoryUser.USER.getLoginName())) { + checkIfChangeDefaultPasswd(MandatoryUser.USER); + return; + } + if (user.getLoginName().equalsIgnoreCase( + MandatoryUser.WSREADER.getLoginName())) { + checkIfChangeDefaultPasswd(MandatoryUser.WSREADER); + return; + } + if (user.getLoginName().equalsIgnoreCase( + MandatoryUser.WSWRITER.getLoginName())) { + checkIfChangeDefaultPasswd(MandatoryUser.WSWRITER); + return; + } + } + + private void checkIfChangeDefaultPasswd(MandatoryUser user) { boolean changedPasswd = true; if (getClearNewPassword().isEmpty() - || getClearNewPassword().equals(MandatoryUser.ADMIN - .getClearPassword())) { + || getClearNewPassword().equals(user.getClearPassword())) { changedPasswd = false; } // save the field changedDefaultAdminPassword in configuration. - Registry.getConfigurationDAO().saveChangedDefaultAdminPassword( - changedPasswd); + Registry.getConfigurationDAO().saveChangedDefaultPassword( + user.getLoginName(), changedPasswd); + + String displayA = null; + String displayO = null; + String displayU = null; + String login = null; // show or hide the warning - if (changedPasswd) { - Clients.evalJavaScript("hideWarningDefaultPasswd();"); - } else { - Clients.evalJavaScript("showWarningDefaultPasswd();"); + displayO = isWarningDefaultPasswdOthersVisible(); + if (user.equals(MandatoryUser.ADMIN)) { + displayA = isWarningDefaultPasswdAdminVisible(user,changedPasswd); + }else{ + displayU = isWarningDefaultPasswordOtherUser(changedPasswd, + displayO); + login = user.getLoginName(); } + Clients.evalJavaScript("showOrHideWarnings('" + displayA + "', '" + + displayO + "', '" + login + "', '" + displayU + "');"); + } + + private String isWarningDefaultPasswordOtherUser(boolean changedPasswd, + String displayO) { + if (displayO.equals("inline")) { + return changedPasswd ? "none" : "inline"; + } + return null; + } + + private String isWarningDefaultPasswdAdminVisible(MandatoryUser user, boolean changedPasswd){ + if (user.equals(MandatoryUser.ADMIN)) { + return changedPasswd ? "none" : "inline"; + } + return null; + } + + private String isWarningDefaultPasswdOthersVisible() { + return (TemplateController.getCurrent() != null) ? TemplateController + .getCurrent().getDefaultPasswdVisible() : "none"; } @Override @@ -162,7 +215,6 @@ public class UserModel implements IUserModel { /** * Load entities that will be needed in the conversation - * * @param costCategory */ private void forceLoadEntities(User user) { @@ -215,13 +267,12 @@ public class UserModel implements IUserModel { @Override public void setPassword(String password) { - //password is not encrypted right away, because - //user.getLoginName must exist to do that, and we're - //not sure at this point - if(password != "") { + // password is not encrypted right away, because + // user.getLoginName must exist to do that, and we're + // not sure at this point + if (password != "") { setClearNewPassword(password); - } - else{ + } else { setClearNewPassword(null); } } diff --git a/navalplanner-webapp/src/main/webapp/common/layout/template.zul b/navalplanner-webapp/src/main/webapp/common/layout/template.zul index 7f749584b..bedca9a93 100644 --- a/navalplanner-webapp/src/main/webapp/common/layout/template.zul +++ b/navalplanner-webapp/src/main/webapp/common/layout/template.zul @@ -34,6 +34,9 @@ contextPath = Executions.getCurrent().getContextPath(); templateCtrl = templateController; idAdminUser = templateController.getIdAdminUser(); + idUser = templateController.getIdUser(); + idWsreader = templateController.getIdWsreaderUser(); + idWswriter = templateController.getIdWswriterUser(); ]]> @@ -127,12 +130,34 @@ - +
- ${i18n:_('The admin account default password was not changed')}. + ${i18n:_('The admin account default password was not changed')}. [${i18n:_('Click here')}]
+ +
+ + [${i18n:_('user')}] + + + [${i18n:_('wswriter')}] + + + [${i18n:_('wsreader')}] + + + ${i18n:_(' default password were not changed')}. + +
+
diff --git a/navalplanner-webapp/src/main/webapp/users/users.zul b/navalplanner-webapp/src/main/webapp/users/users.zul index d4b24cc87..1311bd6b7 100644 --- a/navalplanner-webapp/src/main/webapp/users/users.zul +++ b/navalplanner-webapp/src/main/webapp/users/users.zul @@ -31,14 +31,19 @@