fix #2449 add hangouts chat notification

This commit is contained in:
Shinsuke Sugaya 2020-04-26 17:25:39 +09:00
parent 855adb6520
commit f7e0a081dd
3 changed files with 58 additions and 11 deletions

View file

@ -138,6 +138,8 @@ public class Constants extends CoreLibConstants {
public static final String SLACK_WEBHOOK_URLS_PROPERTY = "slack.webhook.urls";
public static final String GOOGLE_CHAT_WEBHOOK_URLS_PROPERTY = "google.chat.webhook.urls";
public static final String USE_BROWSER_LOCALE_FOR_SEARCH_PROPERTY = "search.use.browser.locale";
public static final String SUGGEST_SEARCH_LOG_PROPERTY = "suggest.searchlog";

View file

@ -32,10 +32,11 @@ import org.dbflute.mail.send.supplement.SMailPostingDiscloser;
public class NotificationHelper {
private static final Logger logger = LogManager.getLogger(NotificationHelper.class);
protected static final String LF = "\n";
protected static final char LF = '\n';
public void send(final CardView cardView, final SMailPostingDiscloser discloser) {
sendToSlack(cardView, discloser);
sendToGoogleChat(cardView, discloser);
}
protected void sendToSlack(CardView cardView, SMailPostingDiscloser discloser) {
@ -45,9 +46,7 @@ public class NotificationHelper {
if (StringUtil.isBlank(slackWebhookUrls)) {
return;
}
final StringBuilder buf = new StringBuilder();
final String body =
buf.append("{\"text\":\"").append(StringEscapeUtils.escapeJson(toSlackMessage(discloser))).append("\"}").toString();
final String body = toSlackMessage(discloser);
StreamUtil.split(slackWebhookUrls, "[,\\s]").of(
stream -> stream.filter(StringUtil::isNotBlank).forEach(
url -> {
@ -67,12 +66,50 @@ public class NotificationHelper {
}
protected String toSlackMessage(final SMailPostingDiscloser discloser) {
final StringBuilder sb = new StringBuilder();
sb.append(LF).append(discloser.getSavedSubject().orElse(StringUtil.EMPTY).trim());
sb.append(LF).append("```");
sb.append(LF).append(discloser.getSavedPlainText().orElse(StringUtil.EMPTY).trim());
sb.append(LF).append("```");
return sb.toString();
final StringBuilder buf = new StringBuilder(100);
buf.append("{\"text\":\"");
buf.append(LF);
buf.append(StringEscapeUtils.escapeJson(discloser.getSavedSubject().orElse(StringUtil.EMPTY).trim()));
buf.append(LF).append("```");
buf.append(LF).append(StringEscapeUtils.escapeJson(discloser.getSavedPlainText().orElse(StringUtil.EMPTY).trim()));
buf.append(LF).append("```\"}");
return buf.toString();
}
protected void sendToGoogleChat(CardView cardView, SMailPostingDiscloser discloser) {
// https://developers.google.com/hangouts/chat/how-tos/webhooks
final FessConfig fessConfig = ComponentUtil.getFessConfig();
final String googleChatWebhookUrls = fessConfig.getGoogleChatWebhookUrls();
if (StringUtil.isBlank(googleChatWebhookUrls)) {
return;
}
final String body = toGoogleChatMessage(discloser);
StreamUtil.split(googleChatWebhookUrls, "[,\\s]").of(
stream -> stream.filter(StringUtil::isNotBlank).forEach(
url -> {
try (CurlResponse response = Curl.post(url).header("Content-Type", "application/json").body(body).execute()) {
if (response.getHttpStatusCode() == 200) {
if (logger.isDebugEnabled()) {
logger.debug("Sent {} to {}.", body, url);
}
} else {
logger.warn("Failed to send {} to {}. HTTP Status is {}. {}", body, url, response.getHttpStatusCode(),
response.getContentAsString());
}
} catch (final IOException e) {
logger.warn("Failed to send {} to {}.", body, url, e);
}
}));
}
protected String toGoogleChatMessage(final SMailPostingDiscloser discloser) {
final StringBuilder buf = new StringBuilder(100);
buf.append("{\"text\":\"");
buf.append(LF);
buf.append(StringEscapeUtils.escapeJson(discloser.getSavedSubject().orElse(StringUtil.EMPTY).trim()));
buf.append(LF).append("```");
buf.append(LF).append(StringEscapeUtils.escapeJson(discloser.getSavedPlainText().orElse(StringUtil.EMPTY).trim()));
buf.append(LF).append("```\"}");
return buf.toString();
}
}

View file

@ -505,7 +505,7 @@ public interface FessProp {
return StringUtil.isNotBlank(getNotificationTo()) || StringUtil.isNotBlank(getSlackWebhookUrls());
}
default void getSlackWebhookUrls(final String value) {
default void setSlackWebhookUrls(final String value) {
setSystemProperty(Constants.SLACK_WEBHOOK_URLS_PROPERTY, value);
}
@ -513,6 +513,14 @@ public interface FessProp {
return getSystemProperty(Constants.SLACK_WEBHOOK_URLS_PROPERTY, StringUtil.EMPTY);
}
default void setGoogleChatWebhookUrls(final String value) {
setSystemProperty(Constants.GOOGLE_CHAT_WEBHOOK_URLS_PROPERTY, value);
}
default String getGoogleChatWebhookUrls() {
return getSystemProperty(Constants.GOOGLE_CHAT_WEBHOOK_URLS_PROPERTY, StringUtil.EMPTY);
}
default void setNotificationTo(final String value) {
setSystemProperty(Constants.NOTIFICATION_TO_PROPERTY, value);
}