Implement EmailBlackList (#5109)

* Implement BlacklistedEmailDomain

* Use Faker::Internet.domain_name

* Remove note column

* Add frozen_string_literal comment

* Delete unnecessary codes

* Sort alphabetically

* Change of wording

* Rename BlacklistedEmailDomain to EmailDomainBlock
This commit is contained in:
utam0k
2017-10-04 22:16:10 +09:00
committed by Eugen Rochko
parent d5091387c6
commit b3af3f9f8c
15 changed files with 207 additions and 1 deletions

View File

@ -0,0 +1,40 @@
# frozen_string_literal: true
module Admin
class EmailDomainBlocksController < BaseController
before_action :set_email_domain_block, only: [:show, :destroy]
def index
@email_domain_blocks = EmailDomainBlock.page(params[:page])
end
def new
@email_domain_block = EmailDomainBlock.new
end
def create
@email_domain_block = EmailDomainBlock.new(resource_params)
if @email_domain_block.save
redirect_to admin_email_domain_blocks_path, notice: I18n.t('admin.email_domain_blocks.created_msg')
else
render :new
end
end
def destroy
@email_domain_block.destroy
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)
end
end
end

View File

@ -0,0 +1,17 @@
# frozen_string_literal: true
# == Schema Information
#
# Table name: email_domain_blocks
#
# id :integer not null, primary key
# domain :string not null
# created_at :datetime not null
# updated_at :datetime not null
#
class EmailDomainBlock < ApplicationRecord
def self.block?(email)
domain = email.gsub(/.+@([^.]+)/, '\1')
where(domain: domain).exists?
end
end

View File

@ -12,6 +12,7 @@ class BlacklistedEmailValidator < ActiveModel::Validator
end
def on_blacklist?(value)
return true if EmailDomainBlock.block?(value)
return false if Rails.configuration.x.email_domains_blacklist.blank?
domains = Rails.configuration.x.email_domains_blacklist.gsub('.', '\.')

View File

@ -0,0 +1,5 @@
%tr
%td.domain
%samp= email_domain_block.domain
%td
= table_link_to 'trash', t('admin.email_domain_blocks.delete'), admin_email_domain_block_path(email_domain_block), method: :delete

View File

@ -0,0 +1,13 @@
- content_for :page_title do
= t('admin.email_domain_blocks.title')
%table.table
%thead
%tr
%th= t('admin.email_domain_blocks.domain')
%th
%tbody
= render @email_domain_blocks
= paginate @email_domain_blocks
= link_to t('admin.email_domain_blocks.add_new'), new_admin_email_domain_block_path, class: 'button'

View File

@ -0,0 +1,10 @@
- content_for :page_title do
= t('.title')
= simple_form_for @email_domain_block, url: admin_email_domain_blocks_path do |f|
= render 'shared/error_messages', object: @email_domain_block
= f.input :domain, placeholder: t('admin.email_domain_blocks.domain')
.actions
= f.button :button, t('.create'), type: :submit