use of com.helger.phase4.model.pmode.leg.PModeLegErrorHandling in project phase4 by phax.
the class ENTSOGCompatibilityValidator method _checkIfLegIsValid.
private static void _checkIfLegIsValid(@Nonnull final ErrorList aErrorList, @Nonnull final PModeLeg aPModeLeg, @Nonnull @Nonempty final String sFieldPrefix) {
final PModeLegProtocol aLegProtocol = aPModeLeg.getProtocol();
if (aLegProtocol == null) {
aErrorList.add(_createError(sFieldPrefix + "Protocol is missing"));
} else {
// PROTOCOL Address only https allowed
final String sAddressProtocol = aLegProtocol.getAddressProtocol();
if (StringHelper.hasText(sAddressProtocol)) {
if (sAddressProtocol.equalsIgnoreCase("http") || sAddressProtocol.equalsIgnoreCase("https")) {
// Always okay
} else {
// Other protocol
aErrorList.add(_createError(sFieldPrefix + "AddressProtocol '" + sAddressProtocol + "' is unsupported"));
}
} else {
// Empty address protocol
aErrorList.add(_createError(sFieldPrefix + "AddressProtocol is missing"));
}
final ESoapVersion eSOAPVersion = aLegProtocol.getSoapVersion();
if (!eSOAPVersion.isAS4Default()) {
aErrorList.add(_createError(sFieldPrefix + "SoapVersion '" + eSOAPVersion.getVersion() + "' is unsupported"));
}
}
// Only check the security features if a Security Leg is currently present
final PModeLegSecurity aPModeLegSecurity = aPModeLeg.getSecurity();
if (aPModeLegSecurity != null) {
// Check Certificate
if (aPModeLegSecurity.getX509SignatureCertificate() == null) {
aErrorList.add(_createError(sFieldPrefix + "Security.X509SignatureCertificate is missing"));
}
// Check Signature Algorithm
if (aPModeLegSecurity.getX509SignatureAlgorithm() == null) {
aErrorList.add(_createError(sFieldPrefix + "Security.X509SignatureAlgorithm is missing"));
} else if (!aPModeLegSecurity.getX509SignatureAlgorithm().equals(ECryptoAlgorithmSign.RSA_SHA_256)) {
aErrorList.add(_createError(sFieldPrefix + "Security.X509SignatureAlgorithm must use the value '" + ECryptoAlgorithmSign.RSA_SHA_256.getID() + "'"));
}
// Check Hash Function
if (aPModeLegSecurity.getX509SignatureHashFunction() == null) {
aErrorList.add(_createError(sFieldPrefix + "Security.X509SignatureHashFunction is missing"));
} else if (!aPModeLegSecurity.getX509SignatureHashFunction().equals(ECryptoAlgorithmSignDigest.DIGEST_SHA_256)) {
aErrorList.add(_createError(sFieldPrefix + "Securoty.X509SignatureHashFunction must use the value '" + ECryptoAlgorithmSignDigest.DIGEST_SHA_256.getID() + "'"));
}
// Check Encrypt algorithm
if (aPModeLegSecurity.getX509EncryptionAlgorithm() == null) {
aErrorList.add(_createError(sFieldPrefix + "Security.X509EncryptionAlgorithm is missing"));
} else if (!aPModeLegSecurity.getX509EncryptionAlgorithm().equals(ECryptoAlgorithmCrypt.AES_128_GCM)) {
aErrorList.add(_createError(sFieldPrefix + "Securoty.X509EncryptionAlgorithm must use the value '" + ECryptoAlgorithmCrypt.AES_128_GCM.getID() + "' instead of '" + aPModeLegSecurity.getX509EncryptionAlgorithm().getID() + "'"));
}
// Check WSS Version = 1.1.1
if (aPModeLegSecurity.getWSSVersion() != null) {
// Check for WSS - Version if there is one present
if (!aPModeLegSecurity.getWSSVersion().equals(EWSSVersion.WSS_111))
aErrorList.add(_createError(sFieldPrefix + "Security.WSSVersion must use the value " + EWSSVersion.WSS_111 + " instead of " + aPModeLegSecurity.getWSSVersion()));
}
if (aPModeLegSecurity.isUsernameTokenCreatedDefined() || aPModeLegSecurity.isUsernameTokenDigestDefined() || aPModeLegSecurity.isUsernameTokenNonceDefined() || aPModeLegSecurity.hasUsernameTokenPassword() || aPModeLegSecurity.hasUsernameTokenUsername()) {
aErrorList.add(_createError(sFieldPrefix + "Username nor it's part MUST NOT be set"));
}
// PModeAuthorize
if (aPModeLegSecurity.isPModeAuthorizeDefined()) {
if (aPModeLegSecurity.isPModeAuthorize())
aErrorList.add(_createError(sFieldPrefix + "Security.PModeAuthorize must be set to 'false'"));
} else {
aErrorList.add(_createError(sFieldPrefix + "Security.PModeAuthorize is missing"));
}
// SEND RECEIPT TRUE/FALSE when false don't send receipts anymore
if (aPModeLegSecurity.isSendReceiptDefined()) {
if (aPModeLegSecurity.isSendReceipt()) {
// set response required
if (!aPModeLegSecurity.isSendReceiptNonRepudiation())
aErrorList.add(_createError(sFieldPrefix + "SendReceiptNonRepudiation must be set to 'true'"));
if (aPModeLegSecurity.getSendReceiptReplyPattern() != EPModeSendReceiptReplyPattern.RESPONSE)
aErrorList.add(_createError(sFieldPrefix + "Security.SendReceiptReplyPattern must use the value " + EPModeSendReceiptReplyPattern.RESPONSE + " instead of " + aPModeLegSecurity.getSendReceiptReplyPattern()));
}
}
} else {
aErrorList.add(_createError(sFieldPrefix + "Security is missing"));
}
// Error Handling
final PModeLegErrorHandling aErrorHandling = aPModeLeg.getErrorHandling();
if (aErrorHandling != null) {
if (aErrorHandling.isReportAsResponseDefined()) {
if (!aErrorHandling.isReportAsResponse())
aErrorList.add(_createError(sFieldPrefix + "ErrorHandling.Report.AsResponse must be 'true'"));
} else {
aErrorList.add(_createError(sFieldPrefix + "ErrorHandling.Report.AsResponse is missing"));
}
if (aErrorHandling.isReportProcessErrorNotifyConsumerDefined()) {
if (!aErrorHandling.isReportProcessErrorNotifyConsumer())
aErrorList.add(_createWarn(sFieldPrefix + "ErrorHandling.Report.ProcessErrorNotifyConsumer should be 'true'"));
} else {
aErrorList.add(_createError(sFieldPrefix + "ErrorHandling.Report.ProcessErrorNotifyConsumer is missing"));
}
if (aErrorHandling.isReportProcessErrorNotifyProducerDefined()) {
if (!aErrorHandling.isReportProcessErrorNotifyProducer())
aErrorList.add(_createWarn(sFieldPrefix + "ErrorHandling.Report.ProcessErrorNotifyProducer should be 'true'"));
} else {
aErrorList.add(_createError(sFieldPrefix + "ErrorHandling.Report.ProcessErrorNotifyProducer is missing"));
}
if (aErrorHandling.getReportSenderErrorsTo() != null && aErrorHandling.getReportSenderErrorsTo().addresses() != null && aErrorHandling.getReportSenderErrorsTo().addresses().isNotEmpty()) {
aErrorList.add(_createError(sFieldPrefix + "ReportSenderErrorsTo must not be set"));
}
} else {
aErrorList.add(_createError(sFieldPrefix + "ErrorHandling is missing"));
}
}
use of com.helger.phase4.model.pmode.leg.PModeLegErrorHandling in project phase4 by phax.
the class ENTSOGPMode method generatePModeLegErrorHandling.
@Nonnull
public static PModeLegErrorHandling generatePModeLegErrorHandling() {
final PModeAddressList aReportSenderErrorsTo = null;
final PModeAddressList aReportReceiverErrorsTo = null;
final ETriState eReportAsResponse = ETriState.TRUE;
final ETriState eReportProcessErrorNotifyConsumer = ETriState.TRUE;
final ETriState eReportProcessErrorNotifyProducer = ETriState.TRUE;
final ETriState eReportDeliveryFailuresNotifyProducer = ETriState.TRUE;
return new PModeLegErrorHandling(aReportSenderErrorsTo, aReportReceiverErrorsTo, eReportAsResponse, eReportProcessErrorNotifyConsumer, eReportProcessErrorNotifyProducer, eReportDeliveryFailuresNotifyProducer);
}
use of com.helger.phase4.model.pmode.leg.PModeLegErrorHandling in project phase4 by phax.
the class ENTSOGCompatibilityValidatorTest method testValidatePModeErrorHandlingReportProcessErrorNotifyConsumerMandatory.
@Test
public void testValidatePModeErrorHandlingReportProcessErrorNotifyConsumerMandatory() {
final PModeLegErrorHandling aErrorHandler = PModeLegErrorHandling.createUndefined();
m_aPMode.setLeg1(new PModeLeg(PModeLegProtocol.createForDefaultSoapVersion("http://test.example.org"), null, aErrorHandler, null, null));
VALIDATOR.validatePMode(m_aPMode, m_aErrorList);
assertTrue(m_aErrorList.containsAny(x -> x.getErrorText(LOCALE).contains("ErrorHandling.Report.ProcessErrorNotifyConsumer is missing")));
}
use of com.helger.phase4.model.pmode.leg.PModeLegErrorHandling in project phase4 by phax.
the class ENTSOGCompatibilityValidatorTest method testValidatePModeErrorHandlingReportDeliveryFailuresNotifyProducerMandatory.
@Test
public void testValidatePModeErrorHandlingReportDeliveryFailuresNotifyProducerMandatory() {
final PModeLegErrorHandling aErrorHandler = PModeLegErrorHandling.createUndefined();
m_aPMode.setLeg1(new PModeLeg(PModeLegProtocol.createForDefaultSoapVersion("http://test.example.org"), null, aErrorHandler, null, null));
VALIDATOR.validatePMode(m_aPMode, m_aErrorList);
assertTrue(m_aErrorList.containsAny(x -> x.getErrorText(LOCALE).contains("ErrorHandling.Report.ProcessErrorNotifyProducer is missing")));
}
use of com.helger.phase4.model.pmode.leg.PModeLegErrorHandling in project phase4 by phax.
the class ENTSOGCompatibilityValidatorTest method testValidatePModeErrorHandlingReportDeliveryFailuresNotifyProducerWrongValue.
@Test
public void testValidatePModeErrorHandlingReportDeliveryFailuresNotifyProducerWrongValue() {
final PModeLegErrorHandling aErrorHandler = PModeLegErrorHandling.createUndefined();
aErrorHandler.setReportProcessErrorNotifyProducer(false);
m_aPMode.setLeg1(new PModeLeg(PModeLegProtocol.createForDefaultSoapVersion("http://test.example.org"), null, aErrorHandler, null, null));
VALIDATOR.validatePMode(m_aPMode, m_aErrorList);
assertTrue(m_aErrorList.containsAny(x -> x.getErrorText(LOCALE).contains("ErrorHandling.Report.ProcessErrorNotifyProducer should be 'true'")));
}
Aggregations