1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- # frozen_string_literal: true
- class Api::V1::Peers::SearchController < Api::BaseController
- before_action :require_enabled_api!
- before_action :set_domains
- skip_before_action :require_authenticated_user!, unless: :limited_federation_mode?
- skip_around_action :set_locale
- vary_by ''
- def index
- cache_even_if_authenticated!
- render json: @domains
- end
- private
- def require_enabled_api!
- head 404 unless Setting.peers_api_enabled && !limited_federation_mode?
- end
- def set_domains
- return if params[:q].blank?
- if Chewy.enabled?
- @domains = InstancesIndex.query(function_score: {
- query: {
- prefix: {
- domain: TagManager.instance.normalize_domain(params[:q].strip),
- },
- },
- field_value_factor: {
- field: 'accounts_count',
- modifier: 'log2p',
- },
- }).limit(10).pluck(:domain)
- else
- domain = params[:q].strip
- domain = TagManager.instance.normalize_domain(domain)
- @domains = Instance.searchable.where(Instance.arel_table[:domain].matches("#{Instance.sanitize_sql_like(domain)}%", false, true)).limit(10).pluck(:domain)
- end
- rescue Addressable::URI::InvalidURIError
- @domains = []
- end
- end
|