diff --git a/empty-conf/springboot.yml b/empty-conf/springboot.yml index 1fc3e6b..2ea8498 100644 --- a/empty-conf/springboot.yml +++ b/empty-conf/springboot.yml @@ -6,6 +6,9 @@ app: alert-subject: "" javamail-config: "" expected-result-file-path: "" + slack: + channel: "" + app-token: "" htmlunit: username: "" password": "" diff --git a/pom.xml b/pom.xml index 032e11a..71a3355 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.example guerrilla - 1.0.1 + 1.1.0 guerrilla Hit and Run @@ -16,6 +16,7 @@ 1.19.1 1.6.2 33.4.7-jre + 1.45.3 @@ -31,7 +32,11 @@ - + + com.slack.api + slack-api-client + ${slack-api-client.version} + org.springframework.boot spring-boot-starter @@ -64,7 +69,7 @@ javax.mail ${java.mail.version} - + com.fasterxml.jackson.core jackson-core diff --git a/src/main/java/com/example/guerrilla/service/CaptureService.java b/src/main/java/com/example/guerrilla/service/CaptureService.java index 61a09da..dc0fca9 100644 --- a/src/main/java/com/example/guerrilla/service/CaptureService.java +++ b/src/main/java/com/example/guerrilla/service/CaptureService.java @@ -92,6 +92,9 @@ public class CaptureService { @Autowired private ObjectMapper objectMapper; + + @Autowired + private SlackService slackService; public HashMap convertStringToMap(String jsonString) throws IOException { TypeReference> ref = new TypeReference<>() { @@ -131,6 +134,9 @@ public class CaptureService { Pair sendEmailResult = Pair.of(Boolean.TRUE, emailService.sendEmail(fromAddress, smtpPassword, toAddresses, alertSubject, contentBuilder.toString())); logger.info("sendEmailResult: {}", sendEmailResult); + if (sendEmailResult.equals(Pair.of(Boolean.TRUE,Boolean.TRUE))) { + slackService.sendMessage(contentBuilder.toString()); + } } } diff --git a/src/main/java/com/example/guerrilla/service/SlackService.java b/src/main/java/com/example/guerrilla/service/SlackService.java new file mode 100644 index 0000000..8b87a8a --- /dev/null +++ b/src/main/java/com/example/guerrilla/service/SlackService.java @@ -0,0 +1,58 @@ +package com.example.guerrilla.service; + +import java.io.IOException; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import com.slack.api.Slack; +import com.slack.api.methods.MethodsClient; +import com.slack.api.methods.SlackApiException; +import com.slack.api.methods.request.chat.ChatPostMessageRequest; +import com.slack.api.methods.response.chat.ChatPostMessageResponse; +import com.slack.api.model.Message; + +@Service +public class SlackService { + + private static final Logger logger = LoggerFactory.getLogger(SlackService.class); + + @Value("${app.slack.app-token}") + private String token; + + @Value("${app.slack.channel}") + private String channel; + + public void sendMessage(String content) { + if (StringUtils.isEmpty(token) || StringUtils.isEmpty(channel)) { + logger.info("slack app token or channel not defined!"); + return; + } + Slack slack = Slack.getInstance(); + + // Initialize an API Methods client with the given token + MethodsClient methods = slack.methods(token); + + // Build a request object + ChatPostMessageRequest request = ChatPostMessageRequest.builder().channel(channel).text(content).build(); + + // Get a response as a Java object + try { + ChatPostMessageResponse response = methods.chatPostMessage(request); + logger.info("response: {}", response); + if (response.isOk()) { + Message postedMessage = response.getMessage(); + logger.info("postedMessage: {}", postedMessage); + } else { + String errorCode = response.getError(); + logger.info("errorCode: {}", errorCode); + } + } catch (IOException | SlackApiException e) { + logger.error("sendMessage error!", e); + } + + } +}