package org.apereo.cas.pm.web.flow; import org.apereo.cas.authentication.UsernamePasswordCredential; import org.apereo.cas.pm.PasswordChangeBean; import org.apereo.cas.pm.PasswordManagementService; import org.apereo.cas.web.support.WebUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.binding.message.MessageBuilder; import org.springframework.webflow.action.AbstractAction; import org.springframework.webflow.action.EventFactorySupport; import org.springframework.webflow.execution.Event; import org.springframework.webflow.execution.RequestContext; /** * This is {@link PasswordChangeAction}. * * @author Misagh Moayyed * @since 5.0.0 */ public class PasswordChangeAction extends AbstractAction { /** * Password Update Success event. */ public static final String PASSWORD_UPDATE_SUCCESS = "passwordUpdateSuccess"; private static final Logger LOGGER = LoggerFactory.getLogger(PasswordChangeAction.class); private PasswordManagementService passwordManagementService; public PasswordChangeAction(final PasswordManagementService passwordManagementService) { this.passwordManagementService = passwordManagementService; } @Override protected Event doExecute(final RequestContext requestContext) throws Exception { try { final UsernamePasswordCredential c = (UsernamePasswordCredential) WebUtils.getCredential(requestContext); final PasswordChangeBean bean = requestContext.getFlowScope() .get(PasswordManagementWebflowConfigurer.FLOW_VAR_ID_PASSWORD, PasswordChangeBean.class); if (passwordManagementService.change(c, bean)) { return new EventFactorySupport().event(this, PASSWORD_UPDATE_SUCCESS); } } catch (final Exception e) { LOGGER.error(e.getMessage(), e); } requestContext.getMessageContext().addMessage(new MessageBuilder().error().code("pm.updateFailure"). defaultText("Could not update the account password").build()); return error(); } }