fix #2449 add hangouts chat notification
This commit is contained in:
parent
855adb6520
commit
f7e0a081dd
3 changed files with 58 additions and 11 deletions
|
@ -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";
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue