123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- # 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])
- 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 @email_domain_block.save
- log_action :create, @email_domain_block
- if @email_domain_block.with_dns_records?
- hostnames = []
- ips = []
- Resolv::DNS.open do |dns|
- dns.timeouts = 1
- hostnames = dns.getresources(@email_domain_block.domain, Resolv::DNS::Resource::IN::MX).to_a.map { |e| e.exchange.to_s }
- ([@email_domain_block.domain] + hostnames).uniq.each do |hostname|
- ips.concat(dns.getresources(hostname, Resolv::DNS::Resource::IN::A).to_a.map { |e| e.address.to_s })
- ips.concat(dns.getresources(hostname, Resolv::DNS::Resource::IN::AAAA).to_a.map { |e| e.address.to_s })
- end
- end
- (hostnames + ips).each do |hostname|
- another_email_domain_block = EmailDomainBlock.new(domain: hostname, parent: @email_domain_block)
- log_action :create, another_email_domain_block if another_email_domain_block.save
- end
- end
- redirect_to admin_email_domain_blocks_path, notice: I18n.t('admin.email_domain_blocks.created_msg')
- else
- render :new
- end
- end
- def destroy
- authorize @email_domain_block, :destroy?
- @email_domain_block.destroy!
- log_action :destroy, @email_domain_block
- redirect_to admin_email_domain_blocks_path, notice: I18n.t('admin.email_domain_blocks.destroyed_msg')
- end
- private
- def set_email_domain_block
- @email_domain_block = EmailDomainBlock.find(params[:id])
- end
- def resource_params
- params.require(:email_domain_block).permit(:domain, :with_dns_records)
- end
- end
- end
|