package com.evolveum.midpoint.web.page.login; import org.apache.wicket.RestartResponseException; import org.apache.wicket.spring.injection.annot.SpringBean; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.model.api.AuthenticationEvaluator; import com.evolveum.midpoint.model.api.context.NonceAuthenticationContext; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.Producer; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.page.forgetpassword.ResetPolicyDto; import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityPolicyType; public class PageRegistrationBase extends PageBase { private static final long serialVersionUID = 1L; private static final String DOT_CLASS = PageRegistrationBase.class.getName() + "."; private static final String OPERATION_GET_SECURITY_POLICY = DOT_CLASS + "getSecurityPolicy"; private static final Trace LOGGER = TraceManager.getTrace(PageRegistrationBase.class); @SpringBean(name = "nonceAuthenticationEvaluator") private AuthenticationEvaluator<NonceAuthenticationContext> authenticationEvaluator; private ResetPolicyDto resetPasswordPolicy; private SelfRegistrationDto selfRegistrationDto; public PageRegistrationBase() { // initSelfRegistrationConfiguration(); // initResetCredentialsConfiguration(); } private void initSelfRegistrationConfiguration() { SecurityPolicyType securityPolicy = resolveSecurityPolicy(); this.selfRegistrationDto = new SelfRegistrationDto(); try { this.selfRegistrationDto.initSelfRegistrationDto(securityPolicy); } catch (SchemaException e) { LOGGER.error("Failed to initialize self registration configuration.", e); getSession().error( createStringResource("PageSelfRegistration.selfRegistration.configuration.init.failed") .getString()); throw new RestartResponseException(PageLogin.class); } } private void initResetCredentialsConfiguration() { // TODO: cleanup, the same as in the PageRegistrationBase SecurityPolicyType securityPolicy = resolveSecurityPolicy(); this.resetPasswordPolicy = new ResetPolicyDto(); try { this.resetPasswordPolicy.initResetPolicyDto(securityPolicy); } catch (SchemaException e) { LOGGER.error("Failed to initialize self registration configuration.", e); getSession().error( createStringResource("PageSelfRegistration.selfRegistration.configuration.init.failed") .getString()); throw new RestartResponseException(PageLogin.class); } } private SecurityPolicyType resolveSecurityPolicy() { SecurityPolicyType securityPolicy = runPrivileged(new Producer<SecurityPolicyType>() { @Override public SecurityPolicyType run() { Task task = createAnonymousTask(OPERATION_GET_SECURITY_POLICY); task.setChannel(SchemaConstants.CHANNEL_GUI_SELF_REGISTRATION_URI); OperationResult result = new OperationResult(OPERATION_GET_SECURITY_POLICY); try { return getModelInteractionService().getSecurityPolicy(null, task, result); } catch (ObjectNotFoundException | SchemaException e) { LOGGER.error("Could not retrieve security policy"); return null; } } }); if (securityPolicy == null) { LOGGER.error("No security policy defined."); getSession() .error(createStringResource("PageSelfRegistration.securityPolicy.notFound").getString()); throw new RestartResponseException(PageLogin.class); } return securityPolicy; } public SelfRegistrationDto getSelfRegistrationConfiguration() { if (selfRegistrationDto == null) { initSelfRegistrationConfiguration(); } return selfRegistrationDto; } public ResetPolicyDto getResetPasswordPolicy() { if (resetPasswordPolicy == null) { initResetCredentialsConfiguration(); } return resetPasswordPolicy; } public AuthenticationEvaluator<NonceAuthenticationContext> getAuthenticationEvaluator() { return authenticationEvaluator; } }