Merge "Clean up disrespectful terms"
This commit is contained in:
		@@ -4423,19 +4423,25 @@ Defaults to false.
 | 
			
		||||
 | 
			
		||||
[[receiveemail.filter.mode]]receiveemail.filter.mode::
 | 
			
		||||
+
 | 
			
		||||
A black- and whitelist filter to filter incoming emails.
 | 
			
		||||
An allow and block filter to filter incoming emails.
 | 
			
		||||
+
 | 
			
		||||
If `OFF`, emails are not filtered by the list filter.
 | 
			
		||||
+
 | 
			
		||||
If `WHITELIST`, only emails where a pattern from
 | 
			
		||||
If `ALLOW`, only emails where a pattern from
 | 
			
		||||
<<receiveemail.filter.patterns,receiveemail.filter.patterns>>
 | 
			
		||||
matches 'From' will be processed.
 | 
			
		||||
+
 | 
			
		||||
If `BLACKLIST`, only emails where no pattern from
 | 
			
		||||
If `BLOCK`, only emails where no pattern from
 | 
			
		||||
<<receiveemail.filter.patterns,receiveemail.filter.patterns>>
 | 
			
		||||
matches 'From' will be processed.
 | 
			
		||||
+
 | 
			
		||||
Defaults to `OFF`.
 | 
			
		||||
+
 | 
			
		||||
The previous filter-names 'BLACKLIST' and 'WHITELIST' have been deprecated
 | 
			
		||||
since they may be considered disrespectful and there's no technical or
 | 
			
		||||
practical reason to use these exact terms for the filters.
 | 
			
		||||
For backwards compatibility they are still supported but support for these
 | 
			
		||||
deprecated terms will be removed in future releases.
 | 
			
		||||
 | 
			
		||||
[[receiveemail.filter.patterns]]receiveemail.filter.patterns::
 | 
			
		||||
+
 | 
			
		||||
@@ -4566,9 +4572,10 @@ Password for the account named by sendemail.smtpUser.
 | 
			
		||||
 | 
			
		||||
[[sendemail.allowrcpt]]sendemail.allowrcpt::
 | 
			
		||||
+
 | 
			
		||||
If present, each value adds one entry to the whitelist of email
 | 
			
		||||
addresses that Gerrit can send email to.  If set to a complete
 | 
			
		||||
email address, that one address is added to the white list.
 | 
			
		||||
If present, each value adds one entry to the list of allowed email
 | 
			
		||||
addresses that Gerrit can send emails to.  If set to a complete
 | 
			
		||||
email address, that one address is added to the list of allowed
 | 
			
		||||
emails.
 | 
			
		||||
If set to a domain name, any address at that domain can receive
 | 
			
		||||
email from Gerrit.
 | 
			
		||||
+
 | 
			
		||||
@@ -4579,9 +4586,10 @@ By default, unset, permitting delivery to any email address.
 | 
			
		||||
 | 
			
		||||
[[sendemail.denyrcpt]]sendemail.denyrcpt::
 | 
			
		||||
+
 | 
			
		||||
If present, each value adds one entry to the blacklist of email
 | 
			
		||||
addresses that Gerrit can send email to.  If set to a complete
 | 
			
		||||
email address, that one address is added to the blacklist.
 | 
			
		||||
If present, each value adds one entry to the list of email
 | 
			
		||||
addresses that Gerrit can't send emails to.  If set to a complete
 | 
			
		||||
email address, that one address is added to the list of blocked
 | 
			
		||||
emails.
 | 
			
		||||
If set to a domain name, any address at that domain can *not* receive
 | 
			
		||||
email from Gerrit.
 | 
			
		||||
+
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ public class HtmlParser {
 | 
			
		||||
          "gmail_quote" // Used for quoting original content
 | 
			
		||||
          );
 | 
			
		||||
 | 
			
		||||
  private static final ImmutableSet<String> WHITELISTED_HTML_TAGS =
 | 
			
		||||
  private static final ImmutableSet<String> ALLOWED_HTML_TAGS =
 | 
			
		||||
      ImmutableSet.of(
 | 
			
		||||
          "div", // Most user-typed comments are contained in a <div> tag
 | 
			
		||||
          "a", // We allow links to be contained in a comment
 | 
			
		||||
@@ -120,8 +120,8 @@ public class HtmlParser {
 | 
			
		||||
        // There is no user-input in quoted text
 | 
			
		||||
        continue;
 | 
			
		||||
      }
 | 
			
		||||
      if (!WHITELISTED_HTML_TAGS.contains(elementName)) {
 | 
			
		||||
        // We only accept a set of whitelisted tags that can contain user input
 | 
			
		||||
      if (!ALLOWED_HTML_TAGS.contains(elementName)) {
 | 
			
		||||
        // We only accept a set of allowed tags that can contain user input
 | 
			
		||||
        continue;
 | 
			
		||||
      }
 | 
			
		||||
      if (elementName.equals("a") && e.attr("href").startsWith("mailto:")) {
 | 
			
		||||
 
 | 
			
		||||
@@ -31,8 +31,8 @@ public class ListMailFilter implements MailFilter {
 | 
			
		||||
 | 
			
		||||
  public enum ListFilterMode {
 | 
			
		||||
    OFF,
 | 
			
		||||
    WHITELIST,
 | 
			
		||||
    BLACKLIST
 | 
			
		||||
    ALLOW,
 | 
			
		||||
    BLOCK
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private final ListFilterMode mode;
 | 
			
		||||
@@ -40,12 +40,37 @@ public class ListMailFilter implements MailFilter {
 | 
			
		||||
 | 
			
		||||
  @Inject
 | 
			
		||||
  ListMailFilter(@GerritServerConfig Config cfg) {
 | 
			
		||||
    this.mode = cfg.getEnum("receiveemail", "filter", "mode", ListFilterMode.OFF);
 | 
			
		||||
    mode = getListFilterMode(cfg);
 | 
			
		||||
    String[] addresses = cfg.getStringList("receiveemail", "filter", "patterns");
 | 
			
		||||
    String concat = Arrays.asList(addresses).stream().collect(joining("|"));
 | 
			
		||||
    this.mailPattern = Pattern.compile(concat);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private static final String LEGACY_ALLOW = "WHITELIST";
 | 
			
		||||
  private static final String LEGACY_BLOCK = "BLACKLIST";
 | 
			
		||||
 | 
			
		||||
  /** Legacy names are supported, but should be removed in the future. */
 | 
			
		||||
  private ListFilterMode getListFilterMode(Config cfg) {
 | 
			
		||||
    ListFilterMode mode;
 | 
			
		||||
    String modeString = cfg.getString("receiveemail", "filter", "mode");
 | 
			
		||||
    if (modeString == null) {
 | 
			
		||||
      modeString = "";
 | 
			
		||||
    }
 | 
			
		||||
    switch (modeString) {
 | 
			
		||||
      case LEGACY_ALLOW:
 | 
			
		||||
      case "ALLOW":
 | 
			
		||||
        mode = ListFilterMode.ALLOW;
 | 
			
		||||
        break;
 | 
			
		||||
      case LEGACY_BLOCK:
 | 
			
		||||
      case "BLOCK":
 | 
			
		||||
        mode = ListFilterMode.BLOCK;
 | 
			
		||||
        break;
 | 
			
		||||
      default:
 | 
			
		||||
        mode = ListFilterMode.OFF;
 | 
			
		||||
    }
 | 
			
		||||
    return mode;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public boolean shouldProcessMessage(MailMessage message) {
 | 
			
		||||
    if (mode == ListFilterMode.OFF) {
 | 
			
		||||
@@ -53,8 +78,7 @@ public class ListMailFilter implements MailFilter {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    boolean match = mailPattern.matcher(message.from().email()).find();
 | 
			
		||||
    if ((mode == ListFilterMode.WHITELIST && !match)
 | 
			
		||||
        || (mode == ListFilterMode.BLACKLIST && match)) {
 | 
			
		||||
    if ((mode == ListFilterMode.ALLOW && !match) || (mode == ListFilterMode.BLOCK && match)) {
 | 
			
		||||
      logger.atInfo().log("Mail message from %s rejected by list filter", message.from());
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -45,11 +45,11 @@ public class ListMailFilterIT extends AbstractMailIT {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  @GerritConfig(name = "receiveemail.filter.mode", value = "WHITELIST")
 | 
			
		||||
  @GerritConfig(name = "receiveemail.filter.mode", value = "ALLOW")
 | 
			
		||||
  @GerritConfig(
 | 
			
		||||
      name = "receiveemail.filter.patterns",
 | 
			
		||||
      values = {".+ser@example\\.com", "a@b\\.com"})
 | 
			
		||||
  public void listFilterWhitelistDoesNotFilterListedUser() throws Exception {
 | 
			
		||||
  public void listFilterAllowDoesNotFilterListedUser() throws Exception {
 | 
			
		||||
    ChangeInfo changeInfo = createChangeAndReplyByEmail();
 | 
			
		||||
    // Check that the comments from the email have been persisted
 | 
			
		||||
    Collection<ChangeMessageInfo> messages = gApi.changes().id(changeInfo.id).get().messages;
 | 
			
		||||
@@ -57,11 +57,11 @@ public class ListMailFilterIT extends AbstractMailIT {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  @GerritConfig(name = "receiveemail.filter.mode", value = "WHITELIST")
 | 
			
		||||
  @GerritConfig(name = "receiveemail.filter.mode", value = "ALLOW")
 | 
			
		||||
  @GerritConfig(
 | 
			
		||||
      name = "receiveemail.filter.patterns",
 | 
			
		||||
      values = {".+@gerritcodereview\\.com", "a@b\\.com"})
 | 
			
		||||
  public void listFilterWhitelistFiltersNotListedUser() throws Exception {
 | 
			
		||||
  public void listFilterAllowFiltersNotListedUser() throws Exception {
 | 
			
		||||
    ChangeInfo changeInfo = createChangeAndReplyByEmail();
 | 
			
		||||
    // Check that the comments from the email have NOT been persisted
 | 
			
		||||
    Collection<ChangeMessageInfo> messages = gApi.changes().id(changeInfo.id).get().messages;
 | 
			
		||||
@@ -72,11 +72,11 @@ public class ListMailFilterIT extends AbstractMailIT {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  @GerritConfig(name = "receiveemail.filter.mode", value = "BLACKLIST")
 | 
			
		||||
  @GerritConfig(name = "receiveemail.filter.mode", value = "BLOCK")
 | 
			
		||||
  @GerritConfig(
 | 
			
		||||
      name = "receiveemail.filter.patterns",
 | 
			
		||||
      values = {".+@gerritcodereview\\.com", "a@b\\.com"})
 | 
			
		||||
  public void listFilterBlacklistDoesNotFilterNotListedUser() throws Exception {
 | 
			
		||||
  public void listFilterBlockDoesNotFilterNotListedUser() throws Exception {
 | 
			
		||||
    ChangeInfo changeInfo = createChangeAndReplyByEmail();
 | 
			
		||||
    // Check that the comments from the email have been persisted
 | 
			
		||||
    Collection<ChangeMessageInfo> messages = gApi.changes().id(changeInfo.id).get().messages;
 | 
			
		||||
@@ -84,11 +84,11 @@ public class ListMailFilterIT extends AbstractMailIT {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  @GerritConfig(name = "receiveemail.filter.mode", value = "BLACKLIST")
 | 
			
		||||
  @GerritConfig(name = "receiveemail.filter.mode", value = "BLOCK")
 | 
			
		||||
  @GerritConfig(
 | 
			
		||||
      name = "receiveemail.filter.patterns",
 | 
			
		||||
      values = {".+@example\\.com", "a@b\\.com"})
 | 
			
		||||
  public void listFilterBlacklistFiltersListedUser() throws Exception {
 | 
			
		||||
  public void listFilterBlockFiltersListedUser() throws Exception {
 | 
			
		||||
    ChangeInfo changeInfo = createChangeAndReplyByEmail();
 | 
			
		||||
    // Check that the comments from the email have been persisted
 | 
			
		||||
    Collection<ChangeMessageInfo> messages = gApi.changes().id(changeInfo.id).get().messages;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user