diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb index 2150ab2e6..e5e5dfb66 100644 --- a/app/controllers/admin/accounts_controller.rb +++ b/app/controllers/admin/accounts_controller.rb @@ -4,7 +4,8 @@ module Admin def index @q = Account.includes(:registrar).ransack(params[:q]) - @accounts = @q.result.page(params[:page]) + @result = @q.result + @accounts = @result.page(params[:page]) @accounts = @accounts.per(params[:results_per_page]) if paginate? render_by_format('admin/accounts/index', 'accounts') diff --git a/app/controllers/admin/auctions_controller.rb b/app/controllers/admin/auctions_controller.rb index 645b9e0ee..8f5bb458c 100644 --- a/app/controllers/admin/auctions_controller.rb +++ b/app/controllers/admin/auctions_controller.rb @@ -15,7 +15,8 @@ module Admin normalize_search_parameters do @q = @auctions.ransack(PartialSearchFormatter.format(params[:q])) - @auctions = @q.result.page(params[:page]) + @result = @q.result + @auctions = @result.page(params[:page]) end @auctions = @auctions.per(params[:results_per_page_auction]) if params[:results_per_page_auction].to_i.positive? diff --git a/app/controllers/admin/base_controller.rb b/app/controllers/admin/base_controller.rb index 56806ba3e..88afec72d 100644 --- a/app/controllers/admin/base_controller.rb +++ b/app/controllers/admin/base_controller.rb @@ -26,7 +26,7 @@ module Admin respond_to do |format| format.html { render page } format.csv do - raw_csv = CsvGenerator.generate_csv(@q.result) + raw_csv = CsvGenerator.generate_csv(@result) send_data raw_csv, filename: "#{filename}_#{Time.zone.now.to_formatted_s(:number)}.csv", type: "#{Mime[:csv]}; charset=utf-8" diff --git a/app/controllers/admin/blocked_domains_controller.rb b/app/controllers/admin/blocked_domains_controller.rb index c039c5de1..cecd2d95e 100644 --- a/app/controllers/admin/blocked_domains_controller.rb +++ b/app/controllers/admin/blocked_domains_controller.rb @@ -6,7 +6,8 @@ module Admin params[:q] ||= {} domains = BlockedDomain.all.order(:name) @q = domains.ransack(PartialSearchFormatter.format(params[:q])) - @domains = @q.result.page(params[:page]) + @result = @q.result + @domains = @result.page(params[:page]) @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? render_by_format('admin/blocked_domains/index', 'blocked_domains') diff --git a/app/controllers/admin/contact_versions_controller.rb b/app/controllers/admin/contact_versions_controller.rb index 43d43d5e8..eb53ec379 100644 --- a/app/controllers/admin/contact_versions_controller.rb +++ b/app/controllers/admin/contact_versions_controller.rb @@ -10,8 +10,8 @@ module Admin search_params = PartialSearchFormatter.format(fix_date_params) versions = Version::ContactVersion.includes(:item).order(created_at: :desc, id: :desc) @q = versions.ransack(polymorphic_association(search_params)) - - @versions = @q.result.page(params[:page]) + @result = @q.result + @versions = @result.page(params[:page]) @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? render_by_format('admin/contact_versions/index', 'contact_history') @@ -24,7 +24,7 @@ module Admin @versions_map = @versions.all.map(&:id) # what we do is calc amount of results until needed version - # then we cacl which page it is + # then we calc which page it is if params[:page].blank? counter = @versions_map.index(@version.id) + 1 page = counter / per_page diff --git a/app/controllers/admin/contacts_controller.rb b/app/controllers/admin/contacts_controller.rb index 73ead7b25..de5397360 100644 --- a/app/controllers/admin/contacts_controller.rb +++ b/app/controllers/admin/contacts_controller.rb @@ -19,7 +19,8 @@ module Admin normalize_search_parameters do @q = contacts.ransack(PartialSearchFormatter.format(search_params)) - @contacts = @q.result.distinct.page(params[:page]) + @result = @q.result.distinct + @contacts = @result.page(params[:page]) end @contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? diff --git a/app/controllers/admin/disputes_controller.rb b/app/controllers/admin/disputes_controller.rb index cb2ac6608..b2eea2784 100644 --- a/app/controllers/admin/disputes_controller.rb +++ b/app/controllers/admin/disputes_controller.rb @@ -57,7 +57,8 @@ module Admin def sortable_dispute_query_for(disputes, query, closed: false) @q = disputes.order(:domain_name).ransack(query) - disputes = @q.result.page(closed ? params[:closed_page] : params[:page]) + @result = @q.result + disputes = @result.page(closed ? params[:closed_page] : params[:page]) return disputes.per(params[:results_per_page]) if params[:results_per_page].present? disputes diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb index cfe00b580..eb976ecb7 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -47,8 +47,8 @@ module Admin versions = Version::DomainVersion.includes(:item).where(where_s).order(created_at: :desc, id: :desc) @q = versions.ransack(fix_date_params) - - @versions = @q.result.page(params[:page]) + @result = @q.result + @versions = @result.page(params[:page]) @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? render_by_format('admin/domain_versions/archive', 'domain_history') diff --git a/app/controllers/admin/domains_controller.rb b/app/controllers/admin/domains_controller.rb index 0b3a8b785..58a482dc6 100644 --- a/app/controllers/admin/domains_controller.rb +++ b/app/controllers/admin/domains_controller.rb @@ -8,35 +8,21 @@ module Admin # rubocop:disable Metrics/MethodLength def index params[:q] ||= {} - domains = if params[:statuses_contains] - Domain.includes(:registrar, :registrant).where( - "domains.statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}" - ) - else - Domain.includes(:registrar, :registrant) - end + domains = Domain.includes(:registrar, :registrant).joins(:registrar, :registrant) + p = params[:statuses_contains] + domains = domains.where('domains.statuses @> ?::varchar[]', "{#{p.join(',')}}") if p.present? normalize_search_parameters do @q = domains.ransack(PartialSearchFormatter.format(params[:q])) - @domains = @q.result.page(params[:page]) + @result = @q.result.distinct + @domains = @result.page(params[:page]) end @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? render_by_format('admin/domains/index', 'domains') end - # rubocop:enable Metrics/MethodLength - def show - # Validation is needed to warn users - @domain.validate - end - - def edit - build_associations - end - - # rubocop:disable Metrics/MethodLength def update rollback_history = @domain.json_statuses_history&.[]('admin_store_statuses_history') dp = ignore_empty_statuses @@ -56,6 +42,15 @@ module Admin end # rubocop:enable Metrics/MethodLength + def show + # Validation is needed to warn users + @domain.validate + end + + def edit + build_associations + end + def versions @domain = Domain.where(id: params[:domain_id]).includes({ versions: :item }).first @versions = @domain.versions diff --git a/app/controllers/admin/epp_logs_controller.rb b/app/controllers/admin/epp_logs_controller.rb index 021c90379..ec23d0fc3 100644 --- a/app/controllers/admin/epp_logs_controller.rb +++ b/app/controllers/admin/epp_logs_controller.rb @@ -6,9 +6,10 @@ module Admin # rubocop:disable Metrics/MethodLength def index @q = ApiLog::EppLog.ransack(PartialSearchFormatter.format(params[:q])) + @result = @q.result @q.sorts = 'id desc' if @q.sorts.empty? - @epp_logs = @q.result + @epp_logs = @result if params[:q][:created_at_gteq].present? @epp_logs = @epp_logs.where("extract(epoch from created_at) >= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_gteq])) diff --git a/app/controllers/admin/invoices_controller.rb b/app/controllers/admin/invoices_controller.rb index a4ba97310..46889d3d4 100644 --- a/app/controllers/admin/invoices_controller.rb +++ b/app/controllers/admin/invoices_controller.rb @@ -39,7 +39,8 @@ module Admin @q = invoices.ransack(params[:q]) @q.sorts = 'number desc' if @q.sorts.empty? - @invoices = @q.result.page(params[:page]) + @result = @q.result + @invoices = @result.page(params[:page]) @invoices = @invoices.per(params[:results_per_page]) if paginate? render_by_format('admin/invoices/index', 'invoices') diff --git a/app/controllers/admin/repp_logs_controller.rb b/app/controllers/admin/repp_logs_controller.rb index abb8415bc..6b0c7efa4 100644 --- a/app/controllers/admin/repp_logs_controller.rb +++ b/app/controllers/admin/repp_logs_controller.rb @@ -7,8 +7,8 @@ module Admin def index @q = ApiLog::ReppLog.ransack(PartialSearchFormatter.format(params[:q])) @q.sorts = 'id desc' if @q.sorts.empty? - - @repp_logs = @q.result + @result = @q.result + @repp_logs = @result if params[:q][:created_at_gteq].present? @repp_logs = @repp_logs.where("extract(epoch from created_at) >= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_gteq])) diff --git a/app/controllers/admin/reserved_domains_controller.rb b/app/controllers/admin/reserved_domains_controller.rb index 20957dec4..93188ecc4 100644 --- a/app/controllers/admin/reserved_domains_controller.rb +++ b/app/controllers/admin/reserved_domains_controller.rb @@ -7,7 +7,8 @@ module Admin params[:q] ||= {} domains = ReservedDomain.all.order(:name) @q = domains.ransack(PartialSearchFormatter.format(params[:q])) - @domains = @q.result.page(params[:page]) + @result = @q.result + @domains = @result.page(params[:page]) @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? render_by_format('admin/reserved_domains/index', 'reserved_domains') diff --git a/app/models/account.rb b/app/models/account.rb index 69dabe550..2463f6939 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -16,12 +16,12 @@ class Account < ApplicationRecord [id, balance, currency, registrar] end - def self.ransackable_associations(auth_object = nil) - super + def self.ransackable_associations(*) + authorizable_ransackable_associations end - def self.ransackable_attributes(auth_object = nil) - super + def self.ransackable_attributes(*) + authorizable_ransackable_attributes end def self.csv_header diff --git a/app/models/account_activity.rb b/app/models/account_activity.rb index 03af640aa..de6ad44d0 100644 --- a/app/models/account_activity.rb +++ b/app/models/account_activity.rb @@ -25,12 +25,12 @@ class AccountActivity < ApplicationRecord end class << self - def ransackable_attributes(auth_object = nil) - super + def ransackable_associations(*) + authorizable_ransackable_associations end - def ransackable_associations(auth_object = nil) - super + def ransackable_attributes(*) + authorizable_ransackable_attributes end def types_for_select diff --git a/app/models/api_log/db.rb b/app/models/api_log/db.rb index c6da66558..a2f330832 100644 --- a/app/models/api_log/db.rb +++ b/app/models/api_log/db.rb @@ -5,12 +5,12 @@ module ApiLog # for a configuration lookup is deprecated establish_connection "api_log_#{Rails.env}".to_sym - def self.ransackable_associations(auth_object = nil) - super + def self.ransackable_associations(*) + authorizable_ransackable_associations end - def self.ransackable_attributes(auth_object = nil) - super + def self.ransackable_attributes(*) + authorizable_ransackable_attributes end end end diff --git a/app/models/auction.rb b/app/models/auction.rb index f02938d97..b79572f79 100644 --- a/app/models/auction.rb +++ b/app/models/auction.rb @@ -33,12 +33,12 @@ class Auction < ApplicationRecord where('domain ilike ?', "%#{domain_name.strip}%") if domain_name.present? } - def self.ransackable_attributes(auth_object = nil) - super + def self.ransackable_associations(*) + authorizable_ransackable_associations end - def self.ransackable_associations(auth_object = nil) - super + def self.ransackable_attributes(*) + authorizable_ransackable_attributes end def self.pending(domain_name) diff --git a/app/models/bank_statement.rb b/app/models/bank_statement.rb index ae058734e..4396ea9fb 100644 --- a/app/models/bank_statement.rb +++ b/app/models/bank_statement.rb @@ -10,8 +10,8 @@ class BankStatement < ApplicationRecord PARTIALLY_BINDED = 'partially_binded'.freeze NOT_BINDED = 'not_binded'.freeze - def self.ransackable_attributes(auth_object = nil) - super + def self.ransackable_attributes(*) + authorizable_ransackable_attributes end # TODO: Cache this to database so it can be used for searching diff --git a/app/models/bank_transaction.rb b/app/models/bank_transaction.rb index d7159804b..5ba1a31b3 100644 --- a/app/models/bank_transaction.rb +++ b/app/models/bank_transaction.rb @@ -8,12 +8,12 @@ class BankTransaction < ApplicationRecord # rubocop:disable Metrics/ClassLength where('id NOT IN (SELECT bank_transaction_id FROM account_activities where bank_transaction_id IS NOT NULL)') } - def self.ransackable_associations(auth_object = nil) - super + def self.ransackable_associations(*) + authorizable_ransackable_associations end - def self.ransackable_attributes(auth_object = nil) - super + def self.ransackable_attributes(*) + authorizable_ransackable_attributes end def binded? diff --git a/app/models/billing/price.rb b/app/models/billing/price.rb index 0dd7487ba..26dae2c2e 100644 --- a/app/models/billing/price.rb +++ b/app/models/billing/price.rb @@ -21,8 +21,8 @@ module Billing new_record? || duration_changed? end - def self.ransackable_attributes(auth_object = nil) - super + def self.ransackable_attributes(*) + authorizable_ransackable_attributes end def self.operation_categories diff --git a/app/models/blocked_domain.rb b/app/models/blocked_domain.rb index 6887ab23d..403befed9 100644 --- a/app/models/blocked_domain.rb +++ b/app/models/blocked_domain.rb @@ -6,12 +6,12 @@ class BlockedDomain < ApplicationRecord validates :name, domain_name: true, uniqueness: true class << self - def ransackable_attributes(auth_object = nil) - super + def ransackable_associations(*) + authorizable_ransackable_associations end - def ransackable_associations(auth_object = nil) - super + def ransackable_attributes(*) + authorizable_ransackable_attributes end def by_domain(name) diff --git a/app/models/contact.rb b/app/models/contact.rb index 2ab986aee..a3e6ab1f2 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -183,12 +183,12 @@ class Contact < ApplicationRecord # class << self - def ransackable_associations(auth_object = nil) - super + def ransackable_associations(*) + authorizable_ransackable_associations end - def ransackable_attributes(auth_object = nil) - super + def ransackable_attributes(*) + authorizable_ransackable_attributes end def search_by_query(query) diff --git a/app/models/dispute.rb b/app/models/dispute.rb index e6a814a15..12cecd012 100644 --- a/app/models/dispute.rb +++ b/app/models/dispute.rb @@ -21,12 +21,12 @@ class Dispute < ApplicationRecord # rubocop:disable Metrics/ClassLength Domain.find_by(name: domain_name) end - def self.ransackable_associations(auth_object = nil) - super + def self.ransackable_associations(*) + authorizable_ransackable_associations end - def self.ransackable_attributes(auth_object = nil) - super + def self.ransackable_attributes(*) + authorizable_ransackable_attributes end def self.close_by_domain(domain_name) diff --git a/app/models/domain.rb b/app/models/domain.rb index df9f10d22..b58bdb7d8 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -154,30 +154,30 @@ class Domain < ApplicationRecord validates :nameservers, domain_nameserver: { min: -> { Setting.ns_min_count }, - max: -> { Setting.ns_max_count } + max: -> { Setting.ns_max_count }, } validates :dnskeys, object_count: { min: -> { Setting.dnskeys_min_count }, - max: -> { Setting.dnskeys_max_count } + max: -> { Setting.dnskeys_max_count }, } validates :admin_domain_contacts, object_count: { min: -> { Setting.admin_contacts_min_count }, - max: -> { Setting.admin_contacts_max_count } + max: -> { Setting.admin_contacts_max_count }, } validates :tech_domain_contacts, object_count: { min: -> { Setting.tech_contacts_min_count }, - max: -> { Setting.tech_contacts_max_count } + max: -> { Setting.tech_contacts_max_count }, } validates :nameservers, uniqueness_multi: { - attribute: 'hostname' + attribute: 'hostname', } validates :dnskeys, uniqueness_multi: { - attribute: 'public_key' + attribute: 'public_key', } validate :validate_nameserver_ips @@ -225,7 +225,7 @@ class Domain < ApplicationRecord end def delegated_nameservers - nameservers.select { |x| !x.hostname.end_with?(name) } + nameservers.reject { |x| x.hostname.end_with?(name) } end def extension_update_prohibited? @@ -245,12 +245,12 @@ class Domain < ApplicationRecord end class << self - def ransackable_associations(auth_object = nil) - super + def ransackable_associations(*) + authorizable_ransackable_associations end - def ransackable_attributes(auth_object = nil) - super + def ransackable_attributes(*) + authorizable_ransackable_attributes end def nameserver_required? @@ -604,17 +604,17 @@ class Domain < ApplicationRecord # check for deleted status statuses.each do |s| - unless update.include? s - case s - when DomainStatus::PENDING_DELETE - self.delete_date = nil - when DomainStatus::SERVER_MANUAL_INZONE # removal causes server hold to set - self.outzone_at = Time.zone.now if force_delete_scheduled? - when DomainStatus::EXPIRED # removal causes server hold to set - self.outzone_at = expire_time + 15.day - when DomainStatus::SERVER_HOLD # removal causes server hold to set - self.outzone_at = nil - end + next if update.include? s + + case s + when DomainStatus::PENDING_DELETE + self.delete_date = nil + when DomainStatus::SERVER_MANUAL_INZONE # removal causes server hold to set + self.outzone_at = Time.zone.now if force_delete_scheduled? + when DomainStatus::EXPIRED # removal causes server hold to set + self.outzone_at = expire_time + 15.day + when DomainStatus::SERVER_HOLD # removal causes server hold to set + self.outzone_at = nil end end end @@ -626,7 +626,7 @@ class Domain < ApplicationRecord def set_pending_update if pending_update_prohibited? logger.info "DOMAIN STATUS UPDATE ISSUE ##{id}: PENDING_UPDATE not allowed to set. [#{statuses}]" - return nil + return end statuses << DomainStatus::PENDING_UPDATE end @@ -655,7 +655,7 @@ class Domain < ApplicationRecord def set_pending_delete if pending_delete_prohibited? logger.info "DOMAIN STATUS UPDATE ISSUE ##{id}: PENDING_DELETE not allowed to set. [#{statuses}]" - return nil + return end statuses << DomainStatus::PENDING_DELETE end @@ -755,12 +755,17 @@ class Domain < ApplicationRecord def as_csv_row [ name, - registrant_name, + registrant_info[0], + registrant_info[1], + registrant_info[2], + registrant_info[3], valid_to.to_formatted_s(:db), registrar, created_at.to_formatted_s(:db), statuses, - contacts.pluck(:code), + admin_contacts.map { |c| "#{c.name}, #{c.code}, #{ApplicationController.helpers.ident_for(c)}" }, + tech_contacts.map { |c| "#{c.name}, #{c.code}, #{ApplicationController.helpers.ident_for(c)}" }, + nameservers.pluck(:hostname), force_delete_date, force_delete_data, ] @@ -772,21 +777,31 @@ class Domain < ApplicationRecord generator.to_pdf end - def registrant_name - return registrant.name if registrant + def registrant_info + if registrant + return [registrant.name, registrant.ident, registrant.ident_country_code, + registrant.ident_type] + end ver = Version::ContactVersion.where(item_id: registrant_id).last contact = Contact.all_versions_for([registrant_id], created_at).first contact = ObjectVersionsParser.new(ver).parse if contact.nil? && ver - contact.try(:name) || 'Deleted' + [contact.try(:name), contact.try(:ident), contact.try(:ident_country_code), + contact.try(:ident_type)] || ['Deleted'] + end + + def registrant_ident_info + return ApplicationController.helpers.ident_for(registrant) if registrant end def self.csv_header [ - 'Domain', 'Registrant', 'Valid to', 'Registrar', 'Created at', - 'Statuses', 'Contacts code', 'Force delete date', 'Force delete data' + 'Domain', 'Registrant name', 'Registrant ident', 'Registrant ident country code', + 'Registrant ident type', 'Valid to', 'Registrar', 'Created at', + 'Statuses', 'Admin. contacts', 'Tech. contacts', 'Nameservers', 'Force delete date', + 'Force delete data' ] end @@ -808,7 +823,7 @@ class Domain < ApplicationRecord end def self.uses_zone?(zone) - exists?(["name ILIKE ?", "%.#{zone.origin}"]) + exists?(['name ILIKE ?', "%.#{zone.origin}"]) end def self.swap_elements(array, indexes) diff --git a/app/models/invoice.rb b/app/models/invoice.rb index 623b7f873..2aacd65e1 100644 --- a/app/models/invoice.rb +++ b/app/models/invoice.rb @@ -144,12 +144,12 @@ class Invoice < ApplicationRecord ] end - def self.ransackable_associations(auth_object = nil) - super + def self.ransackable_associations(*) + authorizable_ransackable_associations end - def self.ransackable_attributes(auth_object = nil) - super + def self.ransackable_attributes(*) + authorizable_ransackable_attributes end def self.csv_header diff --git a/app/models/nameserver.rb b/app/models/nameserver.rb index ababd84cf..e091b8436 100644 --- a/app/models/nameserver.rb +++ b/app/models/nameserver.rb @@ -86,6 +86,10 @@ class Nameserver < ApplicationRecord def hostnames pluck(:hostname) end + + def ransackable_attributes(*) + authorizable_ransackable_attributes + end end private diff --git a/app/models/registrar.rb b/app/models/registrar.rb index cc97f11e1..8e0f030ce 100644 --- a/app/models/registrar.rb +++ b/app/models/registrar.rb @@ -51,6 +51,14 @@ class Registrar < ApplicationRecord # rubocop:disable Metrics/ClassLength self.ignored_columns = %w[legacy_id] class << self + def ransackable_associations(*) + authorizable_ransackable_associations + end + + def ransackable_attributes(*) + authorizable_ransackable_attributes + end + def ordered order(name: :asc) end diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb index e02569466..98ac0d46c 100644 --- a/app/models/reserved_domain.rb +++ b/app/models/reserved_domain.rb @@ -13,12 +13,12 @@ class ReservedDomain < ApplicationRecord self.ignored_columns = %w[legacy_id] class << self - def ransackable_attributes(auth_object = nil) - super + def ransackable_associations(*) + authorizable_ransackable_associations end - def ransackable_associations(auth_object = nil) - super + def ransackable_attributes(*) + authorizable_ransackable_attributes end def pw_for(domain_name) diff --git a/app/models/version/contact_version.rb b/app/models/version/contact_version.rb index b286bc08d..73f2281aa 100644 --- a/app/models/version/contact_version.rb +++ b/app/models/version/contact_version.rb @@ -17,12 +17,12 @@ class Version::ContactVersion < PaperTrail::Version ] end - def self.ransackable_attributes(auth_object = nil) - super + def self.ransackable_associations(*) + authorizable_ransackable_associations end - def self.ransackable_associations(auth_object = nil) - super + def self.ransackable_attributes(*) + authorizable_ransackable_attributes end def self.csv_header diff --git a/app/models/version/domain_version.rb b/app/models/version/domain_version.rb index 85724050a..6f246538c 100644 --- a/app/models/version/domain_version.rb +++ b/app/models/version/domain_version.rb @@ -11,19 +11,19 @@ class Version::DomainVersion < PaperTrail::Version [ domain.name, - domain.registrant_name, + domain.registrant_info[0], domain.registrar, event, - created_at.to_formatted_s(:db) + created_at.to_formatted_s(:db), ] end - def self.ransackable_attributes(auth_object = nil) - super + def self.ransackable_associations(*) + authorizable_ransackable_associations end - def self.ransackable_associations(auth_object = nil) - super + def self.ransackable_attributes(*) + authorizable_ransackable_attributes end def self.was_contact_linked?(contact_id) diff --git a/app/services/partial_search_formatter.rb b/app/services/partial_search_formatter.rb index 268cd75fb..aa783dc81 100644 --- a/app/services/partial_search_formatter.rb +++ b/app/services/partial_search_formatter.rb @@ -3,11 +3,23 @@ class PartialSearchFormatter search_params = params.deep_dup search_params.each do |key, value| - next unless key.include?('matches') && value.present? + next unless should_format?(key, value) - search_params[key] = "%#{value}%" + search_params[key] = format_value(value) end search_params end + + def self.should_format?(key, value) + key.include?('matches') && value.present? + end + + def self.format_value(value) + if value =~ /\A\*.*\*\z/ + value.gsub(/\A\*|\*\z/, '') + else + "%#{value}%" + end + end end diff --git a/app/validators/domain_name_validator.rb b/app/validators/domain_name_validator.rb index 3372bb952..5ca4e93a7 100644 --- a/app/validators/domain_name_validator.rb +++ b/app/validators/domain_name_validator.rb @@ -3,7 +3,7 @@ class DomainNameValidator < ActiveModel::EachValidator # rubocop:disable Metrics/LineLength def validate_each(record, attribute, value) if !self.class.validate_format(value) - record.errors[attribute] << (options[:message] || record.errors.generate_message(attribute, :invalid)) + record.errors.add(attribute, options[:message] || record.errors.generate_message(attribute, :invalid)) elsif !self.class.validate_blocked(value) record.errors.add(:base, :domain_name_blocked) end @@ -12,6 +12,7 @@ class DomainNameValidator < ActiveModel::EachValidator class << self def validate_format(value) return true unless value + value = value.mb_chars.downcase.strip origins = DNS::Zone.origins @@ -25,6 +26,7 @@ class DomainNameValidator < ActiveModel::EachValidator if value[2] == '-' && value[3] == '-' regexp = /\Axn--[a-zA-Z0-9-]{0,59}\.#{general_domains}\z/ return false unless value.match?(regexp) + value = SimpleIDN.to_unicode(value).mb_chars.downcase.strip end diff --git a/app/views/admin/domains/_domain.html.erb b/app/views/admin/domains/_domain.html.erb index 8b69f9010..73f46a9ed 100644 --- a/app/views/admin/domains/_domain.html.erb +++ b/app/views/admin/domains/_domain.html.erb @@ -1,5 +1,5 @@