<% content_for :title, "Event #{@event.request_id} - Baffle Hub" %>

Event Details

<%= @event.waf_action.upcase %>
<%= link_to "Back to Events", events_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" %>

Event Overview

Request ID
<%= @event.request_id %>
Timestamp
<%= @event.timestamp.strftime("%Y-%m-%d %H:%M:%S %Z") %>
<%= time_ago_in_words(@event.timestamp) %> ago
Action
<%= @event.waf_action %>
<% if @event.rule.present? %>
Rule Matched
<%= link_to "Rule ##{@event.rule.id}", @event.rule, class: "text-blue-600 hover:text-blue-800" %> (<%= @event.rule.waf_rule_type %>) <% if @event.waf_policy.present? %>
Policy: <%= link_to @event.waf_policy.name, @event.waf_policy, class: "text-blue-600 hover:text-blue-800" %> <% end %>
<% end %> <% if @event.blocked_reason.present? %>
Blocked Reason
<%= @event.blocked_reason %>
<% end %> <% if @event.response_status.present? %>
Response Status
<%= @event.response_status %>
<% end %> <% if @event.response_time_ms.present? %>
Response Time
<%= @event.response_time_ms %> ms
<% end %>

Request Details

Request URL
<%= @event.request_url || @event.request_path %>
Request Path
<%= @event.request_path %>
Method
<%= @event.request_method ? @event.request_method.upcase : '-' %>
Protocol
<%= @event.request_protocol || '-' %>
<% if @event.request_host %>
Host
<%= @event.request_host.hostname %>
<% end %>

Network Intelligence

IP Address
<% if @network_range %> <%= link_to @event.ip_address, network_range_path(@event.ip_address), class: "text-blue-600 hover:text-blue-800 hover:underline font-mono" %> <% else %> <%= @event.ip_address %> <% end %>
<% if @network_range %>
Network Range
<%= link_to @network_range.cidr, network_range_path(@network_range), class: "text-blue-600 hover:text-blue-800 hover:underline font-mono" %>
<% if @network_range.company.present? %>
Company
<%= @network_range.company %>
<% end %> <% if @network_range.asn.present? %>
ASN
<%= link_to "#{@network_range.asn} (#{@network_range.asn_org})", network_ranges_path(asn: @network_range.asn), class: "text-blue-600 hover:text-blue-900 hover:underline" %>
<% end %> <% if @network_range.country.present? %>
Country
<%= link_to @network_range.country, events_path(country: @network_range.country), class: "text-blue-600 hover:text-blue-900 hover:underline" %>
<% end %> <% if @network_range.is_datacenter? || @network_range.is_vpn? || @network_range.is_proxy? %>
Classification
<% if @network_range.is_datacenter? %> Datacenter <% end %> <% if @network_range.is_vpn? %> VPN <% end %> <% if @network_range.is_proxy? %> Proxy <% end %>
<% end %> <% end %>
<% if @event.user_agent.present? %>

User Agent

<% ua = parse_user_agent(@event.user_agent) %>
Browser
<% if ua[:name].present? %> <%= ua[:name] %> <% if ua[:version].present? %> <%= ua[:version] %> <% end %> <% else %> - <% end %>
Operating System
<% if ua[:os_name].present? %> <%= ua[:os_name] %> <% if ua[:os_version].present? %> <%= ua[:os_version] %> <% end %> <% else %> - <% end %>
Device Type
<%= ua[:device_type]&.humanize || "-" %>
<% if ua[:bot] %>
Bot Detection
🤖 <%= ua[:bot_name] || 'Bot' %>
<% end %>
Raw User Agent
<%= @event.user_agent %>
<% end %> <% if @event.tags.any? %>

Tags

<% @event.tags.each do |tag| %> <%= tag %> <% end %>
<% end %> <% if @event.server_name.present? || @event.environment.present? || @event.agent_name.present? %>

Server & Agent Information

<% if @event.server_name.present? %>
Server Name
<%= @event.server_name %>
<% end %> <% if @event.environment.present? %>
Environment
<%= @event.environment %>
<% end %> <% if @event.agent_name.present? %>
Agent
<%= @event.agent_name %> <% if @event.agent_version.present? %> v<%= @event.agent_version %> <% end %>
<% end %>
<% end %> <% if @event.payload.present? %>

Raw Event Payload

<%= JSON.pretty_generate(@event.payload) %>
<% end %>