/*
This file is part of Cyclos (www.cyclos.org).
A project of the Social Trade Organisation (www.socialtrade.org).
Cyclos is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Cyclos 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Cyclos; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package nl.strohalm.cyclos.controls.access.transactionpassword;
import javax.servlet.http.HttpServletRequest;
import nl.strohalm.cyclos.controls.ActionContext;
import nl.strohalm.cyclos.controls.BaseFormAction;
import nl.strohalm.cyclos.entities.access.OperatorUser;
import nl.strohalm.cyclos.entities.access.TransactionPassword;
import nl.strohalm.cyclos.entities.access.User;
import nl.strohalm.cyclos.entities.members.Element;
import nl.strohalm.cyclos.entities.members.Operator;
import nl.strohalm.cyclos.services.elements.ResetTransactionPasswordDTO;
import nl.strohalm.cyclos.utils.ActionHelper;
import nl.strohalm.cyclos.utils.RelationshipHelper;
import nl.strohalm.cyclos.utils.RequestHelper;
import nl.strohalm.cyclos.utils.validation.ValidationException;
import org.apache.struts.action.ActionForward;
/**
* Action used to reset a member's transaction password
* @author luis
*/
public class ManageTransactionPasswordAction extends BaseFormAction {
@Override
protected ActionForward handleDisplay(final ActionContext context) throws Exception {
final HttpServletRequest request = context.getRequest();
final ManageTransactionPasswordForm form = context.getForm();
final User user = retrieveUser(context);
boolean canReset = false;
boolean canBlock = false;
switch (user.getTransactionPasswordStatus()) {
case ACTIVE:
canReset = true;
canBlock = true;
break;
case BLOCKED:
canReset = true;
break;
case PENDING:
canBlock = true;
break;
case NEVER_CREATED:
if (user.getElement().getGroup().getBasicSettings().getTransactionPassword() == TransactionPassword.MANUAL) {
canReset = true;
}
break;
}
request.setAttribute("groupStatus", user.getElement().getGroup().getBasicSettings().getTransactionPassword());
request.setAttribute("user", user);
request.setAttribute("canReset", canReset);
request.setAttribute("canBlock", canBlock);
RequestHelper.storeEnum(request, TransactionPassword.class, "globalTransactionPasswordStatus");
RequestHelper.storeEnum(request, User.TransactionPasswordStatus.class, "userTransactionPasswordStatus");
if (form.isEmbed()) {
return new ActionForward("/pages/access/transactionPassword/manageTransactionPassword.jsp");
} else {
return context.getInputForward();
}
}
@Override
protected ActionForward handleSubmit(final ActionContext context) throws Exception {
final ManageTransactionPasswordForm form = context.getForm();
User user = retrieveUser(context);
final boolean block = form.isBlock();
final ResetTransactionPasswordDTO dto = new ResetTransactionPasswordDTO();
dto.setUser(user);
dto.setAllowGeneration(!block);
user = accessService.resetTransactionPassword(dto);
context.sendMessage(block ? "transactionPassword.blocked" : "transactionPassword.reset");
return ActionHelper.redirectWithParam(context.getRequest(), context.getSuccessForward(), "userId", user.getId());
}
private User retrieveUser(final ActionContext context) {
final HttpServletRequest request = context.getRequest();
if (request.getAttribute("element") != null) {
// The element may be already retrieved on the manage passwords action
return ((Element) request.getAttribute("element")).getUser();
}
final ManageTransactionPasswordForm form = context.getForm();
User user;
final long userId = form.getUserId();
try {
user = elementService.loadUser(userId, RelationshipHelper.nested(User.Relationships.ELEMENT, Element.Relationships.GROUP));
if (user instanceof OperatorUser) {
Element element = user.getElement();
element = elementService.load(element.getId(), RelationshipHelper.nested(Operator.Relationships.MEMBER, Element.Relationships.GROUP));
}
} catch (final Exception e) {
throw new ValidationException();
}
return user;
}
}