# frozen_string_literal: true module Admin class EmailDomainBlocksController < BaseController before_action :set_email_domain_block, only: [:show, :destroy] def index authorize :email_domain_block, :index? @email_domain_blocks = EmailDomainBlock.where(parent_id: nil).includes(:children).order(id: :desc).page(params[:page]) @form = Form::EmailDomainBlockBatch.new end def batch @form = Form::EmailDomainBlockBatch.new(form_email_domain_block_batch_params.merge(current_account: current_account, action: action_from_button)) @form.save rescue ActionController::ParameterMissing flash[:alert] = I18n.t('admin.email_domain_blocks.no_email_domain_block_selected') rescue Mastodon::NotPermittedError flash[:alert] = I18n.t('admin.custom_emojis.not_permitted') ensure redirect_to admin_email_domain_blocks_path end def new authorize :email_domain_block, :create? @email_domain_block = EmailDomainBlock.new(domain: params[:_domain]) end def create authorize :email_domain_block, :create? @email_domain_block = EmailDomainBlock.new(resource_params) if action_from_button == 'save' EmailDomainBlock.transaction do @email_domain_block.save! log_action :create, @email_domain_block (@email_domain_block.other_domains || []).uniq.each do |domain| next if EmailDomainBlock.where(domain: domain).exists? other_email_domain_block = EmailDomainBlock.create!(domain: domain, parent: @email_domain_block) log_action :create, other_email_domain_block end end redirect_to admin_email_domain_blocks_path, notice: I18n.t('admin.email_domain_blocks.created_msg') else set_resolved_records render :new end rescue ActiveRecord::RecordInvalid set_resolved_records render :new end private def set_email_domain_block @email_domain_block = EmailDomainBlock.find(params[:id]) end def set_resolved_records Resolv::DNS.open do |dns| dns.timeouts = 5 @resolved_records = dns.getresources(@email_domain_block.domain, Resolv::DNS::Resource::IN::MX).to_a end end def resource_params params.require(:email_domain_block).permit(:domain, other_domains: []) end def form_email_domain_block_batch_params params.require(:form_email_domain_block_batch).permit(email_domain_block_ids: []) end def action_from_button if params[:delete] 'delete' elsif params[:save] 'save' end end end end