use of org.nhindirect.stagent.NHINDException in project nhin-d by DirectProject.
the class TrustChainValidator_downloadCertFromAIATest method testDownloadCertFromAIA_certNotAtURL_assertException.
@SuppressWarnings("deprecation")
public void testDownloadCertFromAIA_certNotAtURL_assertException() throws Exception {
final TrustChainValidator validator = new TrustChainValidator();
final File fl = new File("src/test/resources/certs/bob.derdd");
boolean exceptionOccurred = false;
try {
validator.downloadCertFromAIA(filePrefix + fl.getAbsolutePath());
} catch (NHINDException e) {
exceptionOccurred = true;
}
assertTrue(exceptionOccurred);
}
use of org.nhindirect.stagent.NHINDException in project nhin-d by DirectProject.
the class TrustChainValidator_downloadCertsFromAIATest method testDownloadCertsFromAIA_certNotAtURL_assertException.
public void testDownloadCertsFromAIA_certNotAtURL_assertException() throws Exception {
final TrustChainValidator validator = new TrustChainValidator();
final File fl = new File("src/test/resources/certs/bob.derdd");
boolean exceptionOccurred = false;
try {
validator.downloadCertsFromAIA(filePrefix + fl.getAbsolutePath());
} catch (NHINDException e) {
exceptionOccurred = true;
}
assertTrue(exceptionOccurred);
}
use of org.nhindirect.stagent.NHINDException in project nhin-d by DirectProject.
the class TrustChainValidator_getIntermediateCertsByAIATest method testGetIntermediateCertsByAIA_AIAExists_validateResolved.
public void testGetIntermediateCertsByAIA_AIAExists_validateResolved() throws Exception {
final TrustChainValidatorWrapper validator = new TrustChainValidatorWrapper() {
protected Collection<X509Certificate> downloadCertsFromAIA(String url) throws NHINDException {
try {
retrievedURL = url;
return Arrays.asList(TestUtils.loadCertificate("bob.der"));
} catch (Exception e) {
throw new NHINDException(e);
}
}
};
final TrustChainValidatorWrapper spyValidator = spy(validator);
Collection<X509Certificate> downloadedCerts = spyValidator.getIntermediateCertsByAIA(TestUtils.loadCertificate("demo.sandboxcernerdirect.com.der"));
assertEquals("http://sandboxcernerdirect.com/professional/public/subordinate.der", spyValidator.retrievedURL);
assertEquals(1, downloadedCerts.size());
assertEquals(TestUtils.loadCertificate("bob.der"), downloadedCerts.iterator().next());
verify(spyValidator, times(1)).downloadCertsFromAIA((String) any());
}
use of org.nhindirect.stagent.NHINDException in project nhin-d by DirectProject.
the class DefaultSmtpAgent method processMessage.
/**
* Processes an message from an SMTP stack. The bridge component between the SMTP stack and the SMTP agent is responsible for
* extracting the message, the recipient list, and the sender. In some cases, the routing headers may have different information than
* what is populated in the SMTP MAIL FROM and RCTP TO headers. In these cases, the SMTP headers should be favored over the routing
* headers in the message and passed as the recipient collection and sender to this method.
* @param message The message in the SMTP envelope.
* @param recipients The recipients of the message. The RCTP TO headers should be used over the message routing headers.
* @param sender The send of the message. The MAIL FROM header should be used over the From: routing header in the message.
*/
public MessageProcessResult processMessage(MimeMessage message, NHINDAddressCollection recipients, NHINDAddress sender) {
GatewayState.getInstance().lockForProcessing();
try {
LOGGER.trace("Entering processMessage(MimeMessage, NHINDAddressCollection, NHINDAddress");
MessageProcessResult retVal = null;
verifyInitialized();
preProcessMessage(message, sender);
Collection<NHINDAddress> originalRecipList = new ArrayList<NHINDAddress>(recipients);
DefaultMessageEnvelope envelopeToProcess = null;
try {
envelopeToProcess = new DefaultMessageEnvelope(new Message(message), recipients, sender);
envelopeToProcess.setAgent(agent);
// should always result in either a non null object or an exception
MessageEnvelope processEvn = processEnvelope(envelopeToProcess);
retVal = new MessageProcessResult(processEvn, null);
if (retVal.getProcessedMessage() != null)
postProcessMessage(retVal);
} catch (SmtpAgentException e) {
// rethrow
LOGGER.trace("Exiting processMessage(MimeMessage, NHINDAddressCollection, NHINDAddress", e);
throw e;
} catch (Exception e) {
// audit the message rejection
if (envelopeToProcess != null) {
Collection<AuditContext> contexts = createContextCollectionFromMessage(envelopeToProcess, Arrays.asList(AuditEvents.DEFAULT_HEADER_CONTEXT));
if (e instanceof NHINDException) {
NHINDException exception = (NHINDException) e;
if (exception.getError() != null) {
contexts.add(new DefaultAuditContext(AuditEvents.REJECTED_MESSAGE_REASON_CONTEXT, exception.getError().toString()));
if (exception.getError() != null && exception.getError() instanceof AgentException && ((AgentException) exception.getError()).getError() == AgentError.NoTrustedRecipients) {
StringBuilder rejectedRecips = new StringBuilder();
int cnt = 0;
for (NHINDAddress address : originalRecipList) {
rejectedRecips.append(address.getAddress());
if (++cnt < originalRecipList.size())
rejectedRecips.append(", ");
}
contexts.add(new DefaultAuditContext(AuditEvents.REJECTED_RECIPIENTS_CONTEXT, rejectedRecips.toString()));
}
}
}
auditor.audit(PRINICPAL, new AuditEvent(AuditEvents.REJECTED_MESSAGE_NAME, AuditEvents.EVENT_TYPE), contexts);
}
LOGGER.trace("Exiting processMessage(MimeMessage, NHINDAddressCollection, NHINDAddress", e);
throw new SmtpAgentException(SmtpAgentError.Unknown, e);
}
LOGGER.trace("Exiting processMessage(MimeMessage, NHINDAddressCollection, NHINDAddress");
return retVal;
} finally {
GatewayState.getInstance().unlockFromProcessing();
}
}
use of org.nhindirect.stagent.NHINDException in project nhin-d by DirectProject.
the class ConfigServiceCertificateStore method certFromData.
private X509Certificate certFromData(byte[] data) {
X509Certificate retVal = null;
try {
// first check for wrapped data
final CertContainer container = CertUtils.toCertContainer(data);
if (container.getWrappedKeyData() != null) {
// make sure we have a KeyStoreManager configured
if (this.mgr == null) {
throw new NHINDException(AgentError.Unexpected, "Resolved certifiate has wrapped data, but resolver has not been configured to unwrap it.");
}
// create a new wrapped certificate object
retVal = WrappedOnDemandX509CertificateEx.fromX509Certificate(mgr, container.getCert(), container.getWrappedKeyData());
}
ByteArrayInputStream bais = new ByteArrayInputStream(data);
// lets try this a as a PKCS12 data stream first
try {
KeyStore localKeyStore = KeyStore.getInstance("PKCS12", CryptoExtensions.getJCEProviderName());
localKeyStore.load(bais, "".toCharArray());
Enumeration<String> aliases = localKeyStore.aliases();
// we are really expecting only one alias
if (aliases.hasMoreElements()) {
String alias = aliases.nextElement();
X509Certificate cert = (X509Certificate) localKeyStore.getCertificate(alias);
// check if there is private key
Key key = localKeyStore.getKey(alias, "".toCharArray());
if (key != null && key instanceof PrivateKey) {
retVal = X509CertificateEx.fromX509Certificate(cert, (PrivateKey) key);
} else
retVal = cert;
}
} catch (Exception e) {
// must not be a PKCS12 stream, go on to next step
}
if (retVal == null) {
//try X509 certificate factory next
bais.reset();
bais = new ByteArrayInputStream(data);
retVal = (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(bais);
}
bais.close();
} catch (Exception e) {
throw new NHINDException("Data cannot be converted to a valid X.509 Certificate", e);
}
return retVal;
}
Aggregations