ip bans: add hit counter, deleted flag, new ban type.
* Make IP bans soft deletable. * Add a hit counter to track how many times an IP ban has blocked someone. * Add a last hit timestamp to track when the IP ban last blocked someone. * Add a new type of IP ban, the signup ban. Signup bans restrict new signups from editing anything until they've verified their email address.
This commit is contained in:
@@ -26,7 +26,7 @@
|
||||
<tr>
|
||||
<th>IP Banned</th>
|
||||
<td>
|
||||
<% if IpBan.is_banned?(ip_address.ip_addr.to_s) %>
|
||||
<% if IpBan.ip_matches(ip_address.ip_addr.to_s).exists? %>
|
||||
yes (<%= link_to "info", ip_bans_path(search: { ip_addr: ip_address.to_s }) %>)
|
||||
<% else %>
|
||||
no
|
||||
|
||||
@@ -2,16 +2,35 @@
|
||||
<div id="a-index">
|
||||
<h1>IP Bans</h1>
|
||||
|
||||
<%= table_for @ip_bans, width: "100%" do |t| %>
|
||||
<%= table_for @ip_bans, class: "striped autofit", width: "100%" do |t| %>
|
||||
<% t.column "IP Address" do |ip_ban| %>
|
||||
<%= link_to_ip ip_ban.subnetted_ip %>
|
||||
<% end %>
|
||||
<% t.column "Banner" do |ip_ban| %>
|
||||
<%= link_to_user ip_ban.creator %>
|
||||
<% t.column :reason, td: { class: "col-expand" } %>
|
||||
<% t.column "Status" do |ip_ban| %>
|
||||
<% if ip_ban.is_deleted? %>
|
||||
Deleted
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% t.column "Type" do |ip_ban| %>
|
||||
<%= ip_ban.category.delete_suffix("_ban").capitalize %>
|
||||
<% end %>
|
||||
<% t.column "Last Seen" do |ip_ban| %>
|
||||
<%= time_ago_in_words_tagged ip_ban.last_hit_at %>
|
||||
<% end %>
|
||||
<% t.column :hit_count, name: "Hits" %>
|
||||
<% t.column "Creator" do |ip_ban| %>
|
||||
<%= link_to_user ip_ban.creator %>
|
||||
<%= link_to "»", ip_bans_path(search: { creator_name: ip_ban.creator.name }) %>
|
||||
<div><%= time_ago_in_words_tagged(ip_ban.created_at) %></div>
|
||||
<% end %>
|
||||
<% t.column :reason %>
|
||||
<% t.column column: "control" do |ip_ban| %>
|
||||
<%= link_to "Unban", ip_ban_path(ip_ban), :remote => true, :method => :delete, :data => {:confirm => "Do your really want to unban #{ip_ban.ip_addr}?"} %>
|
||||
<%= link_to "Details", ip_address_path(ip_ban.ip_addr.to_s) %> |
|
||||
<% if ip_ban.is_deleted? %>
|
||||
<%= link_to "Undelete", ip_ban_path(ip_ban), remote: true, method: :put, "data-params": "ip_ban[is_deleted]=false", "data-confirm": "Are you sure you want to undelete this IP ban?" %>
|
||||
<% else %>
|
||||
<%= link_to "Delete", ip_ban_path(ip_ban), remote: true, method: :put, "data-params": "ip_ban[is_deleted]=true", "data-confirm": "Are you sure you want to remove this IP ban?" %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
|
||||
@@ -1,12 +1,23 @@
|
||||
<div id="c-ip-bans">
|
||||
<div id="a-new">
|
||||
<div id="a-new" class="fixed-width-container">
|
||||
<h1>New IP Ban</h1>
|
||||
|
||||
<p>
|
||||
A normal IP ban restricts the IP from creating new accounts, logging in to
|
||||
existing accounts, or editing the site in any way.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
A signup IP ban restricts new signups from editing anything until after
|
||||
they've verified their email address.
|
||||
<p>
|
||||
|
||||
<%= error_messages_for "ip_ban" %>
|
||||
|
||||
<%= edit_form_for(@ip_ban) do |f| %>
|
||||
<%= f.input :ip_addr, label: "IP Address", as: :string, hint: "Add /24 to ban a subnet. Example: 1.2.3.4/24" %>
|
||||
<%= f.input :reason %>
|
||||
<%= f.input :reason, as: :string %>
|
||||
<%= f.input :category, as: :select, include_blank: false, collection: [["Normal", "normal"], ["Signup", "signup"]] %>
|
||||
<%= f.button :submit, "Submit" %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user