package com.evolveum.midpoint.web.page.forgetpassword;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.evolveum.midpoint.schema.util.SecurityPolicyUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractAuthenticationPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractCredentialsResetPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MailAuthenticationPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MailResetPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.NonceCredentialsPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityQuestionsCredentialsPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityQuestionsResetPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SmsAuthenticationPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SmsResetPolicyType;
public class ResetPolicyDto implements Serializable {
private static final long serialVersionUID = 1L;
enum ResetMethod {
SECURITY_QUESTIONS, MAIL, SMS, NONE;
}
private String name;
private ResetMethod resetMethod;
private MailAuthenticationPolicyType mailAuthentication;
private SmsAuthenticationPolicyType smsAuthentication;
private SecurityQuestionsCredentialsPolicyType securityQuestions;
private NonceCredentialsPolicyType noncePolicy;
private ObjectReferenceType formRef;
public void initResetPolicyDto(SecurityPolicyType securityPolicyType) throws SchemaException {
if (securityPolicyType == null) {
return;
}
// if (securityPolicyType.getCredentials() != null
// && securityPolicyType.getCredentials().getSecurityQuestions() != null) {
// this.securityQuestions = securityPolicyType.getCredentials().getSecurityQuestions();
// resetMethod.add(ResetMethod.SECURITY_QUESTIONS);
// return;
// }
if (securityPolicyType.getCredentialsReset() == null) {
return;
}
MailResetPolicyType mailResetPolicy = securityPolicyType.getCredentialsReset().getMailReset();
if (mailResetPolicy != null) {
this.resetMethod = ResetMethod.MAIL;
initResetPolicy(mailResetPolicy, securityPolicyType);
return;
}
SmsResetPolicyType smsResetPolicy = securityPolicyType.getCredentialsReset().getSmsReset();
if (smsResetPolicy != null) {
this.resetMethod = ResetMethod.SMS;
initResetPolicy(smsResetPolicy, securityPolicyType);
return;
}
SecurityQuestionsResetPolicyType securityQuestionsResetPolicy = securityPolicyType
.getCredentialsReset().getSecurityQuestionReset();
if (securityQuestionsResetPolicy != null) {
this.resetMethod = ResetMethod.SECURITY_QUESTIONS;
initResetPolicy(securityQuestionsResetPolicy, securityPolicyType);
return;
}
}
private void initResetPolicy(AbstractCredentialsResetPolicyType resetPolicy,
SecurityPolicyType securityPolicyType) throws SchemaException {
this.formRef = resetPolicy.getFormRef();
AbstractAuthenticationPolicyType authPolicy = SecurityPolicyUtil
.getAuthenticationPolicy(resetPolicy.getAdditionalAuthenticationName(), securityPolicyType);
if (authPolicy instanceof MailAuthenticationPolicyType) {
this.mailAuthentication = (MailAuthenticationPolicyType) authPolicy;
noncePolicy = SecurityPolicyUtil.getCredentialPolicy(mailAuthentication.getMailNonce(),
securityPolicyType);
} else if (authPolicy instanceof SmsAuthenticationPolicyType) {
this.smsAuthentication = (SmsAuthenticationPolicyType) authPolicy;
this.noncePolicy = SecurityPolicyUtil.getCredentialPolicy(smsAuthentication.getSmsNonce(),
securityPolicyType);
}
this.name = resetPolicy.getName();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ResetMethod getResetMethod() {
return resetMethod;
}
public void setResetMethod(ResetMethod resetMethod) {
this.resetMethod = resetMethod;
}
public MailAuthenticationPolicyType getMailAuthentication() {
return mailAuthentication;
}
public void setMailAuthentication(MailAuthenticationPolicyType mailAuthentication) {
this.mailAuthentication = mailAuthentication;
}
public SmsAuthenticationPolicyType getSmsAuthentication() {
return smsAuthentication;
}
public void setSmsAuthentication(SmsAuthenticationPolicyType smsAuthentication) {
this.smsAuthentication = smsAuthentication;
}
public SecurityQuestionsCredentialsPolicyType getSecurityQuestions() {
return securityQuestions;
}
public void setSecurityQuestions(SecurityQuestionsCredentialsPolicyType securityQuestions) {
this.securityQuestions = securityQuestions;
}
public NonceCredentialsPolicyType getNoncePolicy() {
return noncePolicy;
}
public void setNoncePolicy(NonceCredentialsPolicyType noncePolicy) {
this.noncePolicy = noncePolicy;
}
public ObjectReferenceType getFormRef() {
return formRef;
}
}