@Override public String debugDump() { return debugDump(0); }
private String formatToFile(Message mailMessage, String url, List<String> headers, String body) { return "================ " + new Date() + " ======= " + (url != null ? url : "") + "\nHeaders:\n" + headers + "\n\nBody:\n" + body + "\n\nFor message:\n" + mailMessage.toString() + "\n\n"; }
private void logNotifyMessages(List<Message> messages) { for (Message message: messages) { LOGGER.debug("Notification message:\n{}", message.getBody()); } }
Message message = new Message(); message.setBody(body != null ? body : ""); if (contentType != null) { message.setContentType(contentType); } else if (generalNotifierType.getContentType() != null) { message.setContentType(generalNotifierType.getContentType()); message.setSubject(subject); message.setFrom(from); message.setTo(recipientsAddresses); message.setCc(getCcBccAddresses(generalNotifierType.getCcExpression(), variables, "notification cc-expression", task, result)); message.setBcc(getCcBccAddresses(generalNotifierType.getBccExpression(), variables, "notification bcc-expression", task, result)); message.setAttachments(attachments); transport.send(message, transportName, event, task, result); } else { getLogger().info("No recipients addresses for transport " + transportName + ", message corresponding to event " + event.getId() + " will not be send.");
@Test public void test430NotificationAboutJackType2() throws Exception { final String TEST_NAME = "test430NotificationAboutJackType2"; TestUtil.displayTestTitle(this, TEST_NAME); // GIVEN Task task = createTask(DOT_CLASS + TEST_NAME); OperationResult result = task.getResult(); PrismProperty<ScriptingExpressionType> expression = parseAnyData(NOTIFICATION_ABOUT_JACK_TYPE2_FILE); prepareNotifications(); // WHEN ExecutionContext output = scriptingExpressionEvaluator.evaluateExpression(expression.getAnyValue().getValue(), task, result); // THEN dumpOutput(output, result); result.computeStatus(); TestUtil.assertSuccess(result); assertOutputData(output, 1, OperationResultStatus.SUCCESS); assertEquals("Produced 1 event(s)\n", output.getConsoleOutput()); display("Dummy transport", dummyTransport); checkDummyTransportMessages("Custom", 1); Message m = dummyTransport.getMessages("dummy:Custom").get(0); assertEquals("Wrong message body", "1", m.getBody()); assertEquals("Wrong message subject", "Ad hoc notification 2", m.getSubject()); checkDummyTransportMessages("CustomType2", 1); m = dummyTransport.getMessages("dummy:CustomType2").get(0); assertEquals("Wrong message body", "POV:user:c0c010c0-d34d-b33f-f00d-111111111111(jack)", m.getBody()); assertEquals("Wrong message subject", "Failure notification of type 2", m.getSubject()); }
@Test public void test420AttachmentFromFile() throws Exception { final String TEST_NAME = "test420AttachmentFromFile"; TestUtil.displayTestTitle(this, TEST_NAME); // GIVEN Task task = taskManager.createTaskInstance(TestNotifications.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); preTestCleanup(AssignmentPolicyEnforcementType.FULL); // WHEN TestUtil.displayWhen(TEST_NAME); PrismObject<UserType> user = new UserType(prismContext) .name("testAttachmentFromFileUser") .asPrismObject(); addObject(user); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess("addObject result", result); // Check notifications display("Notifications", dummyTransport); notificationManager.setDisabled(true); checkDummyTransportMessages("attachment-from-file", 1); Message message = dummyTransport.getMessages("dummy:attachment-from-file").get(0); assertEquals("Wrong # of attachments", 1, message.getAttachments().size()); assertEquals("Wrong contentType of attachment", "image/png", message.getAttachments().get(0).getContentType()); assertEquals("Wrong fileName of attachments", "alf.png", message.getAttachments().get(0).getFileName()); assertEquals("Wrong fileName of attachments", "/home/user/example.png", message.getAttachments().get(0).getContentFromFile()); assertEquals("Wrong fileName of attachments", null, message.getAttachments().get(0).getContent()); }
private Message getMessageFromExpression(CustomNotifierType config, ExpressionVariables variables, Task task, OperationResult result) { if (config.getExpression() == null) { return null; } List<NotificationMessageType> messages; try { messages = evaluateExpression(config.getExpression(), variables, "message expression", task, result); } catch (ObjectNotFoundException | SchemaException | ExpressionEvaluationException | CommunicationException | ConfigurationException | SecurityViolationException e) { throw new SystemException("Couldn't evaluate custom notifier expression: " + e.getMessage(), e); } if (messages == null || messages.isEmpty()) { return null; } else if (messages.size() > 1) { getLogger().warn("Custom notifier returned more than one message: {}", messages); } return messages.get(0) != null ? new Message(messages.get(0)) : null; }
protected List<String> getRecipientsAddresses(Event event, GeneralNotifierType generalNotifierType, ExpressionVariables variables, UserType defaultRecipient, String transportName, Transport transport, Task task, OperationResult result) { List<String> addresses = new ArrayList<>(); if (!generalNotifierType.getRecipientExpression().isEmpty()) { for (ExpressionType expressionType : generalNotifierType.getRecipientExpression()) { List<String> r = evaluateExpressionChecked(expressionType, variables, "notification recipient", task, result); if (r != null) { addresses.addAll(r); } } if (addresses.isEmpty()) { getLogger().info("Notification for " + event + " will not be sent, because there are no known recipients."); } } else if (defaultRecipient == null) { getLogger().info("Unknown default recipient, notification will not be sent."); } else { String address = transport.getDefaultRecipientAddress(defaultRecipient); if (StringUtils.isEmpty(address)) { getLogger().info("Notification to " + defaultRecipient.getName() + " will not be sent, because the user has no address (mail, phone number, etc) for transport '" + transportName + "' set."); } else { addresses.add(address); } } return addresses; }
protected String getDummyTransportMessageBody(String name, int index) { List<Message> messages = dummyTransport.getMessages("dummy:" + name); Message message = messages.get(index); return message.getBody(); }
@Test public void test420NotificationAboutJack() throws Exception { final String TEST_NAME = "test420NotificationAboutJack"; TestUtil.displayTestTitle(this, TEST_NAME); // GIVEN Task task = createTask(DOT_CLASS + TEST_NAME); OperationResult result = task.getResult(); PrismProperty<ScriptingExpressionType> expression = parseAnyData(NOTIFICATION_ABOUT_JACK_FILE); prepareNotifications(); // WHEN ExecutionContext output = scriptingExpressionEvaluator.evaluateExpression(expression.getAnyValue().getValue(), task, result); // THEN dumpOutput(output, result); result.computeStatus(); TestUtil.assertSuccess(result); assertOutputData(output, 1, OperationResultStatus.SUCCESS); assertEquals("Produced 1 event(s)\n", output.getConsoleOutput()); display("Dummy transport", dummyTransport); checkDummyTransportMessages("Custom", 1); Message m = dummyTransport.getMessages("dummy:Custom").get(0); assertEquals("Wrong message body", "jack/" + USER_JACK_OID, m.getBody()); assertEquals("Wrong message subject", "Ad hoc notification", m.getSubject()); }
public static String formatToFileNew(Message message, String transport) { return "================ " + new Date() + " ======= [" + transport + "]\n" + message.debugDump() + "\n\n"; }
@Test public void test430ExpressionAttachment() throws Exception { final String TEST_NAME = "test430ExpressionAttachment"; TestUtil.displayTestTitle(this, TEST_NAME); // GIVEN Task task = taskManager.createTaskInstance(TestNotifications.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); preTestCleanup(AssignmentPolicyEnforcementType.FULL); // WHEN TestUtil.displayWhen(TEST_NAME); PrismObject<UserType> user = new UserType(prismContext) .name("testExpressionAttachmentUser") .asPrismObject(); addObject(user); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess("addObject result", result); // Check notifications display("Notifications", dummyTransport); notificationManager.setDisabled(true); checkDummyTransportMessages("expression-attachment", 1); Message message = dummyTransport.getMessages("dummy:expression-attachment").get(0); assertEquals("Wrong # of attachments", 1, message.getAttachments().size()); assertEquals("Wrong contentType of attachment", "text/html", message.getAttachments().get(0).getContentType()); assertEquals("Wrong content of attachments", "<!DOCTYPE html><html><body>Hello World!</body></html>", message.getAttachments().get(0).getContent()); assertEquals("Wrong fileName of attachments", "hello_world.html", message.getAttachments().get(0).getFileName()); assertEquals("Wrong fileName of attachments", null, message.getAttachments().get(0).getContentFromFile()); }
private String formatToFile(Message mailMessage) { return "============================================ " + "\n" +new Date() + "\n" + mailMessage.toString() + "\n\n"; }
protected void assertSingleDummyTransportMessageContaining(String name, String expectedSubstring) { List<Message> messages = dummyTransport.getMessages("dummy:" + name); assertNotNull("No messages recorded in dummy transport '" + name + "'", messages); if (messages.size() != 1) { fail("Invalid number of messages recorded in dummy transport '" + name + "', expected: 1, actual: "+messages.size()); } Message message = messages.get(0); assertTrue("Notifier "+name+" message body does not contain text: " + expectedSubstring + ", it is:\n" + message.getBody(), message.getBody().contains(expectedSubstring)); }
private String formatToFile(Message mailMessage) { return "================ " + new Date() + " =======\n" + mailMessage.toString() + "\n\n"; }
protected void assertHasDummyTransportMessage(String name, String expectedBody) { List<Message> messages = dummyTransport.getMessages("dummy:" + name); assertNotNull("No messages recorded in dummy transport '" + name + "'", messages); for (Message message: messages) { if (expectedBody.equals(message.getBody())) { return; } } fail("Notifier "+name+" message body " + expectedBody + " not found"); }
public static String formatToFileOld(Message message) { return "============================================ " + "\n" +new Date() + "\n" + message.toString() + "\n\n"; }
protected void assertSingleDummyTransportMessage(String name, String expectedBody) { List<Message> messages = dummyTransport.getMessages("dummy:" + name); assertNotNull("No messages recorded in dummy transport '" + name + "'", messages); if (messages.size() != 1) { fail("Invalid number of messages recorded in dummy transport '" + name + "', expected: 1, actual: "+messages.size()); } Message message = messages.get(0); assertEquals("Unexpected notifier "+name+" message body", expectedBody, message.getBody()); }
private void assertContains(Message notification, String text) { if (!notification.getBody().contains(text)) { fail("No '"+text+"' in "+notification); } }
protected ExpressionVariables getDefaultVariables(String from, List<String> to, Message message) throws UnsupportedEncodingException { ExpressionVariables variables = new ExpressionVariables(); variables.addVariableDefinition(SchemaConstants.C_FROM, from); variables.addVariableDefinition(SchemaConstants.C_ENCODED_FROM, URLEncoder.encode(from, "US-ASCII")); variables.addVariableDefinition(SchemaConstants.C_TO, to.get(0)); variables.addVariableDefinition(SchemaConstants.C_TO_LIST, to); List<String> encodedTo = new ArrayList<>(); for (String s : to) { encodedTo.add(URLEncoder.encode(s, "US-ASCII")); } variables.addVariableDefinition(SchemaConstants.C_ENCODED_TO, encodedTo.get(0)); variables.addVariableDefinition(SchemaConstants.C_ENCODED_TO_LIST, encodedTo); variables.addVariableDefinition(SchemaConstants.C_MESSAGE_TEXT, message.getBody()); variables.addVariableDefinition(SchemaConstants.C_ENCODED_MESSAGE_TEXT, URLEncoder.encode(message.getBody(), "US-ASCII")); variables.addVariableDefinition(SchemaConstants.C_MESSAGE, message); return variables; }