This is an automated email from the ASF dual-hosted git repository. dpavlov pushed a commit to branch ignite-16829 in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git
commit 949d1c031f853437407c17ca488b1c4fccc0fb93 Author: Dmitriy Pavlov <dpav...@apache.org> AuthorDate: Fri Apr 8 19:39:45 2022 +0300 IGNITE-16829 Support configurable mail smtp host --- conf/branches.json | 5 +- .../ci/tcbot/conf/LocalFilesBasedConfig.java | 6 +- .../ignite/tcbot/engine/conf/EmailSettings.java | 8 +++ .../tcbot/engine/conf/NotificationChannel.java | 10 +-- .../tcbot/engine/conf/NotificationsConfig.java | 82 ++++------------------ .../ignite/tcbot/engine/conf/SmtpSettings.java | 18 +++++ .../apache/ignite/tcbot/notify/EmailSender.java | 10 +-- .../ignite/tcbot/notify/ISendEmailConfig.java | 4 ++ 8 files changed, 54 insertions(+), 89 deletions(-) diff --git a/conf/branches.json b/conf/branches.json index a2f7f1bf..3556bc02 100644 --- a/conf/branches.json +++ b/conf/branches.json @@ -100,8 +100,11 @@ /* Username, equal to from: field */ "username": "ignitetc...@gmail.com", /** Email password encoded using Password Encoder. */ - "pwd": "" + "pwd": "", //todo ^ specify password + "smtp": { + "host": "127.0.0.1" + } }, "channels": [ { diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java index d6ff6ec1..313ce2e0 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java @@ -102,11 +102,7 @@ public class LocalFilesBasedConfig implements ITcBotConfig { /** {@inheritDoc} */ @Override public NotificationsConfig notifications() { - NotificationsConfig notifications = getConfig().notifications(); - if (notifications != null && !notifications.isEmpty()) - return notifications; - - return NotificationsConfig.backwardConfig(); + return getConfig().notifications(); } /** {@inheritDoc} */ diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/EmailSettings.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/EmailSettings.java index 0c130f9d..7cf9a8eb 100644 --- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/EmailSettings.java +++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/EmailSettings.java @@ -16,6 +16,7 @@ */ package org.apache.ignite.tcbot.engine.conf; +@SuppressWarnings("unused") public class EmailSettings { /** Email to send notifications from. */ private String username; @@ -23,6 +24,9 @@ public class EmailSettings { /** Email password, encoded using Password Encoder. */ private String pwd; + /** Custom smtp server, default is gmail */ + private SmtpSettings smtp; + /** * @return Email to send notifications from. */ @@ -50,4 +54,8 @@ public class EmailSettings { public void password(String pwd) { this.pwd = pwd; } + + public SmtpSettings smtp() { + return smtp; + } } diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationChannel.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationChannel.java index 9f1b57df..3ad0b163 100644 --- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationChannel.java +++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationChannel.java @@ -26,7 +26,7 @@ import javax.annotation.Nullable; * */ public class NotificationChannel implements INotificationChannel { - /** (Destionation) Email. */ + /** (Destination) Email. */ private String email; /** Slack. */ @@ -74,14 +74,6 @@ public class NotificationChannel implements INotificationChannel { return (tagsFilter != null) && !tagsFilter.isEmpty(); } - public void slack(String slack) { - this.slack = slack; - } - - public void subscribe(String trackedBranchName) { - this.subscribed.add(trackedBranchName); - } - /** {@inheritDoc} */ @Override public String toString() { return MoreObjects.toStringHelper(this) diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationsConfig.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationsConfig.java index 3d4da024..544ffca6 100644 --- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationsConfig.java +++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationsConfig.java @@ -19,21 +19,16 @@ package org.apache.ignite.tcbot.engine.conf; import com.google.common.base.Preconditions; import com.google.common.base.Strings; -import org.apache.ignite.tcbot.common.conf.ITcServerConfig; import org.apache.ignite.tcbot.common.conf.PasswordEncoder; -import org.apache.ignite.tcbot.common.conf.TcBotWorkDir; +import org.apache.ignite.tcbot.notify.ISendEmailConfig; +import org.apache.ignite.tcbot.notify.ISlackBotConfig; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Properties; -import javax.annotation.Nonnull; -import org.apache.ignite.tcbot.notify.ISendEmailConfig; -import org.apache.ignite.tcbot.notify.ISlackBotConfig; import static com.google.common.base.Strings.isNullOrEmpty; @@ -48,60 +43,9 @@ public class NotificationsConfig implements ISendEmailConfig, ISlackBotConfig { private String slackAuthTok; /** Channels to send notifications to. */ + @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") private List<NotificationChannel> channels = new ArrayList<>(); - private static final String MAIL_PROPS = "mail.auth.properties"; - private static final String USERNAME = "username"; - private static final String ENCODED_PASSWORD = "encoded_password"; - /** Slack authorization token property name. */ - private static final String SLACK_AUTH_TOKEN = "slack.auth_token"; - @Deprecated - private static final String SLACK_CHANNEL = "slack.channel"; - - @Nonnull - public static NotificationsConfig backwardConfig() { - Properties cfgProps = loadEmailSettings(); - - NotificationsConfig cfg = new NotificationsConfig(); - - cfg.slackAuthTok = cfgProps.getProperty(SLACK_AUTH_TOKEN); - - cfg.email.username(cfgProps.getProperty(USERNAME)); - - cfg.email.password(cfgProps.getProperty(ENCODED_PASSWORD)); - - String slackCh = cfgProps.getProperty(SLACK_CHANNEL); - if (!Strings.isNullOrEmpty(slackCh)) { - NotificationChannel ch = new NotificationChannel(); - ch.slack("#" + slackCh); - ch.subscribe(ITcServerConfig.DEFAULT_TRACKED_BRANCH_NAME); - cfg.channels.add(ch); - } - - return cfg; - } - - public static Properties loadEmailSettings() { - try { - return loadProps(new File(TcBotWorkDir.resolveWorkDir(), MAIL_PROPS)); - } - catch (IOException e) { - e.printStackTrace(); - return new Properties(); - } - } - - private static Properties loadProps(File file) throws IOException { - Properties props = new Properties(); - - try (FileReader reader = new FileReader(file)) { - props.load(reader); - } - - return props; - } - - public boolean isEmpty() { return (email == null || Strings.isNullOrEmpty(email.username())) && (email == null || Strings.isNullOrEmpty(email.password())) @@ -145,17 +89,15 @@ public class NotificationsConfig implements ISendEmailConfig, ISlackBotConfig { return PasswordEncoder.decode(email.password()); } - public Collection<? extends INotificationChannel> channels() { - if (channels == null) - return Collections.emptyList(); + @Nullable + @Override + public String emailSmtpHost() { + SmtpSettings smtp = email.smtp(); - return Collections.unmodifiableList(channels); + return smtp != null ? smtp.host() : null; } - public void addChannel(NotificationChannel ch) { - if (channels == null) - this.channels = new ArrayList<>(); - - channels.add(ch); + public Collection<? extends INotificationChannel> channels() { + return channels == null ? Collections.emptyList() : Collections.unmodifiableList(channels); } } diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/SmtpSettings.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/SmtpSettings.java new file mode 100644 index 00000000..e507c7ca --- /dev/null +++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/SmtpSettings.java @@ -0,0 +1,18 @@ +package org.apache.ignite.tcbot.engine.conf; + +import javax.annotation.Nullable; + +public class SmtpSettings { + /** Default is gmail server: "smtp.gmail.com". */ + private String host; + + /** Default is 465. */ + private Integer socketFactoryPort; + + /** Default is 465. */ + private Integer port; + + @Nullable public String host() { + return host; + } +} diff --git a/tcbot-notify/src/main/java/org/apache/ignite/tcbot/notify/EmailSender.java b/tcbot-notify/src/main/java/org/apache/ignite/tcbot/notify/EmailSender.java index 87933d63..68820ce5 100644 --- a/tcbot-notify/src/main/java/org/apache/ignite/tcbot/notify/EmailSender.java +++ b/tcbot-notify/src/main/java/org/apache/ignite/tcbot/notify/EmailSender.java @@ -30,6 +30,8 @@ import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; +import static com.google.common.base.Strings.isNullOrEmpty; + /** * Class for sending email with configured credentials. */ @@ -40,12 +42,12 @@ class EmailSender implements IEmailSender { String user = notifications.emailUsernameMandatory(); - String from = user; + String pwd = notifications.emailPasswordClearMandatory(); - final String pwd = notifications.emailPasswordClearMandatory(); + String smtpHost = notifications.emailSmtpHost(); Properties props = new Properties(); - props.put("mail.smtp.host", "smtp.gmail.com"); + props.put("mail.smtp.host", isNullOrEmpty(smtpHost) ? "smtp.gmail.com" : smtpHost); props.put("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.auth", "true"); @@ -62,7 +64,7 @@ class EmailSender implements IEmailSender { MimeMessage msg = new MimeMessage(ses); // Set From: header field of the header. - msg.setFrom(new InternetAddress(from)); + msg.setFrom(new InternetAddress(user)); // Set To: header field of the header. msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); diff --git a/tcbot-notify/src/main/java/org/apache/ignite/tcbot/notify/ISendEmailConfig.java b/tcbot-notify/src/main/java/org/apache/ignite/tcbot/notify/ISendEmailConfig.java index 307d042a..d7600ec0 100644 --- a/tcbot-notify/src/main/java/org/apache/ignite/tcbot/notify/ISendEmailConfig.java +++ b/tcbot-notify/src/main/java/org/apache/ignite/tcbot/notify/ISendEmailConfig.java @@ -18,6 +18,7 @@ package org.apache.ignite.tcbot.notify; import javax.annotation.Nonnull; +import javax.annotation.Nullable; /** * Source email configuration. Now only gmail server is supported. @@ -34,4 +35,7 @@ public interface ISendEmailConfig { */ @Nonnull public String emailPasswordClearMandatory() ; + + @Nullable + String emailSmtpHost(); }