2019-05-03 06:17:27 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2015-02-11 02:38:59 +08:00
|
|
|
require_dependency 'ip_addr'
|
|
|
|
|
2013-10-22 02:49:51 +08:00
|
|
|
class Admin::ScreenedIpAddressesController < Admin::AdminController
|
|
|
|
|
2017-08-31 12:06:56 +08:00
|
|
|
before_action :fetch_screened_ip_address, only: [:update, :destroy]
|
2013-10-23 04:30:30 +08:00
|
|
|
|
2013-10-22 02:49:51 +08:00
|
|
|
def index
|
2015-02-11 02:38:59 +08:00
|
|
|
filter = params[:filter]
|
|
|
|
filter = IPAddr.handle_wildcards(filter)
|
|
|
|
|
|
|
|
screened_ip_addresses = ScreenedIpAddress
|
2017-02-07 05:10:48 +08:00
|
|
|
screened_ip_addresses = screened_ip_addresses.where("cidr :filter >>= ip_address", filter: filter) if filter.present?
|
2015-02-11 02:38:59 +08:00
|
|
|
screened_ip_addresses = screened_ip_addresses.limit(200).order('match_count desc')
|
|
|
|
|
|
|
|
begin
|
|
|
|
screened_ip_addresses = screened_ip_addresses.to_a
|
|
|
|
rescue ActiveRecord::StatementInvalid
|
|
|
|
# postgresql throws a PG::InvalidTextRepresentation exception when filter isn't a valid cidr expression
|
|
|
|
screened_ip_addresses = []
|
|
|
|
end
|
|
|
|
|
2013-10-23 04:30:30 +08:00
|
|
|
render_serialized(screened_ip_addresses, ScreenedIpAddressSerializer)
|
|
|
|
end
|
|
|
|
|
2013-10-25 05:18:10 +08:00
|
|
|
def create
|
|
|
|
screened_ip_address = ScreenedIpAddress.new(allowed_params)
|
|
|
|
if screened_ip_address.save
|
|
|
|
render_serialized(screened_ip_address, ScreenedIpAddressSerializer)
|
|
|
|
else
|
|
|
|
render_json_error(screened_ip_address)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-10-23 04:30:30 +08:00
|
|
|
def update
|
2019-04-29 15:32:25 +08:00
|
|
|
if @screened_ip_address.update(allowed_params)
|
2018-08-20 23:37:30 +08:00
|
|
|
render_serialized(@screened_ip_address, ScreenedIpAddressSerializer)
|
2013-10-23 04:30:30 +08:00
|
|
|
else
|
|
|
|
render_json_error(@screened_ip_address)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy
|
|
|
|
@screened_ip_address.destroy
|
|
|
|
render json: success_json
|
2013-10-22 02:49:51 +08:00
|
|
|
end
|
|
|
|
|
2014-11-28 02:29:30 +08:00
|
|
|
def roll_up
|
2015-03-10 01:55:17 +08:00
|
|
|
subnets = ScreenedIpAddress.roll_up(current_user)
|
2017-07-28 09:20:09 +08:00
|
|
|
render json: success_json.merge!(subnets: subnets)
|
2014-11-25 00:25:48 +08:00
|
|
|
end
|
|
|
|
|
2013-10-23 04:30:30 +08:00
|
|
|
private
|
|
|
|
|
2018-06-07 13:28:18 +08:00
|
|
|
def allowed_params
|
|
|
|
params.require(:ip_address)
|
|
|
|
params.permit(:ip_address, :action_name)
|
|
|
|
end
|
2013-10-23 04:30:30 +08:00
|
|
|
|
2018-06-07 13:28:18 +08:00
|
|
|
def fetch_screened_ip_address
|
|
|
|
@screened_ip_address = ScreenedIpAddress.find(params[:id])
|
|
|
|
end
|
2013-10-23 04:30:30 +08:00
|
|
|
|
2013-10-22 02:49:51 +08:00
|
|
|
end
|