<% content_for :title, "Rule ##{@rule.id} - #{@rule.waf_action.upcase}" %>

Rule #<%= @rule.id %>

<%= @rule.waf_action.upcase %>
<%= link_to "Edit", edit_rule_path(@rule), class: "inline-flex items-center px-4 py-2 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50" %> <% if @rule.enabled? %> <%= link_to "Disable", disable_rule_path(@rule), method: :post, data: { confirm: "Are you sure you want to disable this rule?" }, class: "inline-flex items-center px-4 py-2 border border-yellow-300 rounded-md shadow-sm text-sm font-medium text-yellow-700 bg-yellow-50 hover:bg-yellow-100" %> <% else %> <%= link_to "Enable", enable_rule_path(@rule), method: :post, class: "inline-flex items-center px-4 py-2 border border-green-300 rounded-md shadow-sm text-sm font-medium text-green-700 bg-green-50 hover:bg-green-100" %> <% end %>

Rule Details

Rule Type
<%= @rule.waf_rule_type.humanize %>
Action
<%= @rule.waf_action.upcase %>
Status
<% if @rule.enabled? && !@rule.expired? %> Active <% elsif @rule.expired? %> Expired <% else %> Disabled <% end %>
Source
<%= @rule.source.humanize %>
Priority
<%= @rule.priority %>
Created
<%= @rule.created_at.strftime("%Y-%m-%d %H:%M:%S UTC") %>
<% if @rule.expires_at.present? %>
Expires At
<%= @rule.expires_at.strftime("%Y-%m-%d %H:%M:%S UTC") %>
<% end %>
Created By
<%= @rule.user&.email_address || 'System' %>
<% if @rule.updated_at != @rule.created_at %>
Last Updated
<%= @rule.updated_at.strftime("%Y-%m-%d %H:%M:%S UTC") %>
<% end %>

Event Statistics

<%= link_to "View Events", events_path(rule_id: @rule.id), class: "text-sm text-blue-600 hover:text-blue-800" %>
Total Events
<%= @rule.events.count %>
Blocked Events
<%= @rule.events.where(waf_action: :deny).count %>
Allowed Events
<%= @rule.events.where(waf_action: :allow).count %>
<% if @rule.events.any? %>
Last event: <%= time_ago_in_words(@rule.events.maximum(:timestamp)) %> ago
<% end %>
<% if @rule.network_rule? && @rule.network_range.present? %>

Network Target

<%= link_to @rule.network_range.cidr, network_range_path(@rule.network_range), class: "text-blue-600 hover:text-blue-900" %>
<% if @rule.network_range.company.present? %>
<%= @rule.network_range.company %>
<% end %> <% if @rule.network_range.asn.present? %>
ASN <%= @rule.network_range.asn %><% if @rule.network_range.asn_org.present? %> (<%= @rule.network_range.asn_org %>)<% end %>
<% end %> <% if @rule.network_range.country.present? %>
Country: <%= @rule.network_range.country %>
<% end %>
<% if @rule.network_range.is_datacenter? %> Datacenter <% end %> <% if @rule.network_range.is_vpn? %> VPN <% end %> <% if @rule.network_range.is_proxy? %> Proxy <% end %>
<% end %> <% if @rule.conditions.present? %>

Conditions

<%= JSON.pretty_generate(JSON.parse(@rule.conditions)) rescue @rule.conditions %>
<% end %> <% if @rule.metadata.present? %>

Metadata

<%= JSON.pretty_generate(JSON.parse(@rule.metadata)) rescue @rule.metadata %>
<% end %>

Actions

<%= link_to "Edit Rule", edit_rule_path(@rule), class: "inline-flex items-center px-4 py-2 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50" %> <% if @rule.enabled? %> <%= form_with(model: @rule, url: disable_rule_path(@rule), method: :post, class: "inline-flex") do |form| %> <%= form.submit "Disable Rule", class: "inline-flex items-center px-4 py-2 border border-yellow-300 rounded-md shadow-sm text-sm font-medium text-yellow-700 bg-yellow-50 hover:bg-yellow-100 cursor-pointer" %> <% end %> <% else %> <%= form_with(model: @rule, url: enable_rule_path(@rule), method: :post, class: "inline-flex") do |form| %> <%= form.submit "Enable Rule", class: "inline-flex items-center px-4 py-2 border border-green-300 rounded-md shadow-sm text-sm font-medium text-green-700 bg-green-50 hover:bg-green-100 cursor-pointer" %> <% end %> <% end %> <%= link_to "View All Rules", rules_path, class: "inline-flex items-center px-4 py-2 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50" %>