diff --git a/Gemfile.lock b/Gemfile.lock index c4126f88a61..7f65dcb6f0b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -240,7 +240,7 @@ GEM omniauth-twitter (1.4.0) omniauth-oauth (~> 1.1) rack - onebox (1.9.30) + onebox (2.0.0) addressable (~> 2.7.0) htmlentities (~> 4.3) multi_json (~> 1.11) diff --git a/app/assets/javascripts/admin/components/embeddable-host.js b/app/assets/javascripts/admin/components/embeddable-host.js index cc96741fed2..d67a236aa4c 100644 --- a/app/assets/javascripts/admin/components/embeddable-host.js +++ b/app/assets/javascripts/admin/components/embeddable-host.js @@ -42,7 +42,7 @@ export default Component.extend(bufferedProperty("host"), { const props = this.buffered.getProperties( "host", - "path_whitelist", + "allowed_paths", "class_name" ); props.category_id = this.categoryId; diff --git a/app/assets/javascripts/admin/components/screened-ip-address-form.js b/app/assets/javascripts/admin/components/screened-ip-address-form.js index 9bd2323b6f9..ca535d05f3a 100644 --- a/app/assets/javascripts/admin/components/screened-ip-address-form.js +++ b/app/assets/javascripts/admin/components/screened-ip-address-form.js @@ -3,7 +3,7 @@ import discourseComputed from "discourse-common/utils/decorators"; import { schedule } from "@ember/runloop"; import Component from "@ember/component"; /** - A form to create an IP address that will be blocked or whitelisted. + A form to create an IP address that will be blocked or allowed. Example usage: {{screened-ip-address-form action=(action "recordAdded")}} @@ -21,9 +21,9 @@ export default Component.extend({ formSubmitted: false, actionName: "block", - @discourseComputed("siteSettings.use_admin_ip_whitelist") - actionNames(adminWhitelistEnabled) { - if (adminWhitelistEnabled) { + @discourseComputed("siteSettings.use_admin_ip_allowlist") + actionNames(adminAllowlistEnabled) { + if (adminAllowlistEnabled) { return [ { id: "block", name: I18n.t("admin.logs.screened_ips.actions.block") }, { diff --git a/app/assets/javascripts/admin/templates/components/embeddable-host.hbs b/app/assets/javascripts/admin/templates/components/embeddable-host.hbs index 9c418be5ebf..7d73d93a2b3 100644 --- a/app/assets/javascripts/admin/templates/components/embeddable-host.hbs +++ b/app/assets/javascripts/admin/templates/components/embeddable-host.hbs @@ -8,8 +8,8 @@ {{input value=buffered.class_name placeholder="class" enter=(action "save") class="class-name"}} -
{{i18n "admin.embedding.path_whitelist"}}
- {{input value=buffered.path_whitelist placeholder="/blog/.*" enter=(action "save") class="path-whitelist"}} +
{{i18n "admin.embedding.allowed_paths"}}
+ {{input value=buffered.allowed_paths placeholder="/blog/.*" enter=(action "save") class="path-allowlist"}}
{{i18n "admin.embedding.category"}}
@@ -26,7 +26,7 @@ {{else}}
{{i18n "admin.embedding.host"}}
{{host.host}}
{{i18n "admin.embedding.class_name"}}
{{host.class_name}} -
{{i18n "admin.embedding.path_whitelist"}}
{{host.path_whitelist}} +
{{i18n "admin.embedding.allowed_paths"}}
{{host.allowed_paths}}
{{i18n "admin.embedding.category"}}
{{category-badge host.category}} {{d-button icon="pencil-alt" action=(action "edit")}} diff --git a/app/assets/javascripts/admin/templates/embedding.hbs b/app/assets/javascripts/admin/templates/embedding.hbs index b70a9be306f..fc07050e346 100644 --- a/app/assets/javascripts/admin/templates/embedding.hbs +++ b/app/assets/javascripts/admin/templates/embedding.hbs @@ -4,7 +4,7 @@ {{i18n "admin.embedding.host"}} {{i18n "admin.embedding.class_name"}} - {{i18n "admin.embedding.path_whitelist"}} + {{i18n "admin.embedding.allowed_paths"}} {{i18n "admin.embedding.category"}}   @@ -45,16 +45,16 @@

{{i18n "admin.embedding.crawling_settings"}}

{{i18n "admin.embedding.crawling_description"}}

- {{embedding-setting field="embed_whitelist_selector" - value=embedding.embed_whitelist_selector + {{embedding-setting field="allowed_embed_selectors" + value=embedding.allowed_embed_selectors placeholder="article, #story, .post"}} - {{embedding-setting field="embed_blacklist_selector" - value=embedding.embed_blacklist_selector + {{embedding-setting field="blocked_embed_selectors" + value=embedding.blocked_embed_selectors placeholder=".ad-unit, header"}} - {{embedding-setting field="embed_classname_whitelist" - value=embedding.embed_classname_whitelist + {{embedding-setting field="allowed_embed_classnames" + value=embedding.allowed_embed_classnames placeholder="emoji, classname"}} diff --git a/app/assets/javascripts/discourse/app/lib/to-markdown.js b/app/assets/javascripts/discourse/app/lib/to-markdown.js index 25e49bfc85f..43f97659776 100644 --- a/app/assets/javascripts/discourse/app/lib/to-markdown.js +++ b/app/assets/javascripts/discourse/app/lib/to-markdown.js @@ -102,7 +102,7 @@ export class Tag { ]; } - static whitelists() { + static allowedTags() { return ["ins", "del", "small", "big", "kbd", "ruby", "rt", "rb", "rp"]; } @@ -192,7 +192,7 @@ export class Tag { }; } - static whitelist(name) { + static allowedTag(name) { return class extends Tag { constructor() { super(name, `<${name}>`, ``); @@ -526,7 +526,7 @@ function tags() { ...Tag.headings().map((h, i) => Tag.heading(h, i + 1)), ...Tag.slices().map(s => Tag.slice(s, "\n")), ...Tag.emphases().map(e => Tag.emphasis(e[0], e[1])), - ...Tag.whitelists().map(t => Tag.whitelist(t)), + ...Tag.allowedTags().map(t => Tag.allowedTag(t)), Tag.aside(), Tag.cell("td"), Tag.cell("th"), diff --git a/app/assets/javascripts/discourse/app/templates/preferences/categories.hbs b/app/assets/javascripts/discourse/app/templates/preferences/categories.hbs index cd907dc0ed9..7b36d0f3ffd 100644 --- a/app/assets/javascripts/discourse/app/templates/preferences/categories.hbs +++ b/app/assets/javascripts/discourse/app/templates/preferences/categories.hbs @@ -8,7 +8,7 @@ {{/if}} {{category-selector categories=model.watchedCategories - blacklist=selectedCategories + blocklist=selectedCategories onChange=(action (mut model.watchedCategories)) }} @@ -21,7 +21,7 @@ {{/if}} {{category-selector categories=model.trackedCategories - blacklist=selectedCategories + blocklist=selectedCategories onChange=(action (mut model.trackedCategories)) }} @@ -31,7 +31,7 @@ {{category-selector categories=model.watchedFirstPostCategories - blacklist=selectedCategories + blocklist=selectedCategories onChange=(action (mut model.watchedFirstPostCategories)) }} @@ -45,7 +45,7 @@ {{/if}} {{category-selector categories=model.mutedCategories - blacklist=selectedCategories + blocklist=selectedCategories onChange=(action (mut model.mutedCategories)) }} diff --git a/app/assets/javascripts/discourse/app/templates/preferences/tags.hbs b/app/assets/javascripts/discourse/app/templates/preferences/tags.hbs index 85973fb5fba..3eb66ff86ac 100644 --- a/app/assets/javascripts/discourse/app/templates/preferences/tags.hbs +++ b/app/assets/javascripts/discourse/app/templates/preferences/tags.hbs @@ -6,7 +6,7 @@ {{tag-chooser tags=model.watched_tags - blacklist=selectedTags + blocklist=selectedTags allowCreate=false everyTag=true unlimitedTagCount=true @@ -19,7 +19,7 @@ {{tag-chooser tags=model.tracked_tags - blacklist=selectedTags + blocklist=selectedTags allowCreate=false everyTag=true unlimitedTagCount=true}} @@ -31,7 +31,7 @@ {{tag-chooser tags=model.watching_first_post_tags - blacklist=selectedTags + blocklist=selectedTags allowCreate=false everyTag=true unlimitedTagCount=true}} @@ -45,7 +45,7 @@ {{tag-chooser tags=model.muted_tags - blacklist=selectedTags + blocklist=selectedTags allowCreate=false everyTag=true unlimitedTagCount=true}} diff --git a/app/assets/javascripts/discourse/app/widgets/header.js b/app/assets/javascripts/discourse/app/widgets/header.js index ca55984242d..ba945ccd647 100644 --- a/app/assets/javascripts/discourse/app/widgets/header.js +++ b/app/assets/javascripts/discourse/app/widgets/header.js @@ -514,12 +514,12 @@ export default createWidget("header", { const currentPath = this.register .lookup("service:router") .get("_router.currentPath"); - const blacklist = [/^discovery\.categories/]; - const whitelist = [/^topic\./]; + const blocklist = [/^discovery\.categories/]; + const allowlist = [/^topic\./]; const check = function(regex) { return !!currentPath.match(regex); }; - let showSearch = whitelist.any(check) && !blacklist.any(check); + let showSearch = allowlist.any(check) && !blocklist.any(check); // If we're viewing a topic, only intercept search if there are cloaked posts if (showSearch && currentPath.match(/^topic\./)) { diff --git a/app/assets/javascripts/pretty-text/addon/engines/discourse-markdown-it.js b/app/assets/javascripts/pretty-text/addon/engines/discourse-markdown-it.js index 1a5f50a6dea..38414140c70 100644 --- a/app/assets/javascripts/pretty-text/addon/engines/discourse-markdown-it.js +++ b/app/assets/javascripts/pretty-text/addon/engines/discourse-markdown-it.js @@ -389,7 +389,7 @@ export function setup(opts, siteSettings, state) { } export function cook(raw, opts) { - // we still have to hoist html_raw nodes so they bypass the whitelister + // we still have to hoist html_raw nodes so they bypass the allowlister // this is the case for oneboxes let hoisted = {}; diff --git a/app/assets/javascripts/pretty-text/addon/oneboxer.js b/app/assets/javascripts/pretty-text/addon/oneboxer.js index e0720c3cadb..45733106c10 100644 --- a/app/assets/javascripts/pretty-text/addon/oneboxer.js +++ b/app/assets/javascripts/pretty-text/addon/oneboxer.js @@ -30,7 +30,7 @@ function resolveSize(img) { // Detect square images and apply smaller onebox-avatar class function applySquareGenericOnebox($elem) { - if (!$elem.hasClass("whitelistedgeneric")) { + if (!$elem.hasClass("allowlistedgeneric")) { return; } diff --git a/app/assets/javascripts/pretty-text/addon/white-lister.js b/app/assets/javascripts/pretty-text/addon/white-lister.js index 0d2ded7a4d2..0efb90643c6 100644 --- a/app/assets/javascripts/pretty-text/addon/white-lister.js +++ b/app/assets/javascripts/pretty-text/addon/white-lister.js @@ -108,7 +108,7 @@ export default class WhiteLister { } } -// Only add to `default` when you always want your whitelist to occur. In other words, +// Only add to `default` when you always want your allowlist to occur. In other words, // don't change this for a plugin or a feature that can be disabled export const DEFAULT_LIST = [ "a.attachment", diff --git a/app/assets/javascripts/select-kit/addon/components/category-selector.js b/app/assets/javascripts/select-kit/addon/components/category-selector.js index 96ee7c0e782..3ba184a8579 100644 --- a/app/assets/javascripts/select-kit/addon/components/category-selector.js +++ b/app/assets/javascripts/select-kit/addon/components/category-selector.js @@ -8,7 +8,7 @@ export default MultiSelectComponent.extend({ pluginApiIdentifiers: ["category-selector"], classNames: ["category-selector"], categories: null, - blacklist: null, + blockedCategories: null, selectKitOptions: { filterable: true, @@ -22,14 +22,15 @@ export default MultiSelectComponent.extend({ this._super(...arguments); if (!this.categories) this.set("categories", []); - if (!this.blacklist) this.set("blacklist", []); + if (!this.blockedCategories) this.set("blockedCategories", []); }, - content: computed("categories.[]", "blacklist.[]", function() { - const blacklist = makeArray(this.blacklist); + content: computed("categories.[]", "blockedCategories.[]", function() { + const blockedCategories = makeArray(this.blockedCategories); return Category.list().filter(category => { return ( - this.categories.includes(category) || !blacklist.includes(category) + this.categories.includes(category) || + !blockedCategories.includes(category) ); }); }), diff --git a/app/assets/javascripts/select-kit/addon/components/tag-chooser.js b/app/assets/javascripts/select-kit/addon/components/tag-chooser.js index 5cf4a833032..d5f28038c4c 100644 --- a/app/assets/javascripts/select-kit/addon/components/tag-chooser.js +++ b/app/assets/javascripts/select-kit/addon/components/tag-chooser.js @@ -19,7 +19,7 @@ export default MultiSelectComponent.extend(TagsMixin, { return "tag-chooser-row"; }, - blacklist: null, + blockedTags: null, attributeBindings: ["categoryId"], excludeSynonyms: false, excludeHasSynonyms: false, @@ -49,7 +49,7 @@ export default MultiSelectComponent.extend(TagsMixin, { this._super(...arguments); this.setProperties({ - blacklist: this.blacklist || [], + blockedTags: this.blockedTags || [], termMatchesForbidden: false, termMatchErrorMessage: null }); @@ -84,9 +84,9 @@ export default MultiSelectComponent.extend(TagsMixin, { categoryId: this.categoryId }; - if (selectedTags.length || this.blacklist.length) { + if (selectedTags.length || this.blockedTags.length) { data.selected_tags = selectedTags - .concat(this.blacklist) + .concat(this.blockedTags) .uniq() .slice(0, 100); } @@ -106,9 +106,9 @@ export default MultiSelectComponent.extend(TagsMixin, { termMatchErrorMessage: json.forbidden_message }); - if (context.blacklist) { + if (context.blockedTags) { results = results.filter(result => { - return !context.blacklist.includes(result.id); + return !context.blockedTags.includes(result.id); }); } diff --git a/app/assets/stylesheets/common/base/onebox.scss b/app/assets/stylesheets/common/base/onebox.scss index 124da3ec4b6..de7b3845f5f 100644 --- a/app/assets/stylesheets/common/base/onebox.scss +++ b/app/assets/stylesheets/common/base/onebox.scss @@ -625,7 +625,8 @@ aside.onebox.stackexchange .onebox-body { } } -// whitelistedgeneric twitter labels +// allowlistedgeneric twitter labels +.onebox.allowlistedgeneric, .onebox.whitelistedgeneric { .label1, .label2 { @@ -640,6 +641,7 @@ aside.onebox.stackexchange .onebox-body { } .onebox { + &.allowlistedgeneric, &.whitelistedgeneric, &.gfycat { .site-icon { diff --git a/app/controllers/admin/embeddable_hosts_controller.rb b/app/controllers/admin/embeddable_hosts_controller.rb index 5a59882f9b7..765408039ce 100644 --- a/app/controllers/admin/embeddable_hosts_controller.rb +++ b/app/controllers/admin/embeddable_hosts_controller.rb @@ -22,7 +22,7 @@ class Admin::EmbeddableHostsController < Admin::AdminController def save_host(host, action) host.host = params[:embeddable_host][:host] - host.path_whitelist = params[:embeddable_host][:path_whitelist] + host.allowed_paths = params[:embeddable_host][:allowed_paths] host.class_name = params[:embeddable_host][:class_name] host.category_id = params[:embeddable_host][:category_id] host.category_id = SiteSetting.uncategorized_category_id if host.category_id.blank? diff --git a/app/controllers/admin/themes_controller.rb b/app/controllers/admin/themes_controller.rb index a08bc95495b..a78a38f618b 100644 --- a/app/controllers/admin/themes_controller.rb +++ b/app/controllers/admin/themes_controller.rb @@ -15,7 +15,7 @@ class Admin::ThemesController < Admin::AdminController def upload_asset - ban_in_whitelist_mode! + ban_in_allowlist_mode! path = params[:file].path @@ -53,7 +53,7 @@ class Admin::ThemesController < Admin::AdminController @theme = nil if params[:theme] && params[:theme].content_type == "application/json" - ban_in_whitelist_mode! + ban_in_allowlist_mode! # .dcstyle.json import. Deprecated, but still available to allow conversion json = JSON::parse(params[:theme].read) @@ -104,7 +104,7 @@ class Admin::ThemesController < Admin::AdminController end elsif params[:bundle] || (params[:theme] && THEME_CONTENT_TYPES.include?(params[:theme].content_type)) - ban_in_whitelist_mode! + ban_in_allowlist_mode! # params[:bundle] used by theme CLI. params[:theme] used by admin UI bundle = params[:bundle] || params[:theme] @@ -152,7 +152,7 @@ class Admin::ThemesController < Admin::AdminController def create - ban_in_whitelist_mode! + ban_in_allowlist_mode! @theme = Theme.new(name: theme_params[:name], user_id: theme_user.id, @@ -297,8 +297,8 @@ class Admin::ThemesController < Admin::AdminController private - def ban_in_whitelist_mode! - raise Discourse::InvalidAccess if !GlobalSetting.whitelisted_theme_ids.nil? + def ban_in_allowlist_mode! + raise Discourse::InvalidAccess if !GlobalSetting.allowed_theme_ids.nil? end def add_relative_themes!(kind, ids) @@ -358,7 +358,7 @@ class Admin::ThemesController < Admin::AdminController def set_fields return unless fields = theme_params[:theme_fields] - ban_in_whitelist_mode! + ban_in_allowlist_mode! fields.each do |field| @theme.set_field( diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index ade423ce7c4..74af0eafeab 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -276,7 +276,7 @@ class PostsController < ApplicationController reply_history = post.reply_history(params[:max_replies].to_i, guardian) user_custom_fields = {} - if (added_fields = User.whitelisted_user_custom_fields(guardian)).present? + if (added_fields = User.allowed_user_custom_fields(guardian)).present? user_custom_fields = User.custom_fields_for_ids(reply_history.pluck(:user_id), added_fields) end @@ -365,7 +365,7 @@ class PostsController < ApplicationController replies = post.replies.secured(guardian) user_custom_fields = {} - if (added_fields = User.whitelisted_user_custom_fields(guardian)).present? + if (added_fields = User.allowed_user_custom_fields(guardian)).present? user_custom_fields = User.custom_fields_for_ids(replies.pluck(:user_id), added_fields) end @@ -704,10 +704,10 @@ class PostsController < ApplicationController end - result = params.permit(*permitted).tap do |whitelisted| - whitelisted[:image_sizes] = params[:image_sizes] + result = params.permit(*permitted).tap do |allowed| + allowed[:image_sizes] = params[:image_sizes] # TODO this does not feel right, we should name what meta_data is allowed - whitelisted[:meta_data] = params[:meta_data] + allowed[:meta_data] = params[:meta_data] end # Staff are allowed to pass `is_warning` diff --git a/app/controllers/robots_txt_controller.rb b/app/controllers/robots_txt_controller.rb index 3af15d9174a..9fce3a7f674 100644 --- a/app/controllers/robots_txt_controller.rb +++ b/app/controllers/robots_txt_controller.rb @@ -55,15 +55,15 @@ class RobotsTxtController < ApplicationController agents: [] } - if SiteSetting.whitelisted_crawler_user_agents.present? - SiteSetting.whitelisted_crawler_user_agents.split('|').each do |agent| + if SiteSetting.allowed_crawler_user_agents.present? + SiteSetting.allowed_crawler_user_agents.split('|').each do |agent| result[:agents] << { name: agent, disallow: deny_paths } end result[:agents] << { name: '*', disallow: deny_all } - elsif SiteSetting.blacklisted_crawler_user_agents.present? + elsif SiteSetting.blocked_crawler_user_agents.present? result[:agents] << { name: '*', disallow: deny_paths } - SiteSetting.blacklisted_crawler_user_agents.split('|').each do |agent| + SiteSetting.blocked_crawler_user_agents.split('|').each do |agent| result[:agents] << { name: agent, disallow: deny_all } end else diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index fccb772d984..a3b779ed6fa 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -117,7 +117,7 @@ class UsersController < ApplicationController users = users.filter { |u| guardian.can_see_profile?(u) } - preload_fields = User.whitelisted_user_custom_fields(guardian) + UserField.all.pluck(:id).map { |fid| "#{User::USER_FIELD_PREFIX}#{fid}" } + preload_fields = User.allowed_user_custom_fields(guardian) + UserField.all.pluck(:id).map { |fid| "#{User::USER_FIELD_PREFIX}#{fid}" } User.preload_custom_fields(users, preload_fields) User.preload_recent_time_read(users) diff --git a/app/jobs/regular/pull_hotlinked_images.rb b/app/jobs/regular/pull_hotlinked_images.rb index d147a5afac9..5e3266d21e0 100644 --- a/app/jobs/regular/pull_hotlinked_images.rb +++ b/app/jobs/regular/pull_hotlinked_images.rb @@ -205,7 +205,7 @@ module Jobs hostname = uri.hostname return false unless hostname - # check the domains blacklist + # check the domains blocklist SiteSetting.should_download_images?(src) end diff --git a/app/models/concerns/has_custom_fields.rb b/app/models/concerns/has_custom_fields.rb index 64cafe6f7a5..0bb3fc55122 100644 --- a/app/models/concerns/has_custom_fields.rb +++ b/app/models/concerns/has_custom_fields.rb @@ -72,15 +72,15 @@ module HasCustomFields # To avoid n+1 queries, use this function to retrieve lots of custom fields in one go # and create a "sideloaded" version for easy querying by id. - def self.custom_fields_for_ids(ids, whitelisted_fields) + def self.custom_fields_for_ids(ids, allowed_fields) klass = "#{name}CustomField".constantize foreign_key = "#{name.underscore}_id".to_sym result = {} - return result if whitelisted_fields.blank? + return result if allowed_fields.blank? - klass.where(foreign_key => ids, :name => whitelisted_fields) + klass.where(foreign_key => ids, :name => allowed_fields) .pluck(foreign_key, :name, :value).each do |cf| result[cf[0]] ||= {} append_custom_field(result[cf[0]], cf[1], cf[2]) diff --git a/app/models/embeddable_host.rb b/app/models/embeddable_host.rb index 7984c0a18f9..8b393b4a254 100644 --- a/app/models/embeddable_host.rb +++ b/app/models/embeddable_host.rb @@ -10,6 +10,9 @@ class EmbeddableHost < ActiveRecord::Base self.host.sub!(/\/.*$/, '') end + # TODO(2021-07-23): Remove + self.ignored_columns = ["path_whitelist"] + def self.record_for_url(uri) if uri.is_a?(String) @@ -31,9 +34,9 @@ class EmbeddableHost < ActiveRecord::Base path << "?" << uri.query if uri.query.present? where("lower(host) = ?", host).each do |eh| - return eh if eh.path_whitelist.blank? + return eh if eh.allowed_paths.blank? - path_regexp = Regexp.new(eh.path_whitelist) + path_regexp = Regexp.new(eh.allowed_paths) return eh if path_regexp.match(path) || path_regexp.match(UrlHelper.unencode(path)) end @@ -78,6 +81,6 @@ end # category_id :integer not null # created_at :datetime not null # updated_at :datetime not null -# path_whitelist :string +# allowed_paths :string # class_name :string # diff --git a/app/models/embedding.rb b/app/models/embedding.rb index 055cb2b32cb..909ba1c2727 100644 --- a/app/models/embedding.rb +++ b/app/models/embedding.rb @@ -11,9 +11,9 @@ class Embedding < OpenStruct embed_title_scrubber embed_truncate embed_unlisted - embed_whitelist_selector - embed_blacklist_selector - embed_classname_whitelist) + allowed_embed_selectors + blocked_embed_selectors + allowed_embed_classnames) end def base_url diff --git a/app/models/global_setting.rb b/app/models/global_setting.rb index 4a6149fda51..d6b076e319e 100644 --- a/app/models/global_setting.rb +++ b/app/models/global_setting.rb @@ -204,15 +204,15 @@ class GlobalSetting end # test only - def self.reset_whitelisted_theme_ids! - @whitelisted_theme_ids = nil + def self.reset_allowed_theme_ids! + @allowed_theme_ids = nil end - def self.whitelisted_theme_ids - return nil if whitelisted_theme_repos.blank? + def self.allowed_theme_ids + return nil if allowed_theme_repos.blank? - @whitelisted_theme_ids ||= begin - urls = whitelisted_theme_repos.split(",").map(&:strip) + @allowed_theme_ids ||= begin + urls = allowed_theme_repos.split(",").map(&:strip) Theme .joins(:remote_theme) .where('remote_themes.remote_url in (?)', urls) diff --git a/app/models/post.rb b/app/models/post.rb index 766703268b0..c33649199e3 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -254,8 +254,8 @@ class Post < ActiveRecord::Base Digest::SHA1.hexdigest(raw) end - def self.white_listed_image_classes - @white_listed_image_classes ||= ['avatar', 'favicon', 'thumbnail', 'emoji', 'ytp-thumbnail-image'] + def self.allowed_image_classes + @allowed_image_classes ||= ['avatar', 'favicon', 'thumbnail', 'emoji', 'ytp-thumbnail-image'] end def post_analyzer @@ -335,9 +335,9 @@ class Post < ActiveRecord::Base self.last_editor_id ? (User.find_by_id(self.last_editor_id) || user) : user end - def whitelisted_spam_hosts + def allowed_spam_hosts hosts = SiteSetting - .white_listed_spam_host_domains + .allowed_spam_host_domains .split('|') .map { |h| h.strip } .reject { |h| !h.include?('.') } @@ -349,10 +349,10 @@ class Post < ActiveRecord::Base def total_hosts_usage hosts = linked_hosts.clone - whitelisted = whitelisted_spam_hosts + allowlisted = allowed_spam_hosts hosts.reject! do |h| - whitelisted.any? do |w| + allowlisted.any? do |w| h.end_with?(w) end end diff --git a/app/models/post_analyzer.rb b/app/models/post_analyzer.rb index c06d9d5f532..941c7f54491 100644 --- a/app/models/post_analyzer.rb +++ b/app/models/post_analyzer.rb @@ -52,7 +52,7 @@ class PostAnalyzer cooked_stripped.css("img").reject do |t| if dom_class = t["class"] - (Post.white_listed_image_classes & dom_class.split).count > 0 + (Post.allowed_image_classes & dom_class.split).count > 0 end end.count end diff --git a/app/models/screened_ip_address.rb b/app/models/screened_ip_address.rb index 10ce1ce4f19..cc81c462f00 100644 --- a/app/models/screened_ip_address.rb +++ b/app/models/screened_ip_address.rb @@ -75,7 +75,7 @@ class ScreenedIpAddress < ActiveRecord::Base exists_for_ip_address_and_action?(ip_address, actions[:block]) end - def self.is_whitelisted?(ip_address) + def self.is_allowed?(ip_address) exists_for_ip_address_and_action?(ip_address, actions[:do_nothing]) end @@ -87,7 +87,7 @@ class ScreenedIpAddress < ActiveRecord::Base end def self.block_admin_login?(user, ip_address) - return false unless SiteSetting.use_admin_ip_whitelist + return false unless SiteSetting.use_admin_ip_allowlist return false if user.nil? return false if !user.admin? return false if ScreenedIpAddress.where(action_type: actions[:allow_admin]).count == 0 diff --git a/app/models/site_setting.rb b/app/models/site_setting.rb index bc966333598..a4f6f809778 100644 --- a/app/models/site_setting.rb +++ b/app/models/site_setting.rb @@ -100,29 +100,29 @@ class SiteSetting < ActiveRecord::Base WATCHED_SETTINGS ||= [ :default_locale, - :attachment_content_type_blacklist, - :attachment_filename_blacklist, - :unicode_username_character_whitelist, + :blocked_attachment_content_types, + :blocked_attachment_filenames, + :allowed_unicode_username_characters, :markdown_typographer_quotation_marks ] def self.reset_cached_settings! - @attachment_content_type_blacklist_regex = nil - @attachment_filename_blacklist_regex = nil - @unicode_username_whitelist_regex = nil + @blocked_attachment_content_types_regex = nil + @blocked_attachment_filenames_regex = nil + @allowed_unicode_username_regex = nil end - def self.attachment_content_type_blacklist_regex - @attachment_content_type_blacklist_regex ||= Regexp.union(SiteSetting.attachment_content_type_blacklist.split("|")) + def self.blocked_attachment_content_types_regex + @blocked_attachment_content_types_regex ||= Regexp.union(SiteSetting.blocked_attachment_content_types.split("|")) end - def self.attachment_filename_blacklist_regex - @attachment_filename_blacklist_regex ||= Regexp.union(SiteSetting.attachment_filename_blacklist.split("|")) + def self.blocked_attachment_filenames_regex + @blocked_attachment_filenames_regex ||= Regexp.union(SiteSetting.blocked_attachment_filenames.split("|")) end - def self.unicode_username_character_whitelist_regex - @unicode_username_whitelist_regex ||= SiteSetting.unicode_username_character_whitelist.present? \ - ? Regexp.new(SiteSetting.unicode_username_character_whitelist) : nil + def self.allowed_unicode_username_characters_regex + @allowed_unicode_username_regex ||= SiteSetting.allowed_unicode_username_characters.present? \ + ? Regexp.new(SiteSetting.allowed_unicode_username_characters) : nil end # helpers for getting s3 settings that fallback to global @@ -213,6 +213,38 @@ class SiteSetting < ActiveRecord::Base c.present? && c.to_i != SiteSetting.uncategorized_category_id.to_i end + ALLOWLIST_DEPRECATED_SITE_SETTINGS = { + 'email_domains_blacklist': 'blocked_email_domains', + 'email_domains_whitelist': 'allowed_email_domains', + 'unicode_username_character_whitelist': 'allowed_unicode_username_characters', + 'user_website_domains_whitelist': 'allowed_user_website_domains', + 'whitelisted_link_domains': 'allowed_link_domains', + 'embed_whitelist_selector': 'allowed_embed_selectors', + 'auto_generated_whitelist': 'auto_generated_allowlist', + 'attachment_content_type_blacklist': 'blocked_attachment_content_types', + 'attachment_filename_blacklist': 'blocked_attachment_filenames', + 'use_admin_ip_whitelist': 'use_admin_ip_allowlist', + 'blacklist_ip_blocks': 'blocked_ip_blocks', + 'whitelist_internal_hosts': 'allowed_internal_hosts', + 'whitelisted_crawler_user_agents': 'allowed_crawler_user_agents', + 'blacklisted_crawler_user_agents': 'blocked_crawler_user_agents', + 'onebox_domains_blacklist': 'blocked_onebox_domains', + 'inline_onebox_domains_whitelist': 'allowed_inline_onebox_domains', + 'white_listed_spam_host_domains': 'allowed_spam_host_domains', + 'embed_blacklist_selector': 'blocked_embed_selectors', + 'embed_classname_whitelist': 'allowed_embed_classnames', + } + + ALLOWLIST_DEPRECATED_SITE_SETTINGS.each_pair do |old_method, new_method| + self.class.define_method(old_method) do + Discourse.deprecate("#{old_method.to_s} is deprecated, use the #{new_method.to_s}.", drop_from: "2.6") + send(new_method) + end + self.class.define_method("#{old_method}=") do |args| + Discourse.deprecate("#{old_method.to_s} is deprecated, use the #{new_method.to_s}.", drop_from: "2.6") + send("#{new_method}=", args) + end + end end # == Schema Information diff --git a/app/models/topic_embed.rb b/app/models/topic_embed.rb index 7529e98353e..26e0a051a8d 100644 --- a/app/models/topic_embed.rb +++ b/app/models/topic_embed.rb @@ -124,9 +124,9 @@ class TopicEmbed < ActiveRecord::Base remove_empty_nodes: false } - opts[:whitelist] = SiteSetting.embed_whitelist_selector if SiteSetting.embed_whitelist_selector.present? - opts[:blacklist] = SiteSetting.embed_blacklist_selector if SiteSetting.embed_blacklist_selector.present? - embed_classname_whitelist = SiteSetting.embed_classname_whitelist if SiteSetting.embed_classname_whitelist.present? + opts[:allowlist] = SiteSetting.allowed_embed_selectors if SiteSetting.allowed_embed_selectors.present? + opts[:blocklist] = SiteSetting.blocked_embed_selectors if SiteSetting.blocked_embed_selectors.present? + allowed_embed_classnames = SiteSetting.allowed_embed_classnames if SiteSetting.allowed_embed_classnames.present? response = FetchResponse.new begin @@ -169,8 +169,8 @@ class TopicEmbed < ActiveRecord::Base # If there is a mistyped URL, just do nothing end end - # only allow classes in the whitelist - allowed_classes = if embed_classname_whitelist.blank? then [] else embed_classname_whitelist.split(/[ ,]+/i) end + # only allow classes in the allowlist + allowed_classes = if allowed_embed_classnames.blank? then [] else allowed_embed_classnames.split(/[ ,]+/i) end doc.search('[class]:not([class=""])').each do |classnode| classes = classnode[:class].split(' ').select { |classname| allowed_classes.include?(classname) } if classes.length === 0 diff --git a/app/models/topic_link_click.rb b/app/models/topic_link_click.rb index a4b59b9dd48..91d22a1ee05 100644 --- a/app/models/topic_link_click.rb +++ b/app/models/topic_link_click.rb @@ -92,7 +92,7 @@ class TopicLinkClick < ActiveRecord::Base return nil unless uri - # Only redirect to whitelisted hostnames + # Only redirect to allowlisted hostnames return url if WHITELISTED_REDIRECT_HOSTNAMES.include?(uri.hostname) || is_cdn_link return nil diff --git a/app/models/translation_override.rb b/app/models/translation_override.rb index e883a0f1bdf..a09797f33cf 100644 --- a/app/models/translation_override.rb +++ b/app/models/translation_override.rb @@ -3,7 +3,7 @@ require "i18n/i18n_interpolation_keys_finder" class TranslationOverride < ActiveRecord::Base - # Whitelist i18n interpolation keys that can be included when customizing translations + # Allowlist i18n interpolation keys that can be included when customizing translations CUSTOM_INTERPOLATION_KEYS_WHITELIST = { "user_notifications.user_" => %w{ topic_title_url_encoded diff --git a/app/models/user.rb b/app/models/user.rb index acbcdb0c18c..370ad172ba4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -294,7 +294,7 @@ class User < ActiveRecord::Base DiscoursePluginRegistry.register_public_user_custom_field(custom_field_name, plugin) end - def self.whitelisted_user_custom_fields(guardian) + def self.allowed_user_custom_fields(guardian) fields = [] fields.push *DiscoursePluginRegistry.public_user_custom_fields diff --git a/app/models/user_profile.rb b/app/models/user_profile.rb index bb276d30ca9..937ff061ba3 100644 --- a/app/models/user_profile.rb +++ b/app/models/user_profile.rb @@ -131,7 +131,7 @@ class UserProfile < ActiveRecord::Base end def website_domain_validator - allowed_domains = SiteSetting.user_website_domains_whitelist + allowed_domains = SiteSetting.allowed_user_website_domains return if (allowed_domains.blank? || self.website.blank?) domain = begin diff --git a/app/models/username_validator.rb b/app/models/username_validator.rb index 8a588ad56c4..1bb51491e67 100644 --- a/app/models/username_validator.rb +++ b/app/models/username_validator.rb @@ -32,7 +32,7 @@ class UsernameValidator username_length_min? username_length_max? username_char_valid? - username_char_whitelisted? + username_char_allowed? username_first_char_valid? username_last_char_valid? username_no_double_special? @@ -85,10 +85,10 @@ class UsernameValidator end end - def username_char_whitelisted? - return unless errors.empty? && self.class.char_whitelist_exists? + def username_char_allowed? + return unless errors.empty? && self.class.char_allowlist_exists? - if username.chars.any? { |c| !self.class.whitelisted_char?(c) } + if username.chars.any? { |c| !self.class.allowed_char?(c) } self.errors << I18n.t(:'user.username.characters') end end @@ -133,11 +133,11 @@ class UsernameValidator SiteSetting.unicode_usernames ? UNICODE_INVALID_CHAR_PATTERN : ASCII_INVALID_CHAR_PATTERN end - def self.char_whitelist_exists? - SiteSetting.unicode_usernames && SiteSetting.unicode_username_character_whitelist_regex.present? + def self.char_allowlist_exists? + SiteSetting.unicode_usernames && SiteSetting.allowed_unicode_username_characters.present? end - def self.whitelisted_char?(c) - c.match?(/[\w.-]/) || c.match?(SiteSetting.unicode_username_character_whitelist_regex) + def self.allowed_char?(c) + c.match?(/[\w.-]/) || c.match?(SiteSetting.allowed_unicode_username_characters) end end diff --git a/app/serializers/embeddable_host_serializer.rb b/app/serializers/embeddable_host_serializer.rb index c06b7151425..28bf3e905bc 100644 --- a/app/serializers/embeddable_host_serializer.rb +++ b/app/serializers/embeddable_host_serializer.rb @@ -2,7 +2,7 @@ class EmbeddableHostSerializer < ApplicationSerializer - TO_SERIALIZE = [:id, :host, :path_whitelist, :class_name, :category_id] + TO_SERIALIZE = [:id, :host, :allowed_paths, :class_name, :category_id] attributes *TO_SERIALIZE diff --git a/app/serializers/flagged_user_serializer.rb b/app/serializers/flagged_user_serializer.rb index 51fc0b83283..92a383559aa 100644 --- a/app/serializers/flagged_user_serializer.rb +++ b/app/serializers/flagged_user_serializer.rb @@ -36,7 +36,7 @@ class FlaggedUserSerializer < BasicUserSerializer end def custom_fields - fields = User.whitelisted_user_custom_fields(scope) + fields = User.allowed_user_custom_fields(scope) result = {} fields.each do |k| diff --git a/app/serializers/user_card_serializer.rb b/app/serializers/user_card_serializer.rb index ebc8ee2db68..6136d5c737d 100644 --- a/app/serializers/user_card_serializer.rb +++ b/app/serializers/user_card_serializer.rb @@ -216,6 +216,6 @@ class UserCardSerializer < BasicUserSerializer def custom_field_keys # Can be extended by other serializers - User.whitelisted_user_custom_fields(scope) + User.allowed_user_custom_fields(scope) end end diff --git a/app/serializers/user_with_custom_fields_serializer.rb b/app/serializers/user_with_custom_fields_serializer.rb index 6492d2f695d..10cb152990b 100644 --- a/app/serializers/user_with_custom_fields_serializer.rb +++ b/app/serializers/user_with_custom_fields_serializer.rb @@ -22,6 +22,6 @@ class UserWithCustomFieldsSerializer < BasicUserSerializer def custom_field_keys # Can be extended by other serializers - User.whitelisted_user_custom_fields(scope) + User.allowed_user_custom_fields(scope) end end diff --git a/app/services/spam_rule/flag_sockpuppets.rb b/app/services/spam_rule/flag_sockpuppets.rb index 1bc930b48c8..00f74e881be 100644 --- a/app/services/spam_rule/flag_sockpuppets.rb +++ b/app/services/spam_rule/flag_sockpuppets.rb @@ -28,7 +28,7 @@ class SpamRule::FlagSockpuppets @post.user != first_post.user && @post.user.ip_address == first_post.user.ip_address && @post.user.new_user? && - !ScreenedIpAddress.is_whitelisted?(@post.user.ip_address) + !ScreenedIpAddress.is_allowed?(@post.user.ip_address) end def flag_sockpuppet_users diff --git a/app/services/user_destroyer.rb b/app/services/user_destroyer.rb index e0f7543ac66..51ece7789ba 100644 --- a/app/services/user_destroyer.rb +++ b/app/services/user_destroyer.rb @@ -44,7 +44,7 @@ class UserDestroyer if opts[:block_urls] post.topic_links.each do |link| next if link.internal - next if Oneboxer.engine(link.url) != Onebox::Engine::WhitelistedGenericOnebox + next if Oneboxer.engine(link.url) != Onebox::Engine::AllowlistedGenericOnebox ScreenedUrl.watch(link.url, link.domain, ip_address: user.ip_address)&.record_match! end end diff --git a/app/views/embed/embed_error.html.erb b/app/views/embed/embed_error.html.erb index 37403f69b1c..48c28e12257 100644 --- a/app/views/embed/embed_error.html.erb +++ b/app/views/embed/embed_error.html.erb @@ -12,7 +12,7 @@ diff --git a/config/discourse_defaults.conf b/config/discourse_defaults.conf index b71cffa3071..8dadac203e4 100644 --- a/config/discourse_defaults.conf +++ b/config/discourse_defaults.conf @@ -291,11 +291,11 @@ anon_cache_store_threshold = 2 # EXPERIMENTAL - not yet supported in production # by default admins can install and amend any theme # you may restrict it so only specific themes are approved -# in whitelist mode all theme updates must happen via git repos +# in allowlist mode all theme updates must happen via git repos # themes missing from the list are automatically disallowed # list is a comma seperated list of git repos eg: # https://github.com/discourse/discourse-custom-header-links.git,https://github.com/discourse/discourse-simple-theme.git -whitelisted_theme_repos = +allowed_theme_repos = # Demon::EmailSync is used in conjunction with the enable_imap site setting # to sync N IMAP mailboxes with specific groups. It is a process started in diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 1e3ddae9de9..49e1281e52c 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -4255,7 +4255,7 @@ en: domain: "Domain" screened_ips: title: "Screened IPs" - description: 'IP addresses that are being watched. Use "Allow" to whitelist IP addresses.' + description: 'IP addresses that are being watched. Use "Allow" to allowlist IP addresses.' delete_confirm: "Are you sure you want to remove the rule for %{ip_address}?" roll_up_confirm: "Are you sure you want to roll up commonly screened IP addresses into subnets?" rolled_up_some_subnets: "Successfully rolled up IP ban entries to these subnets: %{subnets}." @@ -4777,7 +4777,7 @@ en: title: "Embedding" host: "Allowed Hosts" class_name: "Class Name" - path_whitelist: "Path Whitelist" + allowed_paths: "Path Allowlist" edit: "edit" category: "Post to Category" add_host: "Add Host" @@ -4790,9 +4790,9 @@ en: embed_title_scrubber: "Regular expression used to scrub the title of posts" embed_truncate: "Truncate the embedded posts" embed_unlisted: "Imported topics will be unlisted until there is a reply." - embed_whitelist_selector: "CSS selector for elements that are allowed in embeds" - embed_blacklist_selector: "CSS selector for elements that are removed from embeds" - embed_classname_whitelist: "Allowed CSS class names" + allowed_embed_selectors: "CSS selector for elements that are allowed in embeds" + blocked_embed_selectors: "CSS selector for elements that are removed from embeds" + allowed_embed_classnames: "Allowed CSS class names" save: "Save Embedding Settings" permalink: diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 8c3c14f0b6a..d70b41b6519 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -139,7 +139,7 @@ en: bounced_email_error: "Email is a bounced email report." screened_email_error: "Happens when the sender's email address was already screened." unsubscribe_not_allowed: "Happens when unsubscribing via email is not allowed for this user." - email_not_allowed: "Happens when the email address is not on the whitelist or is on the blacklist." + email_not_allowed: "Happens when the email address is not on the allowlist or is on the blocklist." unrecognized_error: "Unrecognized Error" secure_media_placeholder: "Redacted: this site has secure media enabled, visit the topic to see the attached image/audio/video." @@ -1485,9 +1485,9 @@ en: show_pinned_excerpt_mobile: "Show excerpt on pinned topics in mobile view." show_pinned_excerpt_desktop: "Show excerpt on pinned topics in desktop view." post_onebox_maxlength: "Maximum length of a oneboxed Discourse post in characters." - onebox_domains_blacklist: "A list of domains that will never be oneboxed." - inline_onebox_domains_whitelist: "A list of domains that will be oneboxed in miniature form if linked without a title" - enable_inline_onebox_on_all_domains: "Ignore inline_onebox_domain_whitelist site setting and allow inline onebox on all domains." + blocked_onebox_domains: "A list of domains that will never be oneboxed." + allowed_inline_onebox_domains: "A list of domains that will be oneboxed in miniature form if linked without a title" + enable_inline_onebox_on_all_domains: "Ignore inline_onebox_domain_allowlist site setting and allow inline onebox on all domains." force_custom_user_agent_hosts: "Hosts for which to use the custom onebox user agent on all requests. (Especially useful for hosts that limit access by user agent)." max_oneboxes_per_post: "Maximum number of oneboxes in a post." @@ -1556,22 +1556,22 @@ en: ga_universal_tracking_code: "Google Universal Analytics (analytics.js) tracking code ID, eg: UA-12345678-9; see https://google.com/analytics" ga_universal_domain_name: "Google Universal Analytics (analytics.js) domain name, eg: mysite.com; see https://google.com/analytics" ga_universal_auto_link_domains: "Enable Google Universal Analytics (analytics.js) cross-domain tracking. Outgoing links to these domains will have the client id added to them. See Google's Cross-Domain Tracking guide." - gtm_container_id: "Google Tag Manager container id. eg: GTM-ABCDEF.
Note: Third-party scripts loaded by GTM may need to be whitelisted in 'content security policy script src'." + gtm_container_id: "Google Tag Manager container id. eg: GTM-ABCDEF.
Note: Third-party scripts loaded by GTM may need to be allowlisted in 'content security policy script src'." enable_escaped_fragments: "Fall back to Google's Ajax-Crawling API if no webcrawler is detected. See https://developers.google.com/webmasters/ajax-crawling/docs/learn-more" moderators_create_categories: "Allow moderators to create new categories" cors_origins: "Allowed origins for cross-origin requests (CORS). Each origin must include http:// or https://. The DISCOURSE_ENABLE_CORS env variable must be set to true to enable CORS." - use_admin_ip_whitelist: "Admins can only log in if they are at an IP address defined in the Screened IPs list (Admin > Logs > Screened Ips)." - blacklist_ip_blocks: "A list of private IP blocks that should never be crawled by Discourse" - whitelist_internal_hosts: "A list of internal hosts that discourse can safely crawl for oneboxing and other purposes" + use_admin_ip_allowlist: "Admins can only log in if they are at an IP address defined in the Screened IPs list (Admin > Logs > Screened Ips)." + blocked_ip_blocks: "A list of private IP blocks that should never be crawled by Discourse" + allowed_internal_hosts: "A list of internal hosts that discourse can safely crawl for oneboxing and other purposes" allowed_iframes: "A list of iframe src domain prefixes that discourse can safely allow in posts" - whitelisted_crawler_user_agents: "User agents of web crawlers that should be allowed to access the site. WARNING! SETTING THIS WILL DISALLOW ALL CRAWLERS NOT LISTED HERE!" - blacklisted_crawler_user_agents: "Unique case insensitive word in the user agent string identifying web crawlers that should not be allowed to access the site. Does not apply if whitelist is defined." + allowed_crawler_user_agents: "User agents of web crawlers that should be allowed to access the site. WARNING! SETTING THIS WILL DISALLOW ALL CRAWLERS NOT LISTED HERE!" + blocked_crawler_user_agents: "Unique case insensitive word in the user agent string identifying web crawlers that should not be allowed to access the site. Does not apply if allowlist is defined." slow_down_crawler_user_agents: "User agents of web crawlers that should be rate limited in robots.txt using the Crawl-delay directive" slow_down_crawler_rate: "If slow_down_crawler_user_agents is specified this rate will apply to all the crawlers (number of seconds delay between requests)" content_security_policy: "Enable Content-Security-Policy" content_security_policy_report_only: "Enable Content-Security-Policy-Report-Only" content_security_policy_collect_reports: "Enable CSP violation report collection at /csp_reports" - content_security_policy_script_src: "Additional whitelisted script sources. The current host and CDN are included by default. See Mitigate XSS Attacks with Content Security Policy." + content_security_policy_script_src: "Additional allowlisted script sources. The current host and CDN are included by default. See Mitigate XSS Attacks with Content Security Policy." invalidate_inactive_admin_email_after_days: "Admin accounts that have not visited the site in this number of days will need to re-validate their email address before logging in. Set to 0 to disable." top_menu: "Determine which items appear in the homepage navigation, and in what order. Example latest|new|unread|categories|top|read|posted|bookmarks" post_menu: "Determine which items appear on the post menu, and in what order. Example like|edit|flag|delete|share|bookmark|reply" @@ -1601,8 +1601,8 @@ en: enable_whispers: "Allow staff private communication within topics." allow_index_in_robots_txt: "Specify in robots.txt that this site is allowed to be indexed by web search engines. In exceptional cases you can permanently override robots.txt." - email_domains_blacklist: "A pipe-delimited list of email domains that users are not allowed to register accounts with. Example: mailinator.com|trashmail.net" - email_domains_whitelist: "A pipe-delimited list of email domains that users MUST register accounts with. WARNING: Users with email domains other than those listed will not be allowed!" + blocked_email_domains: "A pipe-delimited list of email domains that users are not allowed to register accounts with. Example: mailinator.com|trashmail.net" + allowed_email_domains: "A pipe-delimited list of email domains that users MUST register accounts with. WARNING: Users with email domains other than those listed will not be allowed!" auto_approve_email_domains: "Users with email addresses from this list of domains will be automatically approved." hide_email_address_taken: "Don't inform users that an account exists with a given email address during signup and from the forgot password form." log_out_strict: "When logging out, log out ALL sessions for the user on all devices" @@ -1618,7 +1618,7 @@ en: min_username_length: "Minimum username length in characters. WARNING: if any existing users or groups have names shorter than this, your site will break!" max_username_length: "Maximum username length in characters. WARNING: if any existing users or groups have names longer than this, your site will break!" unicode_usernames: "Allow usernames and group names to contain Unicode letters and numbers." - unicode_username_character_whitelist: "Regular expression to allow only some Unicode characters within usernames. ASCII letters and numbers will always be allowed and don't need to be included in the whitelist." + allowed_unicode_username_characters: "Regular expression to allow only some Unicode characters within usernames. ASCII letters and numbers will always be allowed and don't need to be included in the allowlist." reserved_usernames: "Usernames for which signup is not allowed. Wildcard symbol * can be used to match any character zero or more times." @@ -1819,7 +1819,7 @@ en: min_trust_to_post_links: "The minimum trust level required to include links in posts" min_trust_to_post_images: "The minimum trust level required to include images in a post" - whitelisted_link_domains: "Domains that users may link to even if they don't have the appropriate trust level to post links" + allowed_link_domains: "Domains that users may link to even if they don't have the appropriate trust level to post links" newuser_max_links: "How many links a new user can add to a post." newuser_max_images: "How many images a new user can add to a post." @@ -1887,7 +1887,7 @@ en: newuser_spam_host_threshold: "How many times a new user can post a link to the same host within their `newuser_spam_host_threshold` posts before being considered spam." - white_listed_spam_host_domains: "A list of domains excluded from spam host testing. New users will never be restricted from creating posts with links to these domains." + allowed_spam_host_domains: "A list of domains excluded from spam host testing. New users will never be restricted from creating posts with links to these domains." staff_like_weight: "How much extra weighting factor to give staff likes." topic_view_duration_hours: "Count a new topic view once per IP/User every N hours" user_profile_view_duration_hours: "Count a new user profile view once per IP/User every N hours" @@ -1933,7 +1933,7 @@ en: max_emails_per_day_per_user: "Maximum number of emails to send users per day. 0 to disable the limit" enable_staged_users: "Automatically create staged users when processing incoming emails." maximum_staged_users_per_email: "Maximum number of staged users created when processing an incoming email." - auto_generated_whitelist: "List of email addresses that won't be checked for auto-generated content. Example: foo@bar.com|discourse@bar.com" + auto_generated_allowlist: "List of email addresses that won't be checked for auto-generated content. Example: foo@bar.com|discourse@bar.com" block_auto_generated_emails: "Block incoming emails identified as being auto generated." ignore_by_title: "Ignore incoming emails based on their title." mailgun_api_key: "Mailgun Secret API key used to verify webhook messages." @@ -1943,8 +1943,8 @@ en: bounce_score_threshold: "Max bounce score before we will stop emailing a user." reset_bounce_score_after_days: "Automatically reset bounce score after X days." - attachment_content_type_blacklist: "List of keywords used to blacklist attachments based on the content type." - attachment_filename_blacklist: "List of keywords used to blacklist attachments based on the filename." + blocked_attachment_content_types: "List of keywords used to blocklist attachments based on the content type." + blocked_attachment_filenames: "List of keywords used to blocklist attachments based on the filename." forwarded_emails_behaviour: "How to treat a forwarded email to Discourse" always_show_trimmed_content: "Always show trimmed part of incoming emails. WARNING: might reveal email addresses." @@ -2046,7 +2046,7 @@ en: max_notifications_per_user: "Maximum amount of notifications per user, if this number is exceeded old notifications will be deleted. Enforced weekly. Set to 0 to disable" - user_website_domains_whitelist: "User website will be verified against these domains. Pipe-delimited list." + allowed_user_website_domains: "User website will be verified against these domains. Pipe-delimited list." allow_profile_backgrounds: "Allow users to upload profile backgrounds." @@ -2110,7 +2110,7 @@ en: embed_truncate: "Truncate the embedded posts." embed_unlisted: "Imported topics will be unlisted until a user replies." embed_support_markdown: "Support Markdown formatting for embedded posts." - embed_whitelist_selector: "A comma separated list of CSS elements that are allowed in embeds." + allowed_embed_selectors: "A comma separated list of CSS elements that are allowed in embeds." allowed_href_schemes: "Schemes allowed in links in addition to http and https." embed_post_limit: "Maximum number of posts to embed." embed_username_required: "The username for topic creation is required." @@ -2280,7 +2280,7 @@ en: low_weight_invalid: "You cannot set the weight to be greater or equal to 1 or smaller than 'category_search_priority_very_low_weight'." high_weight_invalid: "You cannot set the weight to be smaller or equal to 1 or greater than 'category_search_priority_very_high_weight'." very_high_weight_invalid: "You cannot set the weight to be smaller than 'category_search_priority_high_weight'." - unicode_username_whitelist: + allowed_unicode_usernames: regex_invalid: "The regular expression is invalid: %{error}" leading_trailing_slash: "The regular expression must not start and end with a slash." unicode_usernames_avatars: "The internal system avatars do not support Unicode usernames." @@ -2642,7 +2642,7 @@ en: - Is your domain's [DKIM record][3] correct? This will significantly improve email deliverability. [Test your DKIM record][7] here. - - If you run your own mail server, check to make sure the IPs of your mail server are [not on any email blacklists][4]. Also verify that it is definitely sending a fully-qualified hostname that resolves in DNS in its HELO message. If not, this will cause your email to be rejected by many mail services. + - If you run your own mail server, check to make sure the IPs of your mail server are [not on any email blocklists][4]. Also verify that it is definitely sending a fully-qualified hostname that resolves in DNS in its HELO message. If not, this will cause your email to be rejected by many mail services. - We highly recommend you **send a test email to [mail-tester.com][mt]** to verify that all the above is working correctly. @@ -3236,7 +3236,7 @@ en: Please [review the user](%{user_url}). - This can be modified via the `newuser_spam_host_threshold` and `white_listed_spam_host_domains` site settings. Consider adding %{domains} to the whitelist if they should be exempt. + This can be modified via the `newuser_spam_host_threshold` and `allowed_spam_host_domains` site settings. Consider adding %{domains} to the allowlist if they should be exempt. unsilenced: title: "Unsilenced" diff --git a/config/site_settings.yml b/config/site_settings.yml index 98c2ea0b533..20f1e1a81a4 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -443,10 +443,10 @@ login: sso_overrides_website: false sso_overrides_card_background: false sso_not_approved_url: "" - email_domains_blacklist: + blocked_email_domains: default: "mailinator.com" type: list - email_domains_whitelist: + allowed_email_domains: default: "" type: list auto_approve_email_domains: @@ -478,8 +478,8 @@ users: default: false client: true validator: "UnicodeUsernameValidator" - unicode_username_character_whitelist: - validator: "UnicodeUsernameWhitelistValidator" + allowed_unicode_username_characters: + validator: "UnicodeUsernameAllowlistValidator" default: "" locale_default: cs: "[ěščřžýáíéóůúďťňĚŠČŘŽÝÁÍÉÓŮÚĎŤŇ]" @@ -573,7 +573,7 @@ users: client: true show_inactive_accounts: default: false - user_website_domains_whitelist: + allowed_user_website_domains: default: "" type: list hide_suspension_reasons: @@ -798,7 +798,7 @@ posting: ko: 50 zh_CN: 50 zh_TW: 50 - whitelisted_link_domains: + allowed_link_domains: default: "" type: list newuser_max_links: 2 @@ -908,7 +908,7 @@ posting: embed_unlisted: false embed_truncate: true embed_support_markdown: false - embed_whitelist_selector: "" + allowed_embed_selectors: "" allowed_href_schemes: client: true default: "" @@ -1082,7 +1082,7 @@ email: max_emails_per_day_per_user: 100 enable_staged_users: true maximum_staged_users_per_email: 10 - auto_generated_whitelist: + auto_generated_allowlist: default: "" type: list block_auto_generated_emails: true @@ -1109,11 +1109,11 @@ email: reset_bounce_score_after_days: default: 30 max: 36500 - attachment_content_type_blacklist: + blocked_attachment_content_types: type: list default: "pkcs7|x-vcard" list_type: compact - attachment_filename_blacklist: + blocked_attachment_filenames: type: list default: "smime.p7s|signature.asc|winmail.dat" list_type: compact @@ -1456,25 +1456,25 @@ security: cors_origins: default: "" type: list - use_admin_ip_whitelist: + use_admin_ip_allowlist: default: false client: true - blacklist_ip_blocks: + blocked_ip_blocks: default: "" type: list list_type: compact - whitelist_internal_hosts: + allowed_internal_hosts: default: "" type: list allowed_iframes: default: "https://www.google.com/maps/embed?|https://www.openstreetmap.org/export/embed.html?|https://calendar.google.com/calendar/embed?|https://codepen.io/" type: list client: true - whitelisted_crawler_user_agents: + allowed_crawler_user_agents: type: list default: "" list_type: compact - blacklisted_crawler_user_agents: + blocked_crawler_user_agents: type: list default: "mauibot|semrushbot|ahrefsbot|blexbot|seo spider" list_type: compact @@ -1511,14 +1511,14 @@ onebox: ja: 200 zh_CN: 200 zh_TW: 200 - onebox_domains_blacklist: + blocked_onebox_domains: default: "" type: list list_type: compact max_oneboxes_per_post: default: 50 client: true - inline_onebox_domains_whitelist: + allowed_inline_onebox_domains: default: "" type: list list_type: compact @@ -1542,7 +1542,7 @@ spam: notify_mods_when_user_silenced: false flag_sockpuppets: false newuser_spam_host_threshold: 3 - white_listed_spam_host_domains: + allowed_spam_host_domains: default: "" type: list levenshtein_distance_spammer_emails: @@ -1728,10 +1728,10 @@ embedding: embed_title_scrubber: default: "" hidden: true - embed_blacklist_selector: + blocked_embed_selectors: default: "" hidden: true - embed_classname_whitelist: + allowed_embed_classnames: default: "emoji" hidden: true diff --git a/db/migrate/20200709032247_allowlist_and_blocklist_site_settings.rb b/db/migrate/20200709032247_allowlist_and_blocklist_site_settings.rb new file mode 100644 index 00000000000..7145c9fe818 --- /dev/null +++ b/db/migrate/20200709032247_allowlist_and_blocklist_site_settings.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class AllowlistAndBlocklistSiteSettings < ActiveRecord::Migration[6.0] + def up + SiteSetting::ALLOWLIST_DEPRECATED_SITE_SETTINGS.each_pair do |old_key, new_key| + DB.exec <<~SQL + INSERT INTO site_settings(name, data_type, value, created_at, updated_at) + SELECT '#{new_key}', data_type, value, created_at, updated_At + FROM site_settings + WHERE name = '#{old_key}' + SQL + end + end + + def down + SiteSetting::ALLOWLIST_DEPRECATED_SITE_SETTINGS.each_pair do |_old_key, new_key| + DB.exec <<~SQL + DELETE FROM site_settings + WHERE name = '#{new_key}' + SQL + end + end +end diff --git a/db/post_migrate/20200629232159_rename_path_whitelist_to_allowed_paths.rb b/db/post_migrate/20200629232159_rename_path_whitelist_to_allowed_paths.rb new file mode 100644 index 00000000000..3e55cabe2db --- /dev/null +++ b/db/post_migrate/20200629232159_rename_path_whitelist_to_allowed_paths.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class RenamePathWhitelistToAllowedPaths < ActiveRecord::Migration[6.0] + def change + rename_column :embeddable_hosts, :path_whitelist, :allowed_paths + end +end diff --git a/db/post_migrate/20200724060632_remove_deprecated_allowlist_settings.rb b/db/post_migrate/20200724060632_remove_deprecated_allowlist_settings.rb new file mode 100644 index 00000000000..38b87c9ac26 --- /dev/null +++ b/db/post_migrate/20200724060632_remove_deprecated_allowlist_settings.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class RemoveDeprecatedAllowlistSettings < ActiveRecord::Migration[6.0] + def up + SiteSetting::ALLOWLIST_DEPRECATED_SITE_SETTINGS.each_pair do |old_key, _new_key| + DB.exec <<~SQL + DELETE FROM site_settings + WHERE name = '#{old_key}' + SQL + end + end + + def down + SiteSetting::ALLOWLIST_DEPRECATED_SITE_SETTINGS.each_pair do |old_key, new_key| + DB.exec <<~SQL + INSERT INTO site_settings(name, data_type, value, created_at, updated_at) + SELECT '#{old_key}', data_type, value, created_at, updated_At + FROM site_settings + WHERE name = '#{new_key}' + SQL + end + end +end diff --git a/docs/SECURITY.md b/docs/SECURITY.md index 7e1606d2b0c..ee485b5f055 100644 --- a/docs/SECURITY.md +++ b/docs/SECURITY.md @@ -29,7 +29,7 @@ There are 3 main scenarios we protect against: 3. **CSP is on by default** for [all Discourse installations](https://meta.discourse.org/t/mitigate-xss-attacks-with-content-security-policy/104243) as of Discourse 2.2. It can be switched off in the site settings, but it is default on. -On the server side we run a whitelist based sanitizer, implemented using the [Sanitize gem](https://github.com/rgrove/sanitize). See the [relevant Discourse code](https://github.com/discourse/discourse/blob/master/lib/pretty_text.rb). +On the server side we run a allowlist based sanitizer, implemented using the [Sanitize gem](https://github.com/rgrove/sanitize). See the [relevant Discourse code](https://github.com/discourse/discourse/blob/master/lib/pretty_text.rb). In addition, titles and all other places where non-admins can enter code are protected either using the Handlebars library or standard Rails XSS protection. diff --git a/lib/auth/github_authenticator.rb b/lib/auth/github_authenticator.rb index c76fe9a59e2..1925086217d 100644 --- a/lib/auth/github_authenticator.rb +++ b/lib/auth/github_authenticator.rb @@ -113,8 +113,8 @@ class Auth::GithubAuthenticator < Auth::Authenticator end # If we *still* don't have a user, check to see if there's an email that - # passes validation (this includes whitelist/blacklist filtering if any is - # configured). When no whitelist/blacklist is in play, this will simply + # passes validation (this includes allowlist/blocklist filtering if any is + # configured). When no allowlist/blocklist is in play, this will simply # choose the primary email since it's at the front of the list. if !user validator = EmailValidator.new(attributes: :email) diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb index d96d81f6836..e46295becf1 100644 --- a/lib/cooked_post_processor.rb +++ b/lib/cooked_post_processor.rb @@ -592,7 +592,7 @@ class CookedPostProcessor found = false parent = img while parent = parent.parent - if parent["class"] && parent["class"].include?("whitelistedgeneric") + if parent["class"] && parent["class"].include?("allowlistedgeneric") found = true break end diff --git a/lib/crawler_detection.rb b/lib/crawler_detection.rb index 4a90f848652..36fb61b63e5 100644 --- a/lib/crawler_detection.rb +++ b/lib/crawler_detection.rb @@ -39,18 +39,18 @@ module CrawlerDetection # Given a user_agent that returns true from crawler?, should its request be allowed? def self.allow_crawler?(user_agent) - return true if SiteSetting.whitelisted_crawler_user_agents.blank? && - SiteSetting.blacklisted_crawler_user_agents.blank? + return true if SiteSetting.allowed_crawler_user_agents.blank? && + SiteSetting.blocked_crawler_user_agents.blank? - @whitelisted_matchers ||= {} - @blacklisted_matchers ||= {} + @allowlisted_matchers ||= {} + @blocklisted_matchers ||= {} - if SiteSetting.whitelisted_crawler_user_agents.present? - whitelisted = @whitelisted_matchers[SiteSetting.whitelisted_crawler_user_agents] ||= to_matcher(SiteSetting.whitelisted_crawler_user_agents) - !user_agent.nil? && user_agent.match?(whitelisted) + if SiteSetting.allowed_crawler_user_agents.present? + allowlisted = @allowlisted_matchers[SiteSetting.allowed_crawler_user_agents] ||= to_matcher(SiteSetting.allowed_crawler_user_agents) + !user_agent.nil? && user_agent.match?(allowlisted) else - blacklisted = @blacklisted_matchers[SiteSetting.blacklisted_crawler_user_agents] ||= to_matcher(SiteSetting.blacklisted_crawler_user_agents) - user_agent.nil? || !user_agent.match?(blacklisted) + blocklisted = @blocklisted_matchers[SiteSetting.blocked_crawler_user_agents] ||= to_matcher(SiteSetting.blocked_crawler_user_agents) + user_agent.nil? || !user_agent.match?(blocklisted) end end diff --git a/lib/email/receiver.rb b/lib/email/receiver.rb index 78e0dcb3c87..fb487084dfc 100644 --- a/lib/email/receiver.rb +++ b/lib/email/receiver.rb @@ -62,7 +62,7 @@ module Email end def process! - return if is_blacklisted? + return if is_blocked? id_hash = Digest::SHA1.hexdigest(@message_id) DistributedMutex.synchronize("process_email_#{id_hash}") do begin @@ -105,7 +105,7 @@ module Email end end - def is_blacklisted? + def is_blocked? return false if SiteSetting.ignore_by_title.blank? Regexp.new(SiteSetting.ignore_by_title, Regexp::IGNORECASE) =~ @mail.subject end @@ -289,7 +289,7 @@ module Email end def is_auto_generated? - return false if SiteSetting.auto_generated_whitelist.split('|').include?(@from_email) + return false if SiteSetting.auto_generated_allowlist.split('|').include?(@from_email) @mail[:precedence].to_s[/list|junk|bulk|auto_reply/i] || @mail[:from].to_s[/(mailer[\-_]?daemon|post[\-_]?master|no[\-_]?reply)@/i] || @mail[:subject].to_s[/^\s*(Auto:|Automatic reply|Autosvar|Automatisk svar|Automatisch antwoord|Abwesenheitsnotiz|Risposta Non al computer|Automatisch antwoord|Auto Response|Respuesta automática|Fuori sede|Out of Office|Frånvaro|Réponse automatique)/i] || @@ -1009,18 +1009,18 @@ module Email raise InvalidPostAction.new if result.failed? && result.forbidden end - def is_whitelisted_attachment?(attachment) - attachment.content_type !~ SiteSetting.attachment_content_type_blacklist_regex && - attachment.filename !~ SiteSetting.attachment_filename_blacklist_regex + def is_allowed?(attachment) + attachment.content_type !~ SiteSetting.blocked_attachment_content_types_regex && + attachment.filename !~ SiteSetting.blocked_attachment_filenames_regex end def attachments @attachments ||= begin - attachments = @mail.attachments.select { |attachment| is_whitelisted_attachment?(attachment) } - attachments << @mail if @mail.attachment? && is_whitelisted_attachment?(@mail) + attachments = @mail.attachments.select { |attachment| is_allowed?(attachment) } + attachments << @mail if @mail.attachment? && is_allowed?(@mail) @mail.parts.each do |part| - attachments << part if part.attachment? && is_whitelisted_attachment?(part) + attachments << part if part.attachment? && is_allowed?(part) end attachments.uniq! diff --git a/lib/email/styles.rb b/lib/email/styles.rb index ffd4527eb75..2126d456f98 100644 --- a/lib/email/styles.rb +++ b/lib/email/styles.rb @@ -152,7 +152,7 @@ module Email # iframes can't go in emails, so replace them with clickable links @fragment.css('iframe').each do |i| begin - # sometimes, iframes are blacklisted... + # sometimes, iframes are blocklisted... if i["src"].blank? i.remove next diff --git a/lib/final_destination.rb b/lib/final_destination.rb index 02930a71c8f..b5a4dcc4749 100644 --- a/lib/final_destination.rb +++ b/lib/final_destination.rb @@ -284,13 +284,13 @@ class FinalDestination def is_dest_valid? return false unless @uri && @uri.host - # Whitelisted hosts + # Allowlisted hosts return true if hostname_matches?(SiteSetting.Upload.s3_cdn_url) || hostname_matches?(GlobalSetting.try(:cdn_url)) || hostname_matches?(Discourse.base_url_no_prefix) - if SiteSetting.whitelist_internal_hosts.present? - return true if SiteSetting.whitelist_internal_hosts.split("|").any? { |h| h.downcase == @uri.hostname.downcase } + if SiteSetting.allowed_internal_hosts.present? + return true if SiteSetting.allowed_internal_hosts.split("|").any? { |h| h.downcase == @uri.hostname.downcase } end address_s = @opts[:lookup_ip].call(@uri.hostname) @@ -320,7 +320,7 @@ class FinalDestination def private_ranges FinalDestination.standard_private_ranges + - SiteSetting.blacklist_ip_blocks.split('|').map { |r| IPAddr.new(r) rescue nil }.compact + SiteSetting.blocked_ip_blocks.split('|').map { |r| IPAddr.new(r) rescue nil }.compact end def log(log_level, message) diff --git a/lib/flag_query.rb b/lib/flag_query.rb index c03763d74ba..5c6c0bce9b1 100644 --- a/lib/flag_query.rb +++ b/lib/flag_query.rb @@ -137,7 +137,7 @@ module FlagQuery guardian = Guardian.new(current_user) users = User.includes(:user_stat).where(id: user_ids.to_a).to_a - User.preload_custom_fields(users, User.whitelisted_user_custom_fields(guardian)) + User.preload_custom_fields(users, User.allowed_user_custom_fields(guardian)) [ posts, diff --git a/lib/guardian.rb b/lib/guardian.rb index 709f386904b..9e31492c773 100644 --- a/lib/guardian.rb +++ b/lib/guardian.rb @@ -477,9 +477,9 @@ class Guardian def allowed_theme_repo_import?(repo) return false if !@user.admin? - whitelisted_repos = GlobalSetting.whitelisted_theme_repos - if !whitelisted_repos.blank? - urls = whitelisted_repos.split(",").map(&:strip) + allowed_repos = GlobalSetting.allowed_theme_repos + if !allowed_repos.blank? + urls = allowed_repos.split(",").map(&:strip) return urls.include?(repo) end @@ -489,8 +489,8 @@ class Guardian def allow_themes?(theme_ids, include_preview: false) return true if theme_ids.blank? - if whitelisted_theme_ids = GlobalSetting.whitelisted_theme_ids - if (theme_ids - whitelisted_theme_ids).present? + if allowed_theme_ids = GlobalSetting.allowed_theme_ids + if (theme_ids - allowed_theme_ids).present? return false end end diff --git a/lib/guardian/post_guardian.rb b/lib/guardian/post_guardian.rb index 2827f5462bf..d02efa61faa 100644 --- a/lib/guardian/post_guardian.rb +++ b/lib/guardian/post_guardian.rb @@ -10,7 +10,7 @@ module PostGuardian def link_posting_access if unrestricted_link_posting? 'full' - elsif SiteSetting.whitelisted_link_domains.present? + elsif SiteSetting.allowed_link_domains.present? 'limited' else 'none' @@ -21,7 +21,7 @@ module PostGuardian return false if host.blank? unrestricted_link_posting? || - SiteSetting.whitelisted_link_domains.split('|').include?(host) + SiteSetting.allowed_link_domains.split('|').include?(host) end # Can the user act on the post in a particular way. diff --git a/lib/inline_oneboxer.rb b/lib/inline_oneboxer.rb index 26f3ecc9ba6..48c01715198 100644 --- a/lib/inline_oneboxer.rb +++ b/lib/inline_oneboxer.rb @@ -42,7 +42,7 @@ class InlineOneboxer end always_allow = SiteSetting.enable_inline_onebox_on_all_domains - domains = SiteSetting.inline_onebox_domains_whitelist&.split('|') unless always_allow + domains = SiteSetting.allowed_inline_onebox_domains&.split('|') unless always_allow if always_allow || domains uri = begin diff --git a/lib/onebox/engine/whitelisted_generic_onebox.rb b/lib/onebox/engine/allowlisted_generic_onebox.rb similarity index 82% rename from lib/onebox/engine/whitelisted_generic_onebox.rb rename to lib/onebox/engine/allowlisted_generic_onebox.rb index 7a46a0d1e5d..85af9278635 100644 --- a/lib/onebox/engine/whitelisted_generic_onebox.rb +++ b/lib/onebox/engine/allowlisted_generic_onebox.rb @@ -4,9 +4,9 @@ require "ipaddr" module Onebox module Engine - class WhitelistedGenericOnebox + class AllowlistedGenericOnebox - # overwrite the whitelist + # overwrite the allowlist def self.===(other) other.is_a?(URI) ? (IPAddr.new(other.hostname) rescue nil).nil? : true end @@ -18,10 +18,10 @@ module Onebox private - # overwrite to whitelist iframes + # overwrite to allowlist iframes def is_embedded? return false unless data[:html] && data[:height] - return true if WhitelistedGenericOnebox.html_providers.include?(data[:provider_name]) + return true if AllowlistedGenericOnebox.html_providers.include?(data[:provider_name]) if data[:html]["iframe"] fragment = Nokogiri::HTML5::fragment(data[:html]) diff --git a/lib/oneboxer.rb b/lib/oneboxer.rb index 107e6d0610b..a5e1c235e46 100644 --- a/lib/oneboxer.rb +++ b/lib/oneboxer.rb @@ -292,8 +292,8 @@ module Oneboxer end end - def self.blacklisted_domains - SiteSetting.onebox_domains_blacklist.split("|") + def self.blocked_domains + SiteSetting.blocked_onebox_domains.split("|") end def self.preserve_fragment_url_hosts @@ -304,12 +304,12 @@ module Oneboxer Discourse.cache.fetch(onebox_cache_key(url), expires_in: 1.day) do fd = FinalDestination.new(url, ignore_redirects: ignore_redirects, - ignore_hostnames: blacklisted_domains, + ignore_hostnames: blocked_domains, force_get_hosts: force_get_hosts, force_custom_user_agent_hosts: force_custom_user_agent_hosts, preserve_fragment_url_hosts: preserve_fragment_url_hosts) uri = fd.resolve - return blank_onebox if uri.blank? || blacklisted_domains.map { |hostname| uri.hostname.match?(hostname) }.any? + return blank_onebox if uri.blank? || blocked_domains.map { |hostname| uri.hostname.match?(hostname) }.any? options = { max_width: 695, diff --git a/lib/plugin/instance.rb b/lib/plugin/instance.rb index 6b5ece1cd34..fe64f3b21b9 100644 --- a/lib/plugin/instance.rb +++ b/lib/plugin/instance.rb @@ -161,10 +161,20 @@ class Plugin::Instance end def whitelist_staff_user_custom_field(field) + Discourse.deprecate("whitelist_staff_user_custom_field is deprecated, use the allow_staff_user_custom_field.", drop_from: "2.6") + allow_staff_user_custom_field(field) + end + + def allow_staff_user_custom_field(field) DiscoursePluginRegistry.register_staff_user_custom_field(field, self) end def whitelist_public_user_custom_field(field) + Discourse.deprecate("whitelist_public_user_custom_field is deprecated, use the allow_public_user_custom_field.", drop_from: "2.6") + allow_public_user_custom_field(field) + end + + def allow_public_user_custom_field(field) DiscoursePluginRegistry.register_public_user_custom_field(field, self) end @@ -256,10 +266,15 @@ class Plugin::Instance end end - # Add a post_custom_fields_whitelister block to the TopicView, respecting if the plugin is enabled def topic_view_post_custom_fields_whitelister(&block) + Discourse.deprecate("topic_view_post_custom_fields_whitelister is deprecated, use the topic_view_post_custom_fields_allowlister.", drop_from: "2.6") + topic_view_post_custom_fields_allowlister(&block) + end + + # Add a post_custom_fields_allowlister block to the TopicView, respecting if the plugin is enabled + def topic_view_post_custom_fields_allowlister(&block) reloadable_patch do |plugin| - ::TopicView.add_post_custom_fields_whitelister do |user| + ::TopicView.add_post_custom_fields_allowlister do |user| plugin.enabled? ? block.call(user) : [] end end diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb index e17a90e44bc..03f4dcb4c30 100644 --- a/lib/pretty_text.rb +++ b/lib/pretty_text.rb @@ -284,10 +284,10 @@ module PrettyText end def self.add_rel_nofollow_to_user_content(doc) - whitelist = [] + allowlist = [] domains = SiteSetting.exclude_rel_nofollow_domains - whitelist = domains.split('|') if domains.present? + allowlist = domains.split('|') if domains.present? site_uri = nil doc.css("a").each do |l| @@ -299,7 +299,7 @@ module PrettyText if !uri.host.present? || uri.host == site_uri.host || uri.host.ends_with?(".#{site_uri.host}") || - whitelist.any? { |u| uri.host == u || uri.host.ends_with?(".#{u}") } + allowlist.any? { |u| uri.host == u || uri.host.ends_with?(".#{u}") } # we are good no need for nofollow l.remove_attribute("rel") else diff --git a/lib/site_setting_extension.rb b/lib/site_setting_extension.rb index 09b616eda99..da3f6cf9814 100644 --- a/lib/site_setting_extension.rb +++ b/lib/site_setting_extension.rb @@ -378,8 +378,8 @@ module SiteSettingExtension end HOSTNAME_SETTINGS ||= %w{ - disabled_image_download_domains onebox_domains_blacklist exclude_rel_nofollow_domains - email_domains_blacklist email_domains_whitelist white_listed_spam_host_domains + disabled_image_download_domains blocked_onebox_domains exclude_rel_nofollow_domains + blocked_email_domains allowed_email_domains allowed_spam_host_domains } def filter_value(name, value) diff --git a/lib/spam_handler.rb b/lib/spam_handler.rb index 2071c079bbe..fc298f87665 100644 --- a/lib/spam_handler.rb +++ b/lib/spam_handler.rb @@ -17,8 +17,8 @@ class SpamHandler return false if staff_members_with_same_ip > 0 - ip_whitelisted = ScreenedIpAddress.is_whitelisted?(ip_address) - return false if ip_whitelisted + allowed_ip = ScreenedIpAddress.is_allowed?(ip_address) + return false if allowed_ip tl0_accounts_with_same_ip = User.unscoped .where(trust_level: TrustLevel[0]) diff --git a/lib/tasks/typepad.thor b/lib/tasks/typepad.thor index cb6eb8b6e5e..649f12db523 100644 --- a/lib/tasks/typepad.thor +++ b/lib/tasks/typepad.thor @@ -13,7 +13,7 @@ class Typepad < Thor require './config/environment' backup_settings = {} - %w(email_domains_blacklist).each do |s| + %w(blocked_email_domains).each do |s| backup_settings[s] = SiteSetting.get(s) end @@ -53,7 +53,7 @@ class Typepad < Thor end RateLimiter.disable - SiteSetting.email_domains_blacklist = "" + SiteSetting.blocked_email_domains = "" puts "Importing #{entries.size} entries" diff --git a/lib/topic_view.rb b/lib/topic_view.rb index 81b4449c4ed..0601a59f0c6 100644 --- a/lib/topic_view.rb +++ b/lib/topic_view.rb @@ -38,16 +38,16 @@ class TopicView @default_post_custom_fields ||= [Post::NOTICE_TYPE, Post::NOTICE_ARGS, "action_code_who"] end - def self.post_custom_fields_whitelisters - @post_custom_fields_whitelisters ||= Set.new + def self.post_custom_fields_allowlisters + @post_custom_fields_allowlisters ||= Set.new end - def self.add_post_custom_fields_whitelister(&block) - post_custom_fields_whitelisters << block + def self.add_post_custom_fields_allowlister(&block) + post_custom_fields_allowlisters << block end - def self.whitelisted_post_custom_fields(user) - wpcf = default_post_custom_fields + post_custom_fields_whitelisters.map { |w| w.call(user) } + def self.allowed_post_custom_fields(user) + wpcf = default_post_custom_fields + post_custom_fields_allowlisters.map { |w| w.call(user) } wpcf.flatten.uniq end @@ -87,12 +87,12 @@ class TopicView filter_posts(options) if @posts && !@skip_custom_fields - if (added_fields = User.whitelisted_user_custom_fields(@guardian)).present? + if (added_fields = User.allowed_user_custom_fields(@guardian)).present? @user_custom_fields = User.custom_fields_for_ids(@posts.pluck(:user_id), added_fields) end - if (whitelisted_fields = TopicView.whitelisted_post_custom_fields(@user)).present? - @post_custom_fields = Post.custom_fields_for_ids(@posts.pluck(:id), whitelisted_fields) + if (allowed_fields = TopicView.allowed_post_custom_fields(@user)).present? + @post_custom_fields = Post.custom_fields_for_ids(@posts.pluck(:id), allowed_fields) end end diff --git a/lib/upload_creator.rb b/lib/upload_creator.rb index acab69e9c07..f3d76cb2856 100644 --- a/lib/upload_creator.rb +++ b/lib/upload_creator.rb @@ -51,7 +51,7 @@ class UploadCreator return @upload if @upload.errors.present? if @image_info.type.to_s == "svg" - whitelist_svg! + clean_svg! elsif !Rails.env.test? || @opts[:force_optimize] convert_to_jpeg! if convert_png_to_jpeg? downsize! if should_downsize? @@ -302,9 +302,9 @@ class UploadCreator end end - def whitelist_svg! + def clean_svg! doc = Nokogiri::XML(@file) - doc.xpath(svg_whitelist_xpath).remove + doc.xpath(svg_allowlist_xpath).remove doc.xpath("//@*[starts-with(name(), 'on')]").remove doc.css('use').each do |use_el| if use_el.attr('href') @@ -400,8 +400,8 @@ class UploadCreator @allow_animation ||= @opts[:type] == "avatar" ? SiteSetting.allow_animated_avatars : SiteSetting.allow_animated_thumbnails end - def svg_whitelist_xpath - @@svg_whitelist_xpath ||= "//*[#{WHITELISTED_SVG_ELEMENTS.map { |e| "name()!='#{e}'" }.join(" and ") }]" + def svg_allowlist_xpath + @@svg_allowlist_xpath ||= "//*[#{WHITELISTED_SVG_ELEMENTS.map { |e| "name()!='#{e}'" }.join(" and ") }]" end def add_metadata! diff --git a/lib/upload_recovery.rb b/lib/upload_recovery.rb index fc687d7fd30..7ea190c02d8 100644 --- a/lib/upload_recovery.rb +++ b/lib/upload_recovery.rb @@ -17,7 +17,7 @@ class UploadRecovery analyzer.cooked_stripped.css("img", "a").each do |media| if media.name == "img" && orig_src = media["data-orig-src"] if dom_class = media["class"] - if (Post.white_listed_image_classes & dom_class.split).count > 0 + if (Post.allowed_image_classes & dom_class.split).count > 0 next end end diff --git a/lib/user_name_suggester.rb b/lib/user_name_suggester.rb index 2f7c7c920ab..ecd482b4900 100644 --- a/lib/user_name_suggester.rb +++ b/lib/user_name_suggester.rb @@ -115,7 +115,7 @@ module UserNameSuggester end name.gsub!(UsernameValidator.invalid_char_pattern, '_') - name = apply_whitelist(name) if UsernameValidator.char_whitelist_exists? + name = apply_allowlist(name) if UsernameValidator.char_allowlist_exists? name.gsub!(UsernameValidator::INVALID_LEADING_CHAR_PATTERN, '') name.gsub!(UsernameValidator::CONFUSING_EXTENSIONS, "_") name.gsub!(UsernameValidator::INVALID_TRAILING_CHAR_PATTERN, '') @@ -123,9 +123,9 @@ module UserNameSuggester name end - def self.apply_whitelist(name) + def self.apply_allowlist(name) name.grapheme_clusters - .map { |c| UsernameValidator.whitelisted_char?(c) ? c : '_' } + .map { |c| UsernameValidator.allowed_char?(c) ? c : '_' } .join end diff --git a/lib/validators/email_validator.rb b/lib/validators/email_validator.rb index 7090f2516b1..47200da2b9f 100644 --- a/lib/validators/email_validator.rb +++ b/lib/validators/email_validator.rb @@ -17,9 +17,9 @@ class EmailValidator < ActiveModel::EachValidator end def self.allowed?(email) - if (setting = SiteSetting.email_domains_whitelist).present? + if (setting = SiteSetting.allowed_email_domains).present? return email_in_restriction_setting?(setting, email) || is_developer?(email) - elsif (setting = SiteSetting.email_domains_blacklist).present? + elsif (setting = SiteSetting.blocked_email_domains).present? return !(email_in_restriction_setting?(setting, email) && !is_developer?(email)) end diff --git a/lib/validators/unicode_username_whitelist_validator.rb b/lib/validators/unicode_username_allowlist_validator.rb similarity index 59% rename from lib/validators/unicode_username_whitelist_validator.rb rename to lib/validators/unicode_username_allowlist_validator.rb index 21aabe6eee2..f47d37b92f5 100644 --- a/lib/validators/unicode_username_whitelist_validator.rb +++ b/lib/validators/unicode_username_allowlist_validator.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class UnicodeUsernameWhitelistValidator +class UnicodeUsernameAllowlistValidator def initialize(opts = {}) @opts = opts end @@ -10,12 +10,12 @@ class UnicodeUsernameWhitelistValidator return true if value.blank? if value.match?(/^\/.*\/[imxo]*$/) - @error_message = I18n.t("site_settings.errors.unicode_username_whitelist.leading_trailing_slash") + @error_message = I18n.t("site_settings.errors.allowed_unicode_usernames.leading_trailing_slash") else begin Regexp.new(value) rescue RegexpError => e - @error_message = I18n.t("site_settings.errors.unicode_username_whitelist.regex_invalid", error: e.message) + @error_message = I18n.t("site_settings.errors.allowed_unicode_usernames.regex_invalid", error: e.message) end end diff --git a/lib/validators/upload_validator.rb b/lib/validators/upload_validator.rb index deb49854bf6..4238a77ff97 100644 --- a/lib/validators/upload_validator.rb +++ b/lib/validators/upload_validator.rb @@ -12,9 +12,9 @@ class UploadValidator < ActiveModel::Validator return true if upload.user&.staff? end - # check the attachment blacklist + # check the attachment blocklist if upload.for_group_message && SiteSetting.allow_all_attachments_for_group_messages - return upload.original_filename =~ SiteSetting.attachment_filename_blacklist_regex + return upload.original_filename =~ SiteSetting.blocked_attachment_filenames_regex end extension = File.extname(upload.original_filename)[1..-1] || "" diff --git a/plugins/poll/plugin.rb b/plugins/poll/plugin.rb index ec4a7570a6d..8331b8fca63 100644 --- a/plugins/poll/plugin.rb +++ b/plugins/poll/plugin.rb @@ -562,7 +562,7 @@ after_initialize do register_post_custom_field_type(DiscoursePoll::HAS_POLLS, :boolean) - topic_view_post_custom_fields_whitelister { [DiscoursePoll::HAS_POLLS] } + topic_view_post_custom_fields_allowlister { [DiscoursePoll::HAS_POLLS] } add_to_class(:topic_view, :polls) do @polls ||= begin diff --git a/script/import_scripts/base.rb b/script/import_scripts/base.rb index 64de94ba75f..bc780e68869 100644 --- a/script/import_scripts/base.rb +++ b/script/import_scripts/base.rb @@ -70,7 +70,7 @@ class ImportScripts::Base def get_site_settings_for_import { - email_domains_blacklist: '', + blocked_email_domains: '', min_topic_title_length: 1, min_post_length: 1, min_first_post_length: 1, diff --git a/script/import_scripts/friendsmegplus.rb b/script/import_scripts/friendsmegplus.rb index 3eb76239515..ee22dd9cbca 100644 --- a/script/import_scripts/friendsmegplus.rb +++ b/script/import_scripts/friendsmegplus.rb @@ -68,12 +68,12 @@ class ImportScripts::FMGP < ImportScripts::Base @usermap = {} # G+ user IDs to filter out (spam, abuse) — no topics or posts, silence and suspend when creating - # loaded from blacklist.json as array of google ids `[ 92310293874, 12378491235293 ]` - @blacklist = Set[] + # loaded from blocklist.json as array of google ids `[ 92310293874, 12378491235293 ]` + @blocklist = Set[] # G+ user IDs whose posts are useful; if this is set, include only - # posts (and non-blacklisted comments) authored by these IDs - @whitelist = nil + # posts (and non-blocklisted comments) authored by these IDs + @allowlist = nil # Tags to apply to every topic; empty Array to not have any tags applied everywhere @globaltags = [ "gplus" ] @@ -117,10 +117,10 @@ class ImportScripts::FMGP < ImportScripts::Base @categories = load_fmgp_json(arg) elsif arg.end_with?("usermap.json") @usermap = load_fmgp_json(arg) - elsif arg.end_with?('blacklist.json') - @blacklist = load_fmgp_json(arg).map { |i| i.to_s }.to_set - elsif arg.end_with?('whitelist.json') - @whitelist = load_fmgp_json(arg).map { |i| i.to_s }.to_set + elsif arg.end_with?('blocklist.json') + @blocklist = load_fmgp_json(arg).map { |i| i.to_s }.to_set + elsif arg.end_with?('allowlist.json') + @allowlist = load_fmgp_json(arg).map { |i| i.to_s }.to_set elsif arg.end_with?('.json') @feeds << load_fmgp_json(arg) elsif arg == '--dry-run' @@ -149,8 +149,8 @@ class ImportScripts::FMGP < ImportScripts::Base @posts_imported = 0 @topics_skipped = 0 @posts_skipped = 0 - @topics_blacklisted = 0 - @posts_blacklisted = 0 + @blocked_topics = 0 + @blocked_posts = 0 # count uploaded file size @totalsize = 0 @@ -324,10 +324,10 @@ class ImportScripts::FMGP < ImportScripts::Base newuser.approved = true newuser.approved_by_id = @system_user.id newuser.approved_at = newuser.created_at - if @blacklist.include?(id.to_s) + if @blocklist.include?(id.to_s) now = DateTime.now forever = 1000.years.from_now - # you can suspend as well if you want your blacklist to + # you can suspend as well if you want your blocklist to # be hard to recover from #newuser.suspended_at = now #newuser.suspended_till = forever @@ -348,7 +348,7 @@ class ImportScripts::FMGP < ImportScripts::Base # user already on system u = User.find(google_user_info.user_id) if u.silenced? || u.suspended? - @blacklist.add(id) + @blocklist.add(id) end @users[id] = u email = u.email @@ -371,7 +371,7 @@ class ImportScripts::FMGP < ImportScripts::Base category["posts"].each do |post| # G+ post / Discourse topic import_topic(post, category) - print("\r#{@topics_imported}/#{@posts_imported} topics/posts (skipped: #{@topics_skipped}/#{@posts_skipped} blacklisted: #{@topics_blacklisted}/#{@posts_blacklisted}) ") + print("\r#{@topics_imported}/#{@posts_imported} topics/posts (skipped: #{@topics_skipped}/#{@posts_skipped} blocklisted: #{@blocked_topics}/#{@blocked_posts}) ") end end end @@ -389,13 +389,13 @@ class ImportScripts::FMGP < ImportScripts::Base @topics_skipped += 1 else # new post - if !@whitelist.nil? && !@whitelist.include?(post["author"]["id"]) - # only ignore non-whitelisted if whitelist defined + if !@allowlist.nil? && !@allowlist.include?(post["author"]["id"]) + # only ignore non-allowlisted if allowlist defined return end postmap = make_postmap(post, category, nil) if postmap.nil? - @topics_blacklisted += 1 + @blocked_topics += 1 return end p = create_post(postmap, postmap[:id]) if !@dryrun @@ -409,7 +409,7 @@ class ImportScripts::FMGP < ImportScripts::Base else commentmap = make_postmap(comment, nil, p) if commentmap.nil? - @posts_blacklisted += 1 + @blocked_posts += 1 else @posts_imported += 1 new_comment = create_post(commentmap, commentmap[:id]) if !@dryrun @@ -420,7 +420,7 @@ class ImportScripts::FMGP < ImportScripts::Base def make_postmap(post, category, parent) post_author_id = post["author"]["id"] - return nil if @blacklist.include?(post_author_id.to_s) + return nil if @blocklist.include?(post_author_id.to_s) raw = formatted_message(post) # if no message, image, or images, it's just empty diff --git a/script/import_scripts/smf1.rb b/script/import_scripts/smf1.rb index 99f068c5ed8..5f83eef6734 100644 --- a/script/import_scripts/smf1.rb +++ b/script/import_scripts/smf1.rb @@ -497,10 +497,10 @@ class ImportScripts::Smf1 < ImportScripts::Base def import_banned_domains puts "", "Importing banned email domains..." - blacklist = SiteSetting.email_domains_blacklist.split("|") + blocklist = SiteSetting.blocked_email_domains.split("|") banned_domains = mysql_query("SELECT SUBSTRING(email_address, 3) domain FROM smf_ban_items WHERE email_address RLIKE '^%@[^%]+$' GROUP BY email_address").map { |r| r["domain"] } - SiteSetting.email_domains_blacklist = (blacklist + banned_domains).uniq.sort.join("|") + SiteSetting.blocked_email_domains = (blocklist + banned_domains).uniq.sort.join("|") end def import_banned_emails diff --git a/spec/components/auth/github_authenticator_spec.rb b/spec/components/auth/github_authenticator_spec.rb index ae50424c904..b9a9f4788df 100644 --- a/spec/components/auth/github_authenticator_spec.rb +++ b/spec/components/auth/github_authenticator_spec.rb @@ -178,38 +178,38 @@ describe Auth::GithubAuthenticator do expect(result.email_valid).to eq(hash[:info][:email].present?) end - it 'will skip blacklisted domains for non existing users' do + it 'will skip blocklisted domains for non existing users' do hash = { extra: { all_emails: [{ - email: "not_allowed@blacklist.com", + email: "not_allowed@blocklist.com", primary: true, verified: true, }, { - email: "allowed@whitelist.com", + email: "allowed@allowlist.com", primary: false, verified: true, }] }, info: { - email: "not_allowed@blacklist.com", + email: "not_allowed@blocklist.com", nickname: "person", name: "Person Lastname", }, uid: "100" } - SiteSetting.email_domains_blacklist = "blacklist.com" + SiteSetting.blocked_email_domains = "blocklist.com" result = authenticator.after_authenticate(hash) expect(result.user).to eq(nil) expect(result.username).to eq(hash[:info][:nickname]) expect(result.name).to eq(hash[:info][:name]) - expect(result.email).to eq("allowed@whitelist.com") + expect(result.email).to eq("allowed@allowlist.com") expect(result.email_valid).to eq(true) end - it 'will find whitelisted domains for non existing users' do + it 'will find allowlisted domains for non existing users' do hash = { extra: { all_emails: [{ @@ -217,11 +217,11 @@ describe Auth::GithubAuthenticator do primary: true, verified: true, }, { - email: "not_allowed@blacklist.com", + email: "not_allowed@blocklist.com", primary: false, verified: true, }, { - email: "allowed@whitelist.com", + email: "allowed@allowlist.com", primary: false, verified: true, }] @@ -234,13 +234,13 @@ describe Auth::GithubAuthenticator do uid: "100" } - SiteSetting.email_domains_whitelist = "whitelist.com" + SiteSetting.allowed_email_domains = "allowlist.com" result = authenticator.after_authenticate(hash) expect(result.user).to eq(nil) expect(result.username).to eq(hash[:info][:nickname]) expect(result.name).to eq(hash[:info][:name]) - expect(result.email).to eq("allowed@whitelist.com") + expect(result.email).to eq("allowed@allowlist.com") expect(result.email_valid).to eq(true) end diff --git a/spec/components/concern/has_custom_fields_spec.rb b/spec/components/concern/has_custom_fields_spec.rb index 24ecefaca54..a567f3e8eda 100644 --- a/spec/components/concern/has_custom_fields_spec.rb +++ b/spec/components/concern/has_custom_fields_spec.rb @@ -235,7 +235,7 @@ describe HasCustomFields do it "supports bulk retrieval with a list of ids" do item1 = CustomFieldsTestItem.new - item1.custom_fields = { "a" => ["b", "c", "d"], 'not_whitelisted' => 'secret' } + item1.custom_fields = { "a" => ["b", "c", "d"], 'not_allowlisted' => 'secret' } item1.save item2 = CustomFieldsTestItem.new @@ -245,7 +245,7 @@ describe HasCustomFields do fields = CustomFieldsTestItem.custom_fields_for_ids([item1.id, item2.id], ['a', 'e']) expect(fields).to be_present expect(fields[item1.id]['a']).to match_array(['b', 'c', 'd']) - expect(fields[item1.id]['not_whitelisted']).to be_blank + expect(fields[item1.id]['not_allowlisted']).to be_blank expect(fields[item2.id]['e']).to eq('hallo') end diff --git a/spec/components/cooked_post_processor_spec.rb b/spec/components/cooked_post_processor_spec.rb index a4b9c2bc143..dc202453248 100644 --- a/spec/components/cooked_post_processor_spec.rb +++ b/spec/components/cooked_post_processor_spec.rb @@ -1600,7 +1600,7 @@ describe CookedPostProcessor do context "onebox" do before do Oneboxer.stubs(:onebox).with(anything, anything).returns(nil) - Oneboxer.stubs(:onebox).with('https://discourse.org', anything).returns("") + Oneboxer.stubs(:onebox).with('https://discourse.org', anything).returns("") end it "awards the badge for using an onebox" do diff --git a/spec/components/crawler_detection_spec.rb b/spec/components/crawler_detection_spec.rb index 1492d010fb5..c5f2a2056b9 100644 --- a/spec/components/crawler_detection_spec.rb +++ b/spec/components/crawler_detection_spec.rb @@ -70,13 +70,13 @@ describe CrawlerDetection do end describe 'allow_crawler?' do - it 'returns true if whitelist and blacklist are blank' do + it 'returns true if allowlist and blocklist are blank' do expect(CrawlerDetection.allow_crawler?('Googlebot/2.1 (+http://www.google.com/bot.html)')).to eq(true) end - context 'whitelist is set' do + context 'allowlist is set' do before do - SiteSetting.whitelisted_crawler_user_agents = 'Googlebot|Twitterbot' + SiteSetting.allowed_crawler_user_agents = 'Googlebot|Twitterbot' end it 'returns true for matching user agents' do @@ -91,20 +91,20 @@ describe CrawlerDetection do expect(CrawlerDetection.allow_crawler?('')).to eq(false) end - context 'and blacklist is set' do + context 'and blocklist is set' do before do - SiteSetting.blacklisted_crawler_user_agents = 'Googlebot-Image' + SiteSetting.blocked_crawler_user_agents = 'Googlebot-Image' end - it 'ignores the blacklist' do + it 'ignores the blocklist' do expect(CrawlerDetection.allow_crawler?('Googlebot-Image/1.0')).to eq(true) end end end - context 'blacklist is set' do + context 'blocklist is set' do before do - SiteSetting.blacklisted_crawler_user_agents = 'Googlebot|Twitterbot' + SiteSetting.blocked_crawler_user_agents = 'Googlebot|Twitterbot' end it 'returns true for crawlers that do not match' do @@ -122,47 +122,47 @@ describe CrawlerDetection do end describe 'is_blocked_crawler?' do - it 'is false if user agent is a crawler and no whitelist or blacklist is defined' do + it 'is false if user agent is a crawler and no allowlist or blocklist is defined' do expect(CrawlerDetection.is_blocked_crawler?('Twitterbot')).to eq(false) end - it 'is false if user agent is not a crawler and no whitelist or blacklist is defined' do + it 'is false if user agent is not a crawler and no allowlist or blocklist is defined' do expect(CrawlerDetection.is_blocked_crawler?('Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36')).to eq(false) end - it 'is true if user agent is a crawler and is not whitelisted' do - SiteSetting.whitelisted_crawler_user_agents = 'Googlebot' + it 'is true if user agent is a crawler and is not allowlisted' do + SiteSetting.allowed_crawler_user_agents = 'Googlebot' expect(CrawlerDetection.is_blocked_crawler?('Twitterbot')).to eq(true) end - it 'is false if user agent is not a crawler and there is a whitelist' do - SiteSetting.whitelisted_crawler_user_agents = 'Googlebot' + it 'is false if user agent is not a crawler and there is a allowlist' do + SiteSetting.allowed_crawler_user_agents = 'Googlebot' expect(CrawlerDetection.is_blocked_crawler?('Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36')).to eq(false) end - it 'is true if user agent is a crawler and is blacklisted' do - SiteSetting.blacklisted_crawler_user_agents = 'Twitterbot' + it 'is true if user agent is a crawler and is blocklisted' do + SiteSetting.blocked_crawler_user_agents = 'Twitterbot' expect(CrawlerDetection.is_blocked_crawler?('Twitterbot')).to eq(true) end - it 'is true if user agent is a crawler and is not blacklisted' do - SiteSetting.blacklisted_crawler_user_agents = 'Twitterbot' + it 'is true if user agent is a crawler and is not blocklisted' do + SiteSetting.blocked_crawler_user_agents = 'Twitterbot' expect(CrawlerDetection.is_blocked_crawler?('Googlebot')).to eq(false) end - it 'is false if user agent is not a crawler and blacklist is defined' do - SiteSetting.blacklisted_crawler_user_agents = 'Mozilla' + it 'is false if user agent is not a crawler and blocklist is defined' do + SiteSetting.blocked_crawler_user_agents = 'Mozilla' expect(CrawlerDetection.is_blocked_crawler?('Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36')).to eq(false) end - it 'is true if user agent is missing and whitelist is defined' do - SiteSetting.whitelisted_crawler_user_agents = 'Googlebot' + it 'is true if user agent is missing and allowlist is defined' do + SiteSetting.allowed_crawler_user_agents = 'Googlebot' expect(CrawlerDetection.is_blocked_crawler?('')).to eq(true) expect(CrawlerDetection.is_blocked_crawler?(nil)).to eq(true) end - it 'is false if user agent is missing and blacklist is defined' do - SiteSetting.blacklisted_crawler_user_agents = 'Googlebot' + it 'is false if user agent is missing and blocklist is defined' do + SiteSetting.blocked_crawler_user_agents = 'Googlebot' expect(CrawlerDetection.is_blocked_crawler?('')).to eq(false) expect(CrawlerDetection.is_blocked_crawler?(nil)).to eq(false) end diff --git a/spec/components/email/receiver_spec.rb b/spec/components/email/receiver_spec.rb index 44dae0fd8da..5cd9b9946cc 100644 --- a/spec/components/email/receiver_spec.rb +++ b/spec/components/email/receiver_spec.rb @@ -25,16 +25,16 @@ describe Email::Receiver do expect { process(:screened_email) }.to raise_error(Email::Receiver::ScreenedEmailError) end - it "raises EmailNotAllowed when email address is not on whitelist" do - SiteSetting.email_domains_whitelist = "example.com|bar.com" + it "raises EmailNotAllowed when email address is not on allowlist" do + SiteSetting.allowed_email_domains = "example.com|bar.com" Fabricate(:group, incoming_email: "some_group@bar.com") - expect { process(:blacklist_whitelist_email) }.to raise_error(Email::Receiver::EmailNotAllowed) + expect { process(:blocklist_allowlist_email) }.to raise_error(Email::Receiver::EmailNotAllowed) end - it "raises EmailNotAllowed when email address is on blacklist" do - SiteSetting.email_domains_blacklist = "email.com|mail.com" + it "raises EmailNotAllowed when email address is on blocklist" do + SiteSetting.blocked_email_domains = "email.com|mail.com" Fabricate(:group, incoming_email: "some_group@bar.com") - expect { process(:blacklist_whitelist_email) }.to raise_error(Email::Receiver::EmailNotAllowed) + expect { process(:blocklist_allowlist_email) }.to raise_error(Email::Receiver::EmailNotAllowed) end it "raises an UserNotFoundError when staged users are disabled" do @@ -419,9 +419,9 @@ describe Email::Receiver do expect { process(:invalid_from_2) }.to raise_error(Email::Receiver::NoSenderDetectedError) end - it "doesn't raise an AutoGeneratedEmailError when the mail is auto generated but is whitelisted" do - SiteSetting.auto_generated_whitelist = "foo@bar.com|discourse@bar.com" - expect { process(:auto_generated_whitelisted) }.to change { topic.posts.count } + it "doesn't raise an AutoGeneratedEmailError when the mail is auto generated but is allowlisted" do + SiteSetting.auto_generated_allowlist = "foo@bar.com|discourse@bar.com" + expect { process(:auto_generated_allowlisted) }.to change { topic.posts.count } end it "doesn't raise an AutoGeneratedEmailError when block_auto_generated_emails is disabled" do @@ -1211,41 +1211,41 @@ describe Email::Receiver do include_examples "does not create staged users", :unsubscribe_new_user, Email::Receiver::UnsubscribeNotAllowed end - context "when From email address is not on whitelist" do + context "when From email address is not on allowlist" do before do - SiteSetting.email_domains_whitelist = "example.com|bar.com" + SiteSetting.allowed_email_domains = "example.com|bar.com" Fabricate(:group, incoming_email: "some_group@bar.com") end - include_examples "does not create staged users", :blacklist_whitelist_email, Email::Receiver::EmailNotAllowed + include_examples "does not create staged users", :blocklist_allowlist_email, Email::Receiver::EmailNotAllowed end - context "when From email address is on blacklist" do + context "when From email address is on blocklist" do before do - SiteSetting.email_domains_blacklist = "email.com|mail.com" + SiteSetting.blocked_email_domains = "email.com|mail.com" Fabricate(:group, incoming_email: "some_group@bar.com") end - include_examples "does not create staged users", :blacklist_whitelist_email, Email::Receiver::EmailNotAllowed + include_examples "does not create staged users", :blocklist_allowlist_email, Email::Receiver::EmailNotAllowed end - context "blacklist and whitelist for To and Cc" do + context "blocklist and allowlist for To and Cc" do before do Fabricate(:group, incoming_email: "some_group@bar.com") end - it "does not create staged users for email addresses not on whitelist" do - SiteSetting.email_domains_whitelist = "mail.com|example.com" - process(:blacklist_whitelist_email) + it "does not create staged users for email addresses not on allowlist" do + SiteSetting.allowed_email_domains = "mail.com|example.com" + process(:blocklist_allowlist_email) expect(User.find_by_email("alice@foo.com")).to be_nil expect(User.find_by_email("bob@foo.com")).to be_nil expect(User.find_by_email("carol@example.com")).to be_present end - it "does not create staged users for email addresses on blacklist" do - SiteSetting.email_domains_blacklist = "email.com|foo.com" - process(:blacklist_whitelist_email) + it "does not create staged users for email addresses on blocklist" do + SiteSetting.blocked_email_domains = "email.com|foo.com" + process(:blocklist_allowlist_email) expect(User.find_by_email("alice@foo.com")).to be_nil expect(User.find_by_email("bob@foo.com")).to be_nil diff --git a/spec/components/final_destination_spec.rb b/spec/components/final_destination_spec.rb index 33f7bf19cb8..ff61289e8af 100644 --- a/spec/components/final_destination_spec.rb +++ b/spec/components/final_destination_spec.rb @@ -396,7 +396,7 @@ describe FinalDestination do end it "returns false for IPV6 via site settings" do - SiteSetting.blacklist_ip_blocks = '2001:abc:de::/48|2002:abc:de::/48' + SiteSetting.blocked_ip_blocks = '2001:abc:de::/48|2002:abc:de::/48' expect(fd('https://[2001:abc:de:01:0:3f0:6a65:c2bf]').is_dest_valid?).to eq(false) expect(fd('https://[2002:abc:de:01:0:3f0:6a65:c2bf]').is_dest_valid?).to eq(false) expect(fd('https://internal-ipv6.com').is_dest_valid?).to eq(false) @@ -404,7 +404,7 @@ describe FinalDestination do end it "ignores invalid ranges" do - SiteSetting.blacklist_ip_blocks = '2001:abc:de::/48|eviltrout' + SiteSetting.blocked_ip_blocks = '2001:abc:de::/48|eviltrout' expect(fd('https://[2001:abc:de:01:0:3f0:6a65:c2bf]').is_dest_valid?).to eq(false) end @@ -432,8 +432,8 @@ describe FinalDestination do expect(fd("https://cdn.example.com/some/asset").is_dest_valid?).to eq(true) end - it 'supports whitelisting via a site setting' do - SiteSetting.whitelist_internal_hosts = 'private-host.com' + it 'supports allowlisting via a site setting' do + SiteSetting.allowed_internal_hosts = 'private-host.com' expect(fd("https://private-host.com/some/url").is_dest_valid?).to eq(true) end end diff --git a/spec/components/guardian_spec.rb b/spec/components/guardian_spec.rb index 60dc6c9a0f4..59dd96aa900 100644 --- a/spec/components/guardian_spec.rb +++ b/spec/components/guardian_spec.rb @@ -51,8 +51,8 @@ describe Guardian do expect(Guardian.new(user).link_posting_access).to eq('none') end - it "is limited for a user of a low trust level with a whitelist" do - SiteSetting.whitelisted_link_domains = 'example.com' + it "is limited for a user of a low trust level with a allowlist" do + SiteSetting.allowed_link_domains = 'example.com' user.trust_level = 0 SiteSetting.min_trust_to_post_links = 1 expect(Guardian.new(user).link_posting_access).to eq('limited') @@ -78,9 +78,9 @@ describe Guardian do expect(Guardian.new(user).can_post_link?(host: host)).to eq(false) end - describe "whitelisted host" do + describe "allowlisted host" do before do - SiteSetting.whitelisted_link_domains = host + SiteSetting.allowed_link_domains = host end it "allows a new user to post the link to the host" do @@ -2931,17 +2931,17 @@ describe Guardian do let!(:theme) { Fabricate(:theme) } let!(:theme2) { Fabricate(:theme) } - context "whitelist mode" do + context "allowlist mode" do before do - GlobalSetting.reset_whitelisted_theme_ids! - global_setting :whitelisted_theme_repos, " https://magic.com/repo.git, https://x.com/git" + GlobalSetting.reset_allowed_theme_ids! + global_setting :allowed_theme_repos, " https://magic.com/repo.git, https://x.com/git" end after do - GlobalSetting.reset_whitelisted_theme_ids! + GlobalSetting.reset_allowed_theme_ids! end - it "should respect theme whitelisting" do + it "should respect theme allowlisting" do r = RemoteTheme.create!(remote_url: "https://magic.com/repo.git") theme.update!(remote_theme_id: r.id) diff --git a/spec/components/inline_oneboxer_spec.rb b/spec/components/inline_oneboxer_spec.rb index 47c5abd6bb5..d00c9822ccc 100644 --- a/spec/components/inline_oneboxer_spec.rb +++ b/spec/components/inline_oneboxer_spec.rb @@ -116,7 +116,7 @@ describe InlineOneboxer do expect(onebox[:title]).to eq("Hello 🍕 with an emoji") end - it "will not crawl domains that aren't whitelisted" do + it "will not crawl domains that aren't allowlisted" do onebox = InlineOneboxer.lookup("https://eviltrout.com", skip_cache: true) expect(onebox).to be_blank end @@ -153,8 +153,8 @@ describe InlineOneboxer do expect(onebox[:title]).to eq(nil) end - it "will lookup whitelisted domains" do - SiteSetting.inline_onebox_domains_whitelist = "eviltrout.com" + it "will lookup allowlisted domains" do + SiteSetting.allowed_inline_onebox_domains = "eviltrout.com" RetrieveTitle.stubs(:crawl).returns("Evil Trout's Blog") onebox = InlineOneboxer.lookup( diff --git a/spec/components/middleware/anonymous_cache_spec.rb b/spec/components/middleware/anonymous_cache_spec.rb index d6dcdb27a4f..3cb42ce8b48 100644 --- a/spec/components/middleware/anonymous_cache_spec.rb +++ b/spec/components/middleware/anonymous_cache_spec.rb @@ -215,8 +215,8 @@ describe Middleware::AnonymousCache::Helper do @status, @response_header, @response = middleware.call(@env) end - it "applies whitelisted_crawler_user_agents correctly" do - SiteSetting.whitelisted_crawler_user_agents = 'Googlebot' + it "applies allowed_crawler_user_agents correctly" do + SiteSetting.allowed_crawler_user_agents = 'Googlebot' get '/', headers: { 'HTTP_USER_AGENT' => 'Googlebot/2.1 (+http://www.google.com/bot.html)' @@ -236,7 +236,7 @@ describe Middleware::AnonymousCache::Helper do end it "doesn't block api requests" do - SiteSetting.whitelisted_crawler_user_agents = 'Googlebot' + SiteSetting.allowed_crawler_user_agents = 'Googlebot' api_key = Fabricate(:api_key) get "/latest?api_key=#{api_key.key}&api_username=system", headers: { @@ -245,8 +245,8 @@ describe Middleware::AnonymousCache::Helper do expect(@status).to eq(200) end - it "applies blacklisted_crawler_user_agents correctly" do - SiteSetting.blacklisted_crawler_user_agents = 'Googlebot' + it "applies blocked_crawler_user_agents correctly" do + SiteSetting.blocked_crawler_user_agents = 'Googlebot' get '/', headers: non_crawler expect(@status).to eq(200) @@ -265,7 +265,7 @@ describe Middleware::AnonymousCache::Helper do end it "should never block robots.txt" do - SiteSetting.blacklisted_crawler_user_agents = 'Googlebot' + SiteSetting.blocked_crawler_user_agents = 'Googlebot' get '/robots.txt', headers: { 'HTTP_USER_AGENT' => 'Googlebot/2.1 (+http://www.google.com/bot.html)' @@ -275,7 +275,7 @@ describe Middleware::AnonymousCache::Helper do end it "should never block srv/status" do - SiteSetting.blacklisted_crawler_user_agents = 'Googlebot' + SiteSetting.blocked_crawler_user_agents = 'Googlebot' get '/srv/status', headers: { 'HTTP_USER_AGENT' => 'Googlebot/2.1 (+http://www.google.com/bot.html)' @@ -285,7 +285,7 @@ describe Middleware::AnonymousCache::Helper do end it "blocked crawlers shouldn't log page views" do - SiteSetting.blacklisted_crawler_user_agents = 'Googlebot' + SiteSetting.blocked_crawler_user_agents = 'Googlebot' get '/', headers: { 'HTTP_USER_AGENT' => 'Googlebot/2.1 (+http://www.google.com/bot.html)' @@ -295,7 +295,7 @@ describe Middleware::AnonymousCache::Helper do end it "blocks json requests" do - SiteSetting.blacklisted_crawler_user_agents = 'Googlebot' + SiteSetting.blocked_crawler_user_agents = 'Googlebot' get '/srv/status.json', headers: { 'HTTP_USER_AGENT' => 'Googlebot/2.1 (+http://www.google.com/bot.html)' diff --git a/spec/components/middleware/request_tracker_spec.rb b/spec/components/middleware/request_tracker_spec.rb index 67efd8c975e..7b36e61f20f 100644 --- a/spec/components/middleware/request_tracker_spec.rb +++ b/spec/components/middleware/request_tracker_spec.rb @@ -343,7 +343,7 @@ describe Middleware::RequestTracker do tracker.call(env("REQUEST_URI" => uri, "ANON_CACHE_DURATION" => 60)) expect(@data[:cache]).to eq("true") - # not whitelisted + # not allowlisted request_params.delete("a") expect(@env["action_dispatch.request.parameters"]).to eq(request_params) diff --git a/spec/components/onebox/engine/allowlisted_generic_onebox_spec.rb b/spec/components/onebox/engine/allowlisted_generic_onebox_spec.rb new file mode 100644 index 00000000000..756ac1fa6f6 --- /dev/null +++ b/spec/components/onebox/engine/allowlisted_generic_onebox_spec.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +require 'rails_helper' +require 'oneboxer' + +describe Onebox::Engine::AllowlistedGenericOnebox do + + describe ".===" do + + it "matches any domain" do + expect(described_class === URI('http://foo.bar/resource')).to be(true) + end + + it "doesn't match an IP address" do + expect(described_class === URI('http://1.2.3.4/resource')).to be(false) + expect(described_class === URI('http://1.2.3.4:1234/resource')).to be(false) + end + + end + + it "allowlists iframes" do + allowlisted_body = '' + blocklisted_body = '' + + allowlisted_oembed = { + type: "rich", + height: "100", + html: "" + } + + blocklisted_oembed = { + type: "rich", + height: "100", + html: "" + } + + stub_request(:get, "https://blocklist.ed/iframes").to_return(status: 200, body: blocklisted_body) + stub_request(:get, "https://blocklist.ed/iframes.json").to_return(status: 200, body: blocklisted_oembed.to_json) + + stub_request(:get, "https://allowlist.ed/iframes").to_return(status: 200, body: allowlisted_body) + stub_request(:get, "https://allowlist.ed/iframes.json").to_return(status: 200, body: allowlisted_oembed.to_json) + + SiteSetting.allowed_iframes = "discourse.org|https://ifram.es" + + expect(Onebox.preview("https://blocklist.ed/iframes").to_s).to be_empty + expect(Onebox.preview("https://allowlist.ed/iframes").to_s).to match("iframe src") + end + +end diff --git a/spec/components/onebox/engine/whitelisted_generic_onebox_spec.rb b/spec/components/onebox/engine/whitelisted_generic_onebox_spec.rb deleted file mode 100644 index dac0062f128..00000000000 --- a/spec/components/onebox/engine/whitelisted_generic_onebox_spec.rb +++ /dev/null @@ -1,49 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' -require 'oneboxer' - -describe Onebox::Engine::WhitelistedGenericOnebox do - - describe ".===" do - - it "matches any domain" do - expect(described_class === URI('http://foo.bar/resource')).to be(true) - end - - it "doesn't match an IP address" do - expect(described_class === URI('http://1.2.3.4/resource')).to be(false) - expect(described_class === URI('http://1.2.3.4:1234/resource')).to be(false) - end - - end - - it "whitelists iframes" do - whitelisted_body = '' - blacklisted_body = '' - - whitelisted_oembed = { - type: "rich", - height: "100", - html: "" - } - - blacklisted_oembed = { - type: "rich", - height: "100", - html: "" - } - - stub_request(:get, "https://blacklist.ed/iframes").to_return(status: 200, body: blacklisted_body) - stub_request(:get, "https://blacklist.ed/iframes.json").to_return(status: 200, body: blacklisted_oembed.to_json) - - stub_request(:get, "https://whitelist.ed/iframes").to_return(status: 200, body: whitelisted_body) - stub_request(:get, "https://whitelist.ed/iframes.json").to_return(status: 200, body: whitelisted_oembed.to_json) - - SiteSetting.allowed_iframes = "discourse.org|https://ifram.es" - - expect(Onebox.preview("https://blacklist.ed/iframes").to_s).to be_empty - expect(Onebox.preview("https://whitelist.ed/iframes").to_s).to match("iframe src") - end - -end diff --git a/spec/components/oneboxer_spec.rb b/spec/components/oneboxer_spec.rb index f1681e5bc2b..17843e2a9d3 100644 --- a/spec/components/oneboxer_spec.rb +++ b/spec/components/oneboxer_spec.rb @@ -155,8 +155,8 @@ describe Oneboxer do end end - it "does not crawl blacklisted URLs" do - SiteSetting.onebox_domains_blacklist = "git.*.com|bitbucket.com" + it "does not crawl blocklisted URLs" do + SiteSetting.blocked_onebox_domains = "git.*.com|bitbucket.com" url = 'https://github.com/discourse/discourse/commit/21b562852885f883be43032e03c709241e8e6d4f' stub_request(:head, 'https://discourse.org/').to_return(status: 302, body: "", headers: { location: url }) @@ -164,7 +164,7 @@ describe Oneboxer do expect(Oneboxer.external_onebox('https://discourse.org/')[:onebox]).to be_empty end - it "does not consider ignore_redirects domains as blacklisted" do + it "does not consider ignore_redirects domains as blocklisted" do url = 'https://store.steampowered.com/app/271590/Grand_Theft_Auto_V/' stub_request(:head, url).to_return(status: 200, body: "", headers: {}) stub_request(:get, url).to_return(status: 200, body: "", headers: {}) diff --git a/spec/components/pretty_text_spec.rb b/spec/components/pretty_text_spec.rb index 823fb8900c2..073957026b7 100644 --- a/spec/components/pretty_text_spec.rb +++ b/spec/components/pretty_text_spec.rb @@ -762,7 +762,7 @@ describe PrettyText do context 'option to preserve onebox source' do it "should return the right excerpt" do - onebox = "\n\n\n" + onebox = "\n\n\n" expected = "meta.discourse.org" expect(PrettyText.excerpt(onebox, 100, keep_onebox_source: true)) @@ -1554,7 +1554,7 @@ HTML end - it "can properly whitelist iframes" do + it "can properly allowlist iframes" do SiteSetting.allowed_iframes = "https://bob.com/a|http://silly.com?EMBED=" raw = <<~IFRAMES @@ -1619,12 +1619,12 @@ HTML expect(cooked).to include("data-theme-a") end - it "whitelists lang attribute" do + it "allowlists lang attribute" do cooked = PrettyText.cook("

tester

tester
tester") expect(cooked).to eq("

tester

tester
tester") end - it "whitelists ruby tags" do + it "allowlists ruby tags" do # read all about ruby chars at: https://en.wikipedia.org/wiki/Ruby_character # basically it is super hard to remember every single rare letter when there are # so many, so ruby tags provide a hint. diff --git a/spec/components/site_setting_extension_spec.rb b/spec/components/site_setting_extension_spec.rb index ee856e144c0..a366db09571 100644 --- a/spec/components/site_setting_extension_spec.rb +++ b/spec/components/site_setting_extension_spec.rb @@ -595,18 +595,18 @@ describe SiteSettingExtension do describe "filter domain name" do before do - settings.setting(:white_listed_spam_host_domains, "www.example.com") + settings.setting(:allowed_spam_host_domains, "www.example.com") settings.refresh! end it "filters domain" do - settings.set("white_listed_spam_host_domains", "http://www.discourse.org/") - expect(settings.white_listed_spam_host_domains).to eq("www.discourse.org") + settings.set("allowed_spam_host_domains", "http://www.discourse.org/") + expect(settings.allowed_spam_host_domains).to eq("www.discourse.org") end it "returns invalid domain as is, without throwing exception" do - settings.set("white_listed_spam_host_domains", "test!url") - expect(settings.white_listed_spam_host_domains).to eq("test!url") + settings.set("allowed_spam_host_domains", "test!url") + expect(settings.allowed_spam_host_domains).to eq("test!url") end end diff --git a/spec/components/spam_handler_spec.rb b/spec/components/spam_handler_spec.rb index f4216854d2f..310c4a17929 100644 --- a/spec/components/spam_handler_spec.rb +++ b/spec/components/spam_handler_spec.rb @@ -48,11 +48,11 @@ describe SpamHandler do Fabricate(:user, ip_address: "42.42.42.42", trust_level: TrustLevel[0]) end - it "doesn't limit registrations when the IP is whitelisted" do + it "doesn't limit registrations when the IP is allowlisted" do # setup SiteSetting.max_new_accounts_per_registration_ip = 0 Fabricate(:user, ip_address: "42.42.42.42", trust_level: TrustLevel[0]) - ScreenedIpAddress.stubs(:is_whitelisted?).with("42.42.42.42").returns(true) + ScreenedIpAddress.stubs(:is_allowed?).with("42.42.42.42").returns(true) # should not limit registration SiteSetting.max_new_accounts_per_registration_ip = 1 diff --git a/spec/components/user_name_suggester_spec.rb b/spec/components/user_name_suggester_spec.rb index a7e9b19fab5..ed1673b66bf 100644 --- a/spec/components/user_name_suggester_spec.rb +++ b/spec/components/user_name_suggester_spec.rb @@ -171,14 +171,14 @@ describe UserNameSuggester do .to eq('য়া-য়া-য়া-য়া-য়া-য়া-য়া-য়া-য়া-য়া-য়া-য়া-য়া-য়া-য়া') end - it "uses whitelist" do - SiteSetting.unicode_username_character_whitelist = "[äöüßÄÖÜẞ]" + it "uses allowlist" do + SiteSetting.allowed_unicode_username_characters = "[äöüßÄÖÜẞ]" expect(UserNameSuggester.suggest('πουλί')).to eq('111') expect(UserNameSuggester.suggest('a鳥b')).to eq('a_b') expect(UserNameSuggester.suggest('Löwe')).to eq('Löwe') - SiteSetting.unicode_username_character_whitelist = "[য়া]" + SiteSetting.allowed_unicode_username_characters = "[য়া]" expect(UserNameSuggester.suggest('aয়াb鳥c')).to eq('aয়াb_c') end end diff --git a/spec/components/validators/email_validator_spec.rb b/spec/components/validators/email_validator_spec.rb index 41c29e1b511..0290c7c99c7 100644 --- a/spec/components/validators/email_validator_spec.rb +++ b/spec/components/validators/email_validator_spec.rb @@ -21,8 +21,8 @@ describe EmailValidator do expect(blocks?('SAM@sam.com')).to eq(true) end - it "blocks based on email_domains_blacklist" do - SiteSetting.email_domains_blacklist = "email.com|mail.com|e-mail.com" + it "blocks based on blocked_email_domains" do + SiteSetting.blocked_email_domains = "email.com|mail.com|e-mail.com" expect(blocks?('sam@email.com')).to eq(true) expect(blocks?('sam@EMAIL.com')).to eq(true) expect(blocks?('sam@bob.email.com')).to eq(true) @@ -30,8 +30,8 @@ describe EmailValidator do expect(blocks?('sam@googlemail.com')).to eq(false) end - it "blocks based on email_domains_whitelist" do - SiteSetting.email_domains_whitelist = "googlemail.com|email.com" + it "blocks based on allowed_email_domains" do + SiteSetting.allowed_email_domains = "googlemail.com|email.com" expect(blocks?('sam@email.com')).to eq(false) expect(blocks?('sam@EMAIL.com')).to eq(false) expect(blocks?('sam@bob.email.com')).to eq(false) @@ -49,8 +49,8 @@ describe EmailValidator do expect(EmailValidator.can_auto_approve_user?("foobar@example.com")).to eq(true) end - it "returns false if domain not present in email_domains_whitelist" do - SiteSetting.email_domains_whitelist = "googlemail.com" + it "returns false if domain not present in allowed_email_domains" do + SiteSetting.allowed_email_domains = "googlemail.com" SiteSetting.auto_approve_email_domains = "example.com|googlemail.com" expect(EmailValidator.can_auto_approve_user?("foobar@example.com")).to eq(false) diff --git a/spec/components/validators/unicode_username_whitelist_validator_spec.rb b/spec/components/validators/unicode_username_allowlist_validator_spec.rb similarity index 76% rename from spec/components/validators/unicode_username_whitelist_validator_spec.rb rename to spec/components/validators/unicode_username_allowlist_validator_spec.rb index 0deb2da8e9c..dff71443ff6 100644 --- a/spec/components/validators/unicode_username_whitelist_validator_spec.rb +++ b/spec/components/validators/unicode_username_allowlist_validator_spec.rb @@ -2,16 +2,16 @@ require 'rails_helper' -describe UnicodeUsernameWhitelistValidator do +describe UnicodeUsernameAllowlistValidator do subject { described_class.new } - it "allows an empty whitelist" do + it "allows an empty allowlist" do expect(subject.valid_value?("")).to eq(true) expect(subject.error_message).to be_blank end it "disallows leading and trailing slashes" do - expected_error = I18n.t("site_settings.errors.unicode_username_whitelist.leading_trailing_slash") + expected_error = I18n.t("site_settings.errors.allowed_unicode_usernames.leading_trailing_slash") expect(subject.valid_value?("/foo/")).to eq(false) expect(subject.error_message).to eq(expected_error) @@ -30,7 +30,7 @@ describe UnicodeUsernameWhitelistValidator do end it "detects invalid regular expressions" do - expected_error = I18n.t("site_settings.errors.unicode_username_whitelist.regex_invalid", error: "") + expected_error = I18n.t("site_settings.errors.allowed_unicode_usernames.regex_invalid", error: "") expect(subject.valid_value?("\\p{Foo}")).to eq(false) expect(subject.error_message).to start_with(expected_error) diff --git a/spec/fixtures/emails/auto_generated_whitelisted.eml b/spec/fixtures/emails/auto_generated_allowlisted.eml similarity index 100% rename from spec/fixtures/emails/auto_generated_whitelisted.eml rename to spec/fixtures/emails/auto_generated_allowlisted.eml diff --git a/spec/fixtures/emails/blacklist_whitelist_email.eml b/spec/fixtures/emails/blocklist_allowlist_email.eml similarity index 85% rename from spec/fixtures/emails/blacklist_whitelist_email.eml rename to spec/fixtures/emails/blocklist_allowlist_email.eml index f9b0adf7905..7ffe3674ac0 100644 --- a/spec/fixtures/emails/blacklist_whitelist_email.eml +++ b/spec/fixtures/emails/blocklist_allowlist_email.eml @@ -8,4 +8,4 @@ Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit -Email from a domain on blacklist or whitelist. +Email from a domain on blocklist or allowlist. diff --git a/spec/lib/content_security_policy_spec.rb b/spec/lib/content_security_policy_spec.rb index 4196b29d669..bad12dd2c31 100644 --- a/spec/lib/content_security_policy_spec.rb +++ b/spec/lib/content_security_policy_spec.rb @@ -66,7 +66,7 @@ describe ContentSecurityPolicy do expect(script_srcs).to include("'report-sample'") end - it 'whitelists Google Analytics and Tag Manager when integrated' do + it 'allowlists Google Analytics and Tag Manager when integrated' do SiteSetting.ga_universal_tracking_code = 'UA-12345678-9' SiteSetting.gtm_container_id = 'GTM-ABCDEF' @@ -75,7 +75,7 @@ describe ContentSecurityPolicy do expect(script_srcs).to include('https://www.googletagmanager.com/gtm.js') end - it 'whitelists CDN assets when integrated' do + it 'allowlists CDN assets when integrated' do set_cdn_url('https://cdn.com') script_srcs = parse(policy)['script-src'] diff --git a/spec/lib/upload_creator_spec.rb b/spec/lib/upload_creator_spec.rb index 91a431565cb..6ca63b7e3c6 100644 --- a/spec/lib/upload_creator_spec.rb +++ b/spec/lib/upload_creator_spec.rb @@ -402,7 +402,7 @@ RSpec.describe UploadCreator do end end - describe '#whitelist_svg!' do + describe '#clean_svg!' do let(:b64) do Base64.encode64('') end @@ -428,7 +428,7 @@ RSpec.describe UploadCreator do it 'removes event handlers' do begin - UploadCreator.new(file, 'file.svg').whitelist_svg! + UploadCreator.new(file, 'file.svg').clean_svg! file_content = file.read expect(file_content).not_to include('onload') expect(file_content).to include('#pathdef') diff --git a/spec/models/embeddable_host_spec.rb b/spec/models/embeddable_host_spec.rb index 66b81b9bd45..2a76688553c 100644 --- a/spec/models/embeddable_host_spec.rb +++ b/spec/models/embeddable_host_spec.rb @@ -96,37 +96,37 @@ describe EmbeddableHost do end end - describe "path_whitelist" do + describe "allowed_paths" do it "matches the path" do - Fabricate(:embeddable_host, path_whitelist: '^/fp/\d{4}/\d{2}/\d{2}/.*$') + Fabricate(:embeddable_host, allowed_paths: '^/fp/\d{4}/\d{2}/\d{2}/.*$') expect(EmbeddableHost.url_allowed?('http://eviltrout.com')).to eq(false) expect(EmbeddableHost.url_allowed?('http://eviltrout.com/fp/2016/08/25/test-page')).to eq(true) end it "respects query parameters" do - Fabricate(:embeddable_host, path_whitelist: '^/fp$') + Fabricate(:embeddable_host, allowed_paths: '^/fp$') expect(EmbeddableHost.url_allowed?('http://eviltrout.com/fp?test=1')).to eq(false) expect(EmbeddableHost.url_allowed?('http://eviltrout.com/fp')).to eq(true) end it "allows multiple records with different paths" do - Fabricate(:embeddable_host, path_whitelist: '/rick/.*') - Fabricate(:embeddable_host, path_whitelist: '/morty/.*') + Fabricate(:embeddable_host, allowed_paths: '/rick/.*') + Fabricate(:embeddable_host, allowed_paths: '/morty/.*') expect(EmbeddableHost.url_allowed?('http://eviltrout.com/rick/smith')).to eq(true) expect(EmbeddableHost.url_allowed?('http://eviltrout.com/morty/sanchez')).to eq(true) end it "works with non-english paths" do - Fabricate(:embeddable_host, path_whitelist: '/انگلیسی/.*') - Fabricate(:embeddable_host, path_whitelist: '/definição/.*') + Fabricate(:embeddable_host, allowed_paths: '/انگلیسی/.*') + Fabricate(:embeddable_host, allowed_paths: '/definição/.*') expect(EmbeddableHost.url_allowed?('http://eviltrout.com/انگلیسی/foo')).to eq(true) expect(EmbeddableHost.url_allowed?('http://eviltrout.com/definição/foo')).to eq(true) expect(EmbeddableHost.url_allowed?('http://eviltrout.com/bar/foo')).to eq(false) end it "works with URL encoded paths" do - Fabricate(:embeddable_host, path_whitelist: '/definição/.*') - Fabricate(:embeddable_host, path_whitelist: '/ingl%C3%A9s/.*') + Fabricate(:embeddable_host, allowed_paths: '/definição/.*') + Fabricate(:embeddable_host, allowed_paths: '/ingl%C3%A9s/.*') expect(EmbeddableHost.url_allowed?('http://eviltrout.com/defini%C3%A7%C3%A3o/foo')).to eq(true) expect(EmbeddableHost.url_allowed?('http://eviltrout.com/inglés/foo')).to eq(true) diff --git a/spec/models/invite_spec.rb b/spec/models/invite_spec.rb index 9bc3e33ff94..fc81d4d8d3f 100644 --- a/spec/models/invite_spec.rb +++ b/spec/models/invite_spec.rb @@ -33,12 +33,12 @@ describe Invite do expect(invite.errors.details[:email].first[:error]).to eq(I18n.t("user.email.invalid")) end - it "should not allow an invite with blacklisted email" do + it "should not allow an invite with blocklisted email" do invite = Invite.create(email: "test@mailinator.com", invited_by: coding_horror) expect(invite).not_to be_valid end - it "should allow an invite with non-blacklisted email" do + it "should allow an invite with non-blocklisted email" do invite = Fabricate(:invite, email: "test@mail.com", invited_by: coding_horror) expect(invite).to be_valid end diff --git a/spec/models/post_analyzer_spec.rb b/spec/models/post_analyzer_spec.rb index 70addd30cd2..f0dd58d814f 100644 --- a/spec/models/post_analyzer_spec.rb +++ b/spec/models/post_analyzer_spec.rb @@ -156,8 +156,8 @@ describe PostAnalyzer do expect(post_analyzer.image_count).to eq(0) end - it "doesn't count whitelisted images" do - Post.stubs(:white_listed_image_classes).returns(["classy"]) + it "doesn't count allowlisted images" do + Post.stubs(:allowed_image_classes).returns(["classy"]) PrettyText.stubs(:cook).returns(raw_post_with_two_classy_images) post_analyzer = PostAnalyzer.new(raw_post_with_two_classy_images, default_topic_id) expect(post_analyzer.image_count).to eq(0) diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index 24c89305dd1..559b1ff06e8 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -310,9 +310,9 @@ describe Post do expect(post_with_thumbnail.image_count).to eq(0) end - it "doesn't count whitelisted images" do - Post.stubs(:white_listed_image_classes).returns(["classy"]) - # I dislike this, but passing in a custom whitelist is hard + it "doesn't count allowlisted images" do + Post.stubs(:allowed_image_classes).returns(["classy"]) + # I dislike this, but passing in a custom allowlist is hard PrettyText.stubs(:cook).returns(post_with_two_classy_images.raw) expect(post_with_two_classy_images.image_count).to eq(0) end @@ -527,8 +527,8 @@ describe Post do expect(post_one_link).not_to be_valid end - it "will skip the check for whitelisted domains" do - SiteSetting.whitelisted_link_domains = 'www.bbc.co.uk' + it "will skip the check for allowlisted domains" do + SiteSetting.allowed_link_domains = 'www.bbc.co.uk' SiteSetting.min_trust_to_post_links = 2 post_two_links.user.trust_level = TrustLevel[1] expect(post_one_link).to be_valid @@ -1107,7 +1107,7 @@ describe Post do expect(post.has_host_spam?).to eq(true) - SiteSetting.white_listed_spam_host_domains = "bla.com|boo.com | example.net " + SiteSetting.allowed_spam_host_domains = "bla.com|boo.com | example.net " expect(post.has_host_spam?).to eq(false) end diff --git a/spec/models/screened_ip_address_spec.rb b/spec/models/screened_ip_address_spec.rb index 84876a122ff..5c069135fb5 100644 --- a/spec/models/screened_ip_address_spec.rb +++ b/spec/models/screened_ip_address_spec.rb @@ -212,37 +212,37 @@ describe ScreenedIpAddress do end end - describe '#is_whitelisted?' do + describe '#is_allowed?' do it 'returns false when record does not exist' do - expect(described_class.is_whitelisted?(ip_address)).to eq(false) + expect(described_class.is_allowed?(ip_address)).to eq(false) end it 'returns false when no record matches' do Fabricate(:screened_ip_address, ip_address: '111.234.23.11', action_type: described_class.actions[:do_nothing]) - expect(described_class.is_whitelisted?('222.12.12.12')).to eq(false) + expect(described_class.is_allowed?('222.12.12.12')).to eq(false) end context 'IPv4' do it 'returns true when when record matches and action is :do_nothing' do Fabricate(:screened_ip_address, ip_address: '111.234.23.11', action_type: described_class.actions[:do_nothing]) - expect(described_class.is_whitelisted?('111.234.23.11')).to eq(true) + expect(described_class.is_allowed?('111.234.23.11')).to eq(true) end it 'returns false when when record matches and action is :block' do Fabricate(:screened_ip_address, ip_address: '111.234.23.11', action_type: described_class.actions[:block]) - expect(described_class.is_whitelisted?('111.234.23.11')).to eq(false) + expect(described_class.is_allowed?('111.234.23.11')).to eq(false) end end context 'IPv6' do it 'returns true when when record matches and action is :do_nothing' do Fabricate(:screened_ip_address, ip_address: '2001:db8::ff00:42:8329', action_type: described_class.actions[:do_nothing]) - expect(described_class.is_whitelisted?('2001:db8::ff00:42:8329')).to eq(true) + expect(described_class.is_allowed?('2001:db8::ff00:42:8329')).to eq(true) end it 'returns false when when record matches and action is :block' do Fabricate(:screened_ip_address, ip_address: '2001:db8::ff00:42:8329', action_type: described_class.actions[:block]) - expect(described_class.is_whitelisted?('2001:db8::ff00:42:8329')).to eq(false) + expect(described_class.is_allowed?('2001:db8::ff00:42:8329')).to eq(false) end end end @@ -250,12 +250,12 @@ describe ScreenedIpAddress do describe '#block_admin_login?' do context 'no allow_admin records exist' do - it "returns false when use_admin_ip_whitelist is false" do + it "returns false when use_admin_ip_allowlist is false" do expect(described_class.block_admin_login?(Fabricate.build(:user), '123.12.12.12')).to eq(false) end - context "use_admin_ip_whitelist is true" do - before { SiteSetting.use_admin_ip_whitelist = true } + context "use_admin_ip_allowlist is true" do + before { SiteSetting.use_admin_ip_allowlist = true } it "returns false when user is nil" do expect(described_class.block_admin_login?(nil, '123.12.12.12')).to eq(false) @@ -281,12 +281,12 @@ describe ScreenedIpAddress do Fabricate(:screened_ip_address, ip_address: @permitted_ip_address, action_type: described_class.actions[:allow_admin]) end - it "returns false when use_admin_ip_whitelist is false" do + it "returns false when use_admin_ip_allowlist is false" do expect(described_class.block_admin_login?(Fabricate.build(:admin), '123.12.12.12')).to eq(false) end - context "use_admin_ip_whitelist is true" do - before { SiteSetting.use_admin_ip_whitelist = true } + context "use_admin_ip_allowlist is true" do + before { SiteSetting.use_admin_ip_allowlist = true } it "returns false when user is nil" do expect(described_class.block_admin_login?(nil, @permitted_ip_address)).to eq(false) diff --git a/spec/models/site_setting_spec.rb b/spec/models/site_setting_spec.rb index fc185415451..9b87678b3fd 100644 --- a/spec/models/site_setting_spec.rb +++ b/spec/models/site_setting_spec.rb @@ -197,11 +197,11 @@ describe SiteSetting do describe 'cached settings' do it 'should recalcualte cached setting when dependent settings are changed' do - SiteSetting.attachment_filename_blacklist = 'foo' - expect(SiteSetting.attachment_filename_blacklist_regex).to eq(/foo/) + SiteSetting.blocked_attachment_filenames = 'foo' + expect(SiteSetting.blocked_attachment_filenames_regex).to eq(/foo/) - SiteSetting.attachment_filename_blacklist = 'foo|bar' - expect(SiteSetting.attachment_filename_blacklist_regex).to eq(/foo|bar/) + SiteSetting.blocked_attachment_filenames = 'foo|bar' + expect(SiteSetting.blocked_attachment_filenames_regex).to eq(/foo|bar/) end end end diff --git a/spec/models/topic_embed_spec.rb b/spec/models/topic_embed_spec.rb index bc061ddcbe4..48df6ce768f 100644 --- a/spec/models/topic_embed_spec.rb +++ b/spec/models/topic_embed_spec.rb @@ -192,7 +192,7 @@ describe TopicEmbed do response = nil before do - SiteSetting.embed_classname_whitelist = 'emoji, foo' + SiteSetting.allowed_embed_classnames = 'emoji, foo' file.stubs(:read).returns contents TopicEmbed.stubs(:open).returns file stub_request(:head, url) @@ -252,7 +252,7 @@ describe TopicEmbed do response = nil before(:each) do - SiteSetting.embed_classname_whitelist = '' + SiteSetting.allowed_embed_classnames = '' file.stubs(:read).returns contents TopicEmbed.stubs(:open).returns file stub_request(:head, url) diff --git a/spec/models/topic_link_click_spec.rb b/spec/models/topic_link_click_spec.rb index 121bb872213..a4d6771db65 100644 --- a/spec/models/topic_link_click_spec.rb +++ b/spec/models/topic_link_click_spec.rb @@ -47,7 +47,7 @@ describe TopicLinkClick do click = TopicLinkClick.create_from(url: "http://url-that-doesnt-exist.com", post_id: @post.id, ip: '127.0.0.1') expect(click).to eq(nil) - # redirects if whitelisted + # redirects if allowlisted click = TopicLinkClick.create_from(url: "https://www.youtube.com/watch?v=jYd_5aggzd4", post_id: @post.id, ip: '127.0.0.1') expect(click).to eq("https://www.youtube.com/watch?v=jYd_5aggzd4") diff --git a/spec/models/user_profile_spec.rb b/spec/models/user_profile_spec.rb index eb1121342ee..65221592b0b 100644 --- a/spec/models/user_profile_spec.rb +++ b/spec/models/user_profile_spec.rb @@ -47,8 +47,8 @@ describe UserProfile do expect(user_profile).to_not be_valid end - it "validates website domain if user_website_domains_whitelist setting is present" do - SiteSetting.user_website_domains_whitelist = "discourse.org" + it "validates website domain if allowed_user_website_domains setting is present" do + SiteSetting.allowed_user_website_domains = "discourse.org" user_profile.website = "https://google.com" expect(user_profile).not_to be_valid @@ -58,7 +58,7 @@ describe UserProfile do end it "doesn't blow up with an invalid URI" do - SiteSetting.user_website_domains_whitelist = "discourse.org" + SiteSetting.allowed_user_website_domains = "discourse.org" user_profile.website = 'user - https://forum.example.com/user' expect { user_profile.save! }.to raise_error(ActiveRecord::RecordInvalid) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 313d3819900..fbaa52a4931 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -755,108 +755,108 @@ describe User do expect(user).to be_valid end - it 'should reject some emails based on the email_domains_blacklist site setting' do - SiteSetting.email_domains_blacklist = 'mailinator.com' + it 'should reject some emails based on the blocked_email_domains site setting' do + SiteSetting.blocked_email_domains = 'mailinator.com' expect(Fabricate.build(:user, email: 'notgood@mailinator.com')).not_to be_valid expect(Fabricate.build(:user, email: 'mailinator@gmail.com')).to be_valid end - it 'should reject some emails based on the email_domains_blacklist site setting' do - SiteSetting.email_domains_blacklist = 'mailinator.com|trashmail.net' + it 'should reject some emails based on the blocked_email_domains site setting' do + SiteSetting.blocked_email_domains = 'mailinator.com|trashmail.net' expect(Fabricate.build(:user, email: 'notgood@mailinator.com')).not_to be_valid expect(Fabricate.build(:user, email: 'notgood@trashmail.net')).not_to be_valid expect(Fabricate.build(:user, email: 'mailinator.com@gmail.com')).to be_valid end it 'should not reject partial matches' do - SiteSetting.email_domains_blacklist = 'mail.com' + SiteSetting.blocked_email_domains = 'mail.com' expect(Fabricate.build(:user, email: 'mailinator@gmail.com')).to be_valid end - it 'should reject some emails based on the email_domains_blacklist site setting ignoring case' do - SiteSetting.email_domains_blacklist = 'trashmail.net' + it 'should reject some emails based on the blocked_email_domains site setting ignoring case' do + SiteSetting.blocked_email_domains = 'trashmail.net' expect(Fabricate.build(:user, email: 'notgood@TRASHMAIL.NET')).not_to be_valid end - it 'should reject emails based on the email_domains_blacklist site setting matching subdomain' do - SiteSetting.email_domains_blacklist = 'domain.com' + it 'should reject emails based on the blocked_email_domains site setting matching subdomain' do + SiteSetting.blocked_email_domains = 'domain.com' expect(Fabricate.build(:user, email: 'notgood@sub.domain.com')).not_to be_valid end - it 'skips the blacklist if skip_email_validation is set' do - SiteSetting.email_domains_blacklist = 'domain.com' + it 'skips the blocklist if skip_email_validation is set' do + SiteSetting.blocked_email_domains = 'domain.com' user = Fabricate.build(:user, email: 'notgood@sub.domain.com') user.skip_email_validation = true expect(user).to be_valid end - it 'blacklist should not reject developer emails' do + it 'blocklist should not reject developer emails' do Rails.configuration.stubs(:developer_emails).returns('developer@discourse.org') - SiteSetting.email_domains_blacklist = 'discourse.org' + SiteSetting.blocked_email_domains = 'discourse.org' expect(Fabricate.build(:user, email: 'developer@discourse.org')).to be_valid end it 'should not interpret a period as a wildcard' do - SiteSetting.email_domains_blacklist = 'trashmail.net' + SiteSetting.blocked_email_domains = 'trashmail.net' expect(Fabricate.build(:user, email: 'good@trashmailinet.com')).to be_valid end it 'should not be used to validate existing records' do - u = Fabricate(:user, email: 'in_before_blacklisted@fakemail.com') - SiteSetting.email_domains_blacklist = 'fakemail.com' + u = Fabricate(:user, email: 'in_before_blocklisted@fakemail.com') + SiteSetting.blocked_email_domains = 'fakemail.com' expect(u).to be_valid end it 'should be used when email is being changed' do - SiteSetting.email_domains_blacklist = 'mailinator.com' + SiteSetting.blocked_email_domains = 'mailinator.com' u = Fabricate(:user, email: 'good@gmail.com') u.email = 'nope@mailinator.com' expect(u).not_to be_valid end - it 'whitelist should reject some emails based on the email_domains_whitelist site setting' do - SiteSetting.email_domains_whitelist = 'vaynermedia.com' + it 'allowlist should reject some emails based on the allowed_email_domains site setting' do + SiteSetting.allowed_email_domains = 'vaynermedia.com' user = Fabricate.build(:user, email: 'notgood@mailinator.com') expect(user).not_to be_valid expect(user.errors.messages[:primary_email]).to include(I18n.t('user.email.not_allowed')) expect(Fabricate.build(:user, email: 'sbauch@vaynermedia.com')).to be_valid end - it 'should reject some emails based on the email_domains_whitelist site setting when whitelisting multiple domains' do - SiteSetting.email_domains_whitelist = 'vaynermedia.com|gmail.com' + it 'should reject some emails based on the allowed_email_domains site setting when allowlisting multiple domains' do + SiteSetting.allowed_email_domains = 'vaynermedia.com|gmail.com' expect(Fabricate.build(:user, email: 'notgood@mailinator.com')).not_to be_valid expect(Fabricate.build(:user, email: 'notgood@trashmail.net')).not_to be_valid expect(Fabricate.build(:user, email: 'mailinator.com@gmail.com')).to be_valid expect(Fabricate.build(:user, email: 'mailinator.com@vaynermedia.com')).to be_valid end - it 'should accept some emails based on the email_domains_whitelist site setting ignoring case' do - SiteSetting.email_domains_whitelist = 'vaynermedia.com' + it 'should accept some emails based on the allowed_email_domains site setting ignoring case' do + SiteSetting.allowed_email_domains = 'vaynermedia.com' expect(Fabricate.build(:user, email: 'good@VAYNERMEDIA.COM')).to be_valid end - it 'whitelist should accept developer emails' do + it 'allowlist should accept developer emails' do Rails.configuration.stubs(:developer_emails).returns('developer@discourse.org') - SiteSetting.email_domains_whitelist = 'awesome.org' + SiteSetting.allowed_email_domains = 'awesome.org' expect(Fabricate.build(:user, email: 'developer@discourse.org')).to be_valid end - it 'email whitelist should not be used to validate existing records' do - u = Fabricate(:user, email: 'in_before_whitelisted@fakemail.com') - SiteSetting.email_domains_blacklist = 'vaynermedia.com' + it 'email allowlist should not be used to validate existing records' do + u = Fabricate(:user, email: 'in_before_allowlisted@fakemail.com') + SiteSetting.blocked_email_domains = 'vaynermedia.com' expect(u).to be_valid end - it 'email whitelist should be used when email is being changed' do - SiteSetting.email_domains_whitelist = 'vaynermedia.com' + it 'email allowlist should be used when email is being changed' do + SiteSetting.allowed_email_domains = 'vaynermedia.com' u = Fabricate(:user, email: 'good@vaynermedia.com') u.email = 'nope@mailinator.com' expect(u).not_to be_valid end it "doesn't validate email address for staged users" do - SiteSetting.email_domains_whitelist = "foo.com" - SiteSetting.email_domains_blacklist = "bar.com" + SiteSetting.allowed_email_domains = "foo.com" + SiteSetting.blocked_email_domains = "bar.com" user = Fabricate.build(:user, staged: true, email: "foo@bar.com") diff --git a/spec/models/username_validator_spec.rb b/spec/models/username_validator_spec.rb index eb45a229982..5bf51119969 100644 --- a/spec/models/username_validator_spec.rb +++ b/spec/models/username_validator_spec.rb @@ -178,27 +178,27 @@ describe UsernameValidator do expect_valid('தமிழ்') end - it 'allows all Unicode letters when the whitelist is empty' do + it 'allows all Unicode letters when the allowlist is empty' do expect_valid('鳥') end - context "with Unicode whitelist" do - before { SiteSetting.unicode_username_character_whitelist = "[äöüÄÖÜß]" } + context "with Unicode allowlist" do + before { SiteSetting.allowed_unicode_username_characters = "[äöüÄÖÜß]" } - it 'is invalid when username contains non-whitelisted letters' do + it 'is invalid when username contains non-allowlisted letters' do expect_invalid('鳥', 'francès', error_message: I18n.t(:'user.username.characters')) end - it 'is valid when username contains only whitelisted letters' do + it 'is valid when username contains only allowlisted letters' do expect_valid('Löwe', 'Ötzi') end - it 'is valid when username contains only ASCII letters and numbers regardless of whitelist' do + it 'is valid when username contains only ASCII letters and numbers regardless of allowlist' do expect_valid('a-z_A-Z.0-9') end it 'is valid after resetting the site setting' do - SiteSetting.unicode_username_character_whitelist = "" + SiteSetting.allowed_unicode_username_characters = "" expect_valid('鳥') end end diff --git a/spec/requests/admin/themes_controller_spec.rb b/spec/requests/admin/themes_controller_spec.rb index a7d42ce4f9b..1db8e6ce495 100644 --- a/spec/requests/admin/themes_controller_spec.rb +++ b/spec/requests/admin/themes_controller_spec.rb @@ -100,17 +100,17 @@ describe Admin::ThemesController do file_from_fixtures("logo.png") end - context 'when theme whitelist mode is enabled' do + context 'when theme allowlist mode is enabled' do before do - GlobalSetting.reset_whitelisted_theme_ids! - global_setting :whitelisted_theme_repos, "https://github.com/discourse/discourse-brand-header" + GlobalSetting.reset_allowed_theme_ids! + global_setting :allowed_theme_repos, "https://github.com/discourse/discourse-brand-header" end after do - GlobalSetting.reset_whitelisted_theme_ids! + GlobalSetting.reset_allowed_theme_ids! end - it "allows whitelisted imports" do + it "allows allowlisted imports" do RemoteTheme.stubs(:import_theme) post "/admin/themes/import.json", params: { remote: ' https://github.com/discourse/discourse-brand-header ' @@ -308,14 +308,14 @@ describe Admin::ThemesController do expect(SiteSetting.default_theme_id).to eq(-1) end - context 'when theme whitelist mode is enabled' do + context 'when theme allowlist mode is enabled' do before do - GlobalSetting.reset_whitelisted_theme_ids! - global_setting :whitelisted_theme_repos, " https://magic.com/repo.git, https://x.com/git" + GlobalSetting.reset_allowed_theme_ids! + global_setting :allowed_theme_repos, " https://magic.com/repo.git, https://x.com/git" end after do - GlobalSetting.reset_whitelisted_theme_ids! + GlobalSetting.reset_allowed_theme_ids! end it 'unconditionally bans theme_fields from updating' do diff --git a/spec/requests/posts_controller_spec.rb b/spec/requests/posts_controller_spec.rb index 6622b42acf6..f2d11f4de6c 100644 --- a/spec/requests/posts_controller_spec.rb +++ b/spec/requests/posts_controller_spec.rb @@ -125,7 +125,7 @@ describe PostsController do let(:url) { "/posts/#{post.id}/reply-history.json" } end - it "returns the replies with whitelisted user custom fields" do + it "returns the replies with allowlisted user custom fields" do parent = Fabricate(:post) child = Fabricate(:post, topic: parent.topic, reply_to_post_number: parent.post_number) diff --git a/spec/requests/reviewables_controller_spec.rb b/spec/requests/reviewables_controller_spec.rb index b8364592e6f..28a919b3094 100644 --- a/spec/requests/reviewables_controller_spec.rb +++ b/spec/requests/reviewables_controller_spec.rb @@ -196,7 +196,7 @@ describe ReviewablesController do context "with user custom field" do before do plugin = Plugin::Instance.new - plugin.whitelist_public_user_custom_field :public_field + plugin.allow_public_user_custom_field :public_field end after do diff --git a/spec/requests/robots_txt_controller_spec.rb b/spec/requests/robots_txt_controller_spec.rb index 151f9d60ba6..3fed57ccae6 100644 --- a/spec/requests/robots_txt_controller_spec.rb +++ b/spec/requests/robots_txt_controller_spec.rb @@ -93,8 +93,8 @@ RSpec.describe RobotsTxtController do expect(response.body[i..-1]).to include("Disallow: /auth/") end - it "can whitelist user agents" do - SiteSetting.whitelisted_crawler_user_agents = "Googlebot|Twitterbot" + it "can allowlist user agents" do + SiteSetting.allowed_crawler_user_agents = "Googlebot|Twitterbot" get '/robots.txt' expect(response.body).to include('User-agent: Googlebot') expect(response.body).to include('User-agent: Twitterbot') @@ -105,8 +105,8 @@ RSpec.describe RobotsTxtController do expect_allowed_and_disallowed_sections(allowed_index, disallow_all_index) end - it "can blacklist user agents" do - SiteSetting.blacklisted_crawler_user_agents = "Googlebot|Twitterbot" + it "can blocklist user agents" do + SiteSetting.blocked_crawler_user_agents = "Googlebot|Twitterbot" get '/robots.txt' expect(response.body).to include('User-agent: Googlebot') expect(response.body).to include('User-agent: Twitterbot') @@ -117,9 +117,9 @@ RSpec.describe RobotsTxtController do expect_allowed_and_disallowed_sections(allow_index, disallow_index) end - it "ignores blacklist if whitelist is set" do - SiteSetting.whitelisted_crawler_user_agents = "Googlebot|Twitterbot" - SiteSetting.blacklisted_crawler_user_agents = "Bananabot" + it "ignores blocklist if allowlist is set" do + SiteSetting.allowed_crawler_user_agents = "Googlebot|Twitterbot" + SiteSetting.blocked_crawler_user_agents = "Bananabot" get '/robots.txt' expect(response.body).to_not include('Bananabot') expect(response.body).to include('User-agent: Googlebot') diff --git a/spec/requests/session_controller_spec.rb b/spec/requests/session_controller_spec.rb index dd44d52970e..a4542c0cc5a 100644 --- a/spec/requests/session_controller_spec.rb +++ b/spec/requests/session_controller_spec.rb @@ -212,7 +212,7 @@ RSpec.describe SessionController do action_type: ScreenedIpAddress.actions[:allow_admin] ) - SiteSetting.use_admin_ip_whitelist = true + SiteSetting.use_admin_ip_allowlist = true user.update!(admin: true) end @@ -1614,7 +1614,7 @@ RSpec.describe SessionController do context 'when admins are restricted by ip address' do before do - SiteSetting.use_admin_ip_whitelist = true + SiteSetting.use_admin_ip_allowlist = true ScreenedIpAddress.all.destroy_all end diff --git a/spec/requests/topics_controller_spec.rb b/spec/requests/topics_controller_spec.rb index b71d3bbbabe..83c0ae9e006 100644 --- a/spec/requests/topics_controller_spec.rb +++ b/spec/requests/topics_controller_spec.rb @@ -679,7 +679,7 @@ RSpec.describe TopicsController do expect(response.status).to eq(400) end - it 'raises an error with a status not in the whitelist' do + it 'raises an error with a status not in the allowlist' do put "/t/#{topic.id}/status.json", params: { status: 'title', enabled: 'true' } diff --git a/spec/requests/users_controller_spec.rb b/spec/requests/users_controller_spec.rb index 629c8f2f55e..77c8b404734 100644 --- a/spec/requests/users_controller_spec.rb +++ b/spec/requests/users_controller_spec.rb @@ -2982,9 +2982,9 @@ describe UsersController do expect(response.status).to eq(422) end - it "raises an error when the email is blacklisted" do + it "raises an error when the email is blocklisted" do post_user - SiteSetting.email_domains_blacklist = 'example.com' + SiteSetting.blocked_email_domains = 'example.com' put "/u/update-activation-email.json", params: { email: 'test@example.com' } expect(response.status).to eq(422) end diff --git a/spec/requests/users_email_controller_spec.rb b/spec/requests/users_email_controller_spec.rb index 06cc9ced98c..936a9a93fec 100644 --- a/spec/requests/users_email_controller_spec.rb +++ b/spec/requests/users_email_controller_spec.rb @@ -371,8 +371,8 @@ describe UsersEmailController do end end - it 'raises an error when new email domain is present in email_domains_blacklist site setting' do - SiteSetting.email_domains_blacklist = "mailinator.com" + it 'raises an error when new email domain is present in blocked_email_domains site setting' do + SiteSetting.blocked_email_domains = "mailinator.com" put "/u/#{user.username}/preferences/email.json", params: { email: "not_good@mailinator.com" @@ -381,8 +381,8 @@ describe UsersEmailController do expect(response).to_not be_successful end - it 'raises an error when new email domain is not present in email_domains_whitelist site setting' do - SiteSetting.email_domains_whitelist = "discourse.org" + it 'raises an error when new email domain is not present in allowed_email_domains site setting' do + SiteSetting.allowed_email_domains = "discourse.org" put "/u/#{user.username}/preferences/email.json", params: { email: new_email diff --git a/spec/serializers/user_serializer_spec.rb b/spec/serializers/user_serializer_spec.rb index 197adb9f9e7..42a1e1b725d 100644 --- a/spec/serializers/user_serializer_spec.rb +++ b/spec/serializers/user_serializer_spec.rb @@ -259,7 +259,7 @@ describe UserSerializer do context "with user custom field" do before do plugin = Plugin::Instance.new - plugin.whitelist_public_user_custom_field :public_field + plugin.allow_public_user_custom_field :public_field end after do diff --git a/spec/services/anonymous_shadow_creator_spec.rb b/spec/services/anonymous_shadow_creator_spec.rb index cb5fcb4abd7..cca0fe66975 100644 --- a/spec/services/anonymous_shadow_creator_spec.rb +++ b/spec/services/anonymous_shadow_creator_spec.rb @@ -73,8 +73,8 @@ describe AnonymousShadowCreator do expect { AnonymousShadowCreator.get(user) }.to_not raise_error end - it "works when there is an email whitelist" do - SiteSetting.email_domains_whitelist = "wayne.com" + it "works when there is an email allowlist" do + SiteSetting.allowed_email_domains = "wayne.com" expect { AnonymousShadowCreator.get(user) }.to_not raise_error end diff --git a/spec/services/flag_sockpuppets_spec.rb b/spec/services/flag_sockpuppets_spec.rb index cebb398a215..4483416350f 100644 --- a/spec/services/flag_sockpuppets_spec.rb +++ b/spec/services/flag_sockpuppets_spec.rb @@ -50,8 +50,8 @@ describe SpamRule::FlagSockpuppets do expect(described_class.new(post2).reply_is_from_sockpuppet?).to eq(true) end - it 'is false if the ip address is whitelisted' do - ScreenedIpAddress.stubs(:is_whitelisted?).with(user1.ip_address).returns(true) + it 'is false if the ip address is allowlisted' do + ScreenedIpAddress.stubs(:is_allowed?).with(user1.ip_address).returns(true) post2 = Fabricate(:post, user: Fabricate(:user, ip_address: user1.ip_address), topic: post1.topic) expect(described_class.new(post2).reply_is_from_sockpuppet?).to eq(false) end diff --git a/spec/services/user_anonymizer_spec.rb b/spec/services/user_anonymizer_spec.rb index da61af7b222..71d0d2f3360 100644 --- a/spec/services/user_anonymizer_spec.rb +++ b/spec/services/user_anonymizer_spec.rb @@ -39,8 +39,8 @@ describe UserAnonymizer do expect(user.reload.email).to eq("#{user.username}@anonymized.invalid") end - it "changes the primary email address when there is an email domain whitelist" do - SiteSetting.email_domains_whitelist = 'example.net|wayne.com|discourse.org' + it "changes the primary email address when there is an email domain allowlist" do + SiteSetting.allowed_email_domains = 'example.net|wayne.com|discourse.org' make_anonymous expect(user.reload.email).to eq("#{user.username}@anonymized.invalid") diff --git a/spec/services/user_merger_spec.rb b/spec/services/user_merger_spec.rb index f8f66c99b8b..b7a8aef5071 100644 --- a/spec/services/user_merger_spec.rb +++ b/spec/services/user_merger_spec.rb @@ -991,7 +991,7 @@ describe UserMerger do end it "works even when email domains are restricted" do - SiteSetting.email_domains_whitelist = "example.com|work.com" + SiteSetting.allowed_email_domains = "example.com|work.com" source_user.update_attribute(:admin, true) expect(User.find_by_username(source_user.username)).to be_present diff --git a/test/javascripts/controllers/history-test.js b/test/javascripts/controllers/history-test.js index 0d8788239dc..6767e810234 100644 --- a/test/javascripts/controllers/history-test.js +++ b/test/javascripts/controllers/history-test.js @@ -40,7 +40,7 @@ QUnit.test("displayEdit", async function(assert) { const html = `

" width="276" height="183">

-