You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.2 KiB
69 lines
2.2 KiB
# 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 = 5 |
|
|
|
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
|
|
|