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:
40
app/controllers/admin/email_domain_blocks_controller.rb
Normal file
40
app/controllers/admin/email_domain_blocks_controller.rb
Normal 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
|
17
app/models/email_domain_block.rb
Normal file
17
app/models/email_domain_block.rb
Normal 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
|
@ -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('.', '\.')
|
||||
|
@ -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
|
13
app/views/admin/email_domain_blocks/index.html.haml
Normal file
13
app/views/admin/email_domain_blocks/index.html.haml
Normal 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'
|
10
app/views/admin/email_domain_blocks/new.html.haml
Normal file
10
app/views/admin/email_domain_blocks/new.html.haml
Normal 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
|
Reference in New Issue
Block a user