Merge branch 'master' into glitch-soc/merge-upstream
Conflicts: - app/controllers/directories_controller.rb - package.json - yarn.lock
This commit is contained in:
33
app/models/domain_allow.rb
Normal file
33
app/models/domain_allow.rb
Normal file
@@ -0,0 +1,33 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: domain_allows
|
||||
#
|
||||
# id :bigint(8) not null, primary key
|
||||
# domain :string default(""), not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
|
||||
class DomainAllow < ApplicationRecord
|
||||
include DomainNormalizable
|
||||
|
||||
validates :domain, presence: true, uniqueness: true
|
||||
|
||||
scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) }
|
||||
|
||||
class << self
|
||||
def allowed?(domain)
|
||||
!rule_for(domain).nil?
|
||||
end
|
||||
|
||||
def rule_for(domain)
|
||||
return if domain.blank?
|
||||
|
||||
uri = Addressable::URI.new.tap { |u| u.host = domain.gsub(/[\/]/, '') }
|
||||
|
||||
find_by(domain: uri.normalized_host)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -7,8 +7,9 @@ class Instance
|
||||
|
||||
def initialize(resource)
|
||||
@domain = resource.domain
|
||||
@accounts_count = resource.is_a?(DomainBlock) ? nil : resource.accounts_count
|
||||
@accounts_count = resource.respond_to?(:accounts_count) ? resource.accounts_count : nil
|
||||
@domain_block = resource.is_a?(DomainBlock) ? resource : DomainBlock.rule_for(domain)
|
||||
@domain_allow = resource.is_a?(DomainAllow) ? resource : DomainAllow.rule_for(domain)
|
||||
end
|
||||
|
||||
def countable?
|
||||
|
||||
@@ -12,6 +12,10 @@ class InstanceFilter
|
||||
scope = DomainBlock
|
||||
scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present?
|
||||
scope.order(id: :desc)
|
||||
elsif params[:allowed].present?
|
||||
scope = DomainAllow
|
||||
scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present?
|
||||
scope.order(id: :desc)
|
||||
else
|
||||
scope = Account.remote
|
||||
scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present?
|
||||
|
||||
@@ -65,7 +65,7 @@ class Tag < ApplicationRecord
|
||||
|
||||
class << self
|
||||
def find_or_create_by_names(name_or_names)
|
||||
Array(name_or_names).map(&method(:normalize)).uniq.map do |normalized_name|
|
||||
Array(name_or_names).map(&method(:normalize)).uniq { |str| str.mb_chars.downcase.to_s }.map do |normalized_name|
|
||||
tag = matching_name(normalized_name).first || create(name: normalized_name)
|
||||
|
||||
yield tag if block_given?
|
||||
@@ -77,7 +77,7 @@ class Tag < ApplicationRecord
|
||||
def search_for(term, limit = 5, offset = 0)
|
||||
pattern = sanitize_sql_like(normalize(term.strip)) + '%'
|
||||
|
||||
Tag.where(arel_table[:name].lower.matches(pattern.downcase))
|
||||
Tag.where(arel_table[:name].lower.matches(pattern.mb_chars.downcase.to_s))
|
||||
.order(:name)
|
||||
.limit(limit)
|
||||
.offset(offset)
|
||||
@@ -92,7 +92,7 @@ class Tag < ApplicationRecord
|
||||
end
|
||||
|
||||
def matching_name(name_or_names)
|
||||
names = Array(name_or_names).map { |name| normalize(name).downcase }
|
||||
names = Array(name_or_names).map { |name| normalize(name).mb_chars.downcase.to_s }
|
||||
|
||||
if names.size == 1
|
||||
where(arel_table[:name].lower.eq(names.first))
|
||||
@@ -104,7 +104,7 @@ class Tag < ApplicationRecord
|
||||
private
|
||||
|
||||
def normalize(str)
|
||||
str.gsub(/\A#/, '').mb_chars.to_s
|
||||
str.gsub(/\A#/, '')
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user