package eu.stork.peps.auth.engine.core.validator; import org.opensaml.xml.util.DatatypeHelper; import org.opensaml.xml.validation.ValidationException; import org.opensaml.xml.validation.Validator; import eu.stork.peps.auth.engine.core.CustomAttributeQuery; public class CustomAttributeQueryValidator implements Validator { /** * Validate action. * * @param attrQuery the attribute query to validate * * @throws ValidationException the validation exception */ public final void validate(final CustomAttributeQuery attrQuery) throws ValidationException { validateAssertion(attrQuery); validateSubject(attrQuery); validateDestination(attrQuery); } /** * Validate assertion. * * @param attrQuery the attribute query * * @throws ValidationException the validation exception */ protected final void validateAssertion(final CustomAttributeQuery attrQuery) throws ValidationException { if (DatatypeHelper.isEmpty(attrQuery.getAssertionConsumerServiceURL())) { throw new ValidationException("Consumer Service URL must be specified."); } } /** * Validate subject * @param query the attribute query to validate * @throws ValidationException the validation exception */ protected void validateSubject(CustomAttributeQuery query) throws ValidationException { if (query.getSubject() == null) throw new ValidationException("Subject is required"); } /** * Validate the destination * @param query the query to validate * @throws ValidationException the validation exception */ protected void validateDestination(CustomAttributeQuery query) throws ValidationException { if (query.getDestination() == null) throw new ValidationException("Destination is required"); } /** * Validate the destination * @param query the query to validate * @throws ValidationException the validation exception */ protected void validateTime(CustomAttributeQuery query) throws ValidationException { if (query.getIssueInstant().isAfterNow()) throw new ValidationException("Issue time is in the futue"); } }