From 4e75b89cd9b30eefad366224a59056962b89fa4e Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Wed, 26 Jan 2011 16:36:28 +0100 Subject: [PATCH] Introduce warning to change admin password FEA : ItEr69S06AutocompleteAndPasswords --- .../common/entities/Configuration.java | 12 ++++ .../web/common/ITemplateModel.java | 4 ++ .../web/common/TemplateController.java | 9 +++ .../web/common/TemplateModel.java | 28 ++++++-- .../web/common/converters/UserConverter.java | 68 +++++++++++++++++++ .../web/users/UserCRUDController.java | 9 +++ .../src/main/webapp/common/css/navalplan.css | 5 ++ .../main/webapp/common/layout/template.zul | 8 +++ 8 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/UserConverter.java 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 def5a290c..c8cdad4e9 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 @@ -72,6 +72,8 @@ public class Configuration extends BaseEntity { private Boolean generateCodeForCostCategory = true; + private Boolean changedDefaultAdminPassword = false; + private ProgressType progressType = ProgressType.SPREAD_PROGRESS; private String companyLogoURL = ""; @@ -264,4 +266,14 @@ public class Configuration extends BaseEntity { return companyLogoURL; } + public void setChangedDefaultAdminPassword( + Boolean changedDefaultAdminPassword) { + this.changedDefaultAdminPassword = changedDefaultAdminPassword; + } + + public Boolean getChangedDefaultAdminPassword() { + return changedDefaultAdminPassword == null ? false + : changedDefaultAdminPassword; + } + } \ No newline at end of file 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 b395c1dc4..12166b621 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 @@ -49,4 +49,8 @@ public interface ITemplateModel { boolean isScenariosVisible(); + boolean isChangedDefaultAdminPassword(); + + String getIdAdminUser(); + } 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 48e050881..53c7be103 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 @@ -128,4 +128,13 @@ public class TemplateController extends GenericForwardComposer { public Boolean getScenariosVisible() { return (templateModel != null) && templateModel.isScenariosVisible(); } + + public Boolean getDefaultPasswdVisible() { + return (templateModel != null) && (getIdAdminUser() != null) + && (!templateModel.isChangedDefaultAdminPassword()); + } + + public String getIdAdminUser() { + return templateModel.getIdAdminUser(); + } } 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 e667af8ec..87ce89e43 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 @@ -27,22 +27,23 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; -import java.util.Map.Entry; import java.util.Set; +import java.util.Map.Entry; import org.apache.commons.lang.Validate; import org.joda.time.LocalDate; 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.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.TaskSource; import org.navalplanner.business.planner.daos.ITaskSourceDAO; import org.navalplanner.business.planner.entities.Dependency; -import org.navalplanner.business.planner.entities.Dependency.Type; import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.planner.entities.TaskElement; +import org.navalplanner.business.planner.entities.Dependency.Type; import org.navalplanner.business.resources.daos.IResourceDAO; import org.navalplanner.business.scenarios.daos.IOrderVersionDAO; import org.navalplanner.business.scenarios.daos.IScenarioDAO; @@ -50,6 +51,7 @@ import org.navalplanner.business.scenarios.entities.OrderVersion; import org.navalplanner.business.scenarios.entities.Scenario; import org.navalplanner.business.users.daos.IUserDAO; import org.navalplanner.business.users.entities.User; +import org.navalplanner.web.users.bootstrap.MandatoryUser; import org.navalplanner.web.users.services.CustomUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; @@ -60,11 +62,11 @@ import org.springframework.transaction.annotation.Transactional; import org.zkoss.ganttz.adapters.PlannerConfiguration; import org.zkoss.ganttz.data.ConstraintCalculator; import org.zkoss.ganttz.data.DependencyType; -import org.zkoss.ganttz.data.DependencyType.Point; import org.zkoss.ganttz.data.GanttDate; import org.zkoss.ganttz.data.GanttDiagramGraph; -import org.zkoss.ganttz.data.GanttDiagramGraph.IAdapter; import org.zkoss.ganttz.data.IDependency; +import org.zkoss.ganttz.data.DependencyType.Point; +import org.zkoss.ganttz.data.GanttDiagramGraph.IAdapter; import org.zkoss.ganttz.data.constraint.Constraint; import org.zkoss.ganttz.util.LongOperationFeedback; import org.zkoss.ganttz.util.LongOperationFeedback.IBackGroundOperation; @@ -451,4 +453,22 @@ public class TemplateModel implements ITemplateModel { return configurationDAO.getConfiguration().isScenariosVisible(); } + @Override + @Transactional(readOnly = true) + public boolean isChangedDefaultAdminPassword() { + return configurationDAO.getConfiguration() + .getChangedDefaultAdminPassword(); + } + + @Override + @Transactional(readOnly = true) + public String getIdAdminUser() { + String login = MandatoryUser.ADMIN.getLoginName(); + try { + return Registry.getUserDAO().findByLoginName(login).getId() + .toString(); + } catch (InstanceNotFoundException e) { + return null; + } + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/UserConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/UserConverter.java new file mode 100644 index 000000000..e60ef3d50 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/UserConverter.java @@ -0,0 +1,68 @@ +/* + * This file is part of NavalPlan + * + * Copyright (C) 2010-2011 Wireless Galicia, S.L. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.web.common.converters; + +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.users.daos.IUserDAO; +import org.navalplanner.business.users.entities.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * A {@link IConverter} for {@link User}
+ * @author Susana Montes Pedreira + */ +@Component +@Scope(BeanDefinition.SCOPE_SINGLETON) +public class UserConverter implements IConverter { + + @Autowired + private IUserDAO userDAO; + + @Override + @Transactional(readOnly = true) + public User asObject(String stringRepresentation) { + long id = Long.parseLong(stringRepresentation); + try { + return userDAO.find(id); + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + + @Override + public String asString(User entity) { + return entity.getId() + ""; + } + + @Override + public Class getType() { + return User.class; + } + + @Override + public String asStringUngeneric(Object entity) { + return asString(getType().cast(entity)); + } + +} \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserCRUDController.java index c3b31dcbb..42679a872 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserCRUDController.java @@ -36,6 +36,8 @@ import org.navalplanner.web.common.MessagesForUser; import org.navalplanner.web.common.OnlyOneVisible; import org.navalplanner.web.common.Util; import org.navalplanner.web.common.components.Autocomplete; +import org.navalplanner.web.common.entrypoints.IURLHandlerRegistry; +import org.navalplanner.web.common.entrypoints.URLHandler; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zk.ui.util.GenericForwardComposer; @@ -74,11 +76,18 @@ public class UserCRUDController extends GenericForwardComposer implements private Autocomplete profileAutocomplete; + private IURLHandlerRegistry URLHandlerRegistry; + @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); comp.setVariable("controller", this, true); messagesForUser = new MessagesForUser(messagesContainer); + + final URLHandler handler = URLHandlerRegistry + .getRedirectorFor(IUserCRUDController.class); + handler.registerListener(this, page); + getVisibility().showOnly(listWindow); passwordBox = (Textbox) createWindow.getFellowIfAny("password"); passwordConfirmationBox = (Textbox) createWindow.getFellowIfAny("passwordConfirmation"); diff --git a/navalplanner-webapp/src/main/webapp/common/css/navalplan.css b/navalplanner-webapp/src/main/webapp/common/css/navalplan.css index 6dafb6a10..b5687b35d 100644 --- a/navalplanner-webapp/src/main/webapp/common/css/navalplan.css +++ b/navalplanner-webapp/src/main/webapp/common/css/navalplan.css @@ -186,4 +186,9 @@ a.sub_menu:hover { top:14px; right:0; z-index:2; +} + +.footer-messages-area { + color: #ffa100; + 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 db10970bc..1f1013367 100644 --- a/navalplanner-webapp/src/main/webapp/common/layout/template.zul +++ b/navalplanner-webapp/src/main/webapp/common/layout/template.zul @@ -33,9 +33,11 @@ +
@@ -124,6 +126,12 @@ + +
+ ${i18n:_('The admin account default password was not changed')}. + [${i18n:_('Click here')}] +
+