Skip to content
Extraits de code Groupes Projets
email_domain_blocks_controller.rb 2,23 ko
Newer Older
  • Learn to ignore specific revisions
  • # 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