IP Access Control

Manage IP allowlist and view denied IPs

<%= if @current_tab == "whitelist" do %>

Allowed IPs and CIDR Ranges

<.button phx-click="show_whitelist_form"> <.icon name="hero-plus" class="w-4 h-4 mr-1" /> Add to Allowlist
<%= if @show_whitelist_form do %>
<.form for={@whitelist_form} phx-submit="add_whitelist" class="space-y-4" >
<.input field={@whitelist_form[:ip_or_cidr]} type="text" label="IP Address or CIDR" placeholder="192.168.1.100 or 10.0.0.0/8" required /> <.input field={@whitelist_form[:description]} type="text" label="Description" placeholder="Office network" />
<.button type="submit">Add to Allowlist <.button type="button" phx-click="hide_whitelist_form"> Cancel
<% end %>
<%= if Enum.empty?(@whitelist) do %>
No allowed IPs or CIDR ranges
<% else %> <.table id="whitelist" rows={@whitelist}> <:col :let={entry} label="IP/CIDR">{entry.ip_or_cidr} <:col :let={entry} label="Description">{entry.description} <:col :let={entry} label="Added By"> <%= if entry.added_by do %> {entry.added_by.email} <% else %> Unknown <% end %> <:col :let={entry} label="Added"> {ToweropsWeb.TimeHelpers.format_date(entry.inserted_at, @timezone)} <:col :let={entry} label=""> <% end %>
<% end %> <%= if @current_tab == "blocked" do %>

Denied IP Addresses

<%= if Enum.empty?(@blocked_ips) do %>
No denied IPs
<% else %> <.table id="blocked_ips" rows={@blocked_ips}> <:col :let={block} label="IP Address">{block.ip_address} <:col :let={block} label="Offense Count"> "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400" 2 -> "bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-400" _ -> "bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400" end ]}> {block.offense_count} <:col :let={block} label="Status"> <%= if Towerops.Security.IpBlock.permanent?(block) do %> Permanent <% else %> {Towerops.Security.IpBlock.ban_duration(block)} <% end %> <:col :let={block} label="Last Violation"> {ToweropsWeb.TimeHelpers.format_time_ago(block.last_violation_at)} <:col :let={block} label="Reason">
{block.reason}
<:col :let={block} label=""> <% end %>
<% end %>