package org.openstack.atlas.api.validation.validators; import org.openstack.atlas.api.validation.Validator; import org.openstack.atlas.api.validation.ValidatorBuilder; import org.openstack.atlas.api.validation.results.ValidatorResult; import org.openstack.atlas.api.validation.verifiers.*; import org.openstack.atlas.docs.loadbalancers.api.v1.Node; import org.openstack.atlas.docs.loadbalancers.api.v1.NodeCondition; import org.openstack.atlas.docs.loadbalancers.api.v1.SslTermination; import org.openstack.atlas.lb.helpers.ipstring.IPv4ToolSet; import org.openstack.atlas.lb.helpers.ipstring.exceptions.IPStringException; import static org.openstack.atlas.api.validation.ValidatorBuilder.build; import static org.openstack.atlas.api.validation.context.HttpRequestType.POST; import static org.openstack.atlas.api.validation.context.HttpRequestType.PUT; public class SslTerminationValidator implements ResourceValidator<SslTermination> { private final Validator<SslTermination> validator; public SslTerminationValidator() { validator = build(new ValidatorBuilder<SslTermination>(SslTermination.class) { { // SHARED EXPECTATIONS result(validationTarget().getId()).must().not().exist().withMessage("Id field cannot be modified."); // PUT EXPECTATIONS //If user supplies nothing, cert key and port must exist as bare minimum must().adhereTo(new Verifier<SslTermination>() { @Override public VerifierResult verify(SslTermination ssl) { if ((ssl.getCertificate() == null || ssl.getPrivatekey() == null || ssl.getIntermediateCertificate() == null) && ((ssl.isEnabled() != null && (ssl.isSecureTrafficOnly() != null) && ssl.getIntermediateCertificate() != null && ssl.getSecurePort() != null))) { return new VerifierResult(false); } return new VerifierResult(true); } }).withMessage("Must supply certificates(s), key and secure port for updating ssl termination."); //If user supplies nothing, maybe some attrs.. cert key and port must exist as bare minimum must().adhereTo(new Verifier<SslTermination>() { @Override public VerifierResult verify(SslTermination ssl) { if ((ssl.getCertificate() == null && ssl.getPrivatekey() == null && ssl.getIntermediateCertificate() == null) && (ssl.isEnabled() == null && (ssl.isSecureTrafficOnly() == null) && ssl.getIntermediateCertificate() == null && ssl.getSecurePort() == null)) { return new VerifierResult(false); } return new VerifierResult(true); } }).withMessage("Must supply certificates(s), key and secure port for updating ssl termination."); //If cert or key is null, and no other attrs are present must().adhereTo(new Verifier<SslTermination>() { @Override public VerifierResult verify(SslTermination ssl) { if ((ssl.getCertificate() == null || ssl.getPrivatekey() == null && ssl.getIntermediateCertificate() == null) && (ssl.isEnabled() == null && (ssl.isSecureTrafficOnly() == null) && ssl.getSecurePort() == null)) { return new VerifierResult(false); } return new VerifierResult(true); } }).withMessage("Must supply certificates(s), key and secure port for updating ssl termination."); //If cert or key is null, and other attrs are present must().adhereTo(new Verifier<SslTermination>() { @Override public VerifierResult verify(SslTermination ssl) { if ((ssl.getCertificate() != null || ssl.getPrivatekey() != null)) { if (ssl.getCertificate() == null || ssl.getPrivatekey() == null) { return new VerifierResult(false); } } return new VerifierResult(true); } }).withMessage("Must supply certificates(s), key and secure port for updating ssl termination cert and or key values."); //If cert/key null and icert !null, other attrs are present must().adhereTo(new Verifier<SslTermination>() { @Override public VerifierResult verify(SslTermination ssl) { if (ssl.getIntermediateCertificate() != null) { if (ssl.getCertificate() == null || ssl.getPrivatekey() == null) { return new VerifierResult(false); } } return new VerifierResult(true); } }).withMessage("Must supply certificates(s), key and secure port for updating ssl termination cert and or key values."); //If cert or key and secure port is null, and no other attrs are present must().adhereTo(new Verifier<SslTermination>() { @Override public VerifierResult verify(SslTermination ssl) { if ((ssl.getCertificate() != null && ssl.getPrivatekey() != null && ssl.getSecurePort() == null)) { return new VerifierResult(false); } return new VerifierResult(true); } }).withMessage("Must supply certificates(s), key and secure port for updating ssl termination."); } }); } @Override public ValidatorResult validate(SslTermination ssl, Object type) { ValidatorResult result = validator.validate(ssl, type); return ValidatorUtilities.removeEmptyMessages(result); } @Override public Validator<SslTermination> getValidator() { return validator; } }