{t("IP Access Control")}

{t("Manage IP allowlist and view denied IPs")}

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

{t("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={t("IP Address or CIDR")} placeholder="192.168.1.100 or 10.0.0.0/8" required /> <.input field={@whitelist_form[:description]} type="text" label={t("Description")} placeholder={t("Office network")} />
<.button type="submit">{t("Add to Allowlist")} <.button type="button" phx-click="hide_whitelist_form"> {t("Cancel")}
<% end %>
<%= if Enum.empty?(@whitelist) do %>
{t("No allowed IPs or CIDR ranges")}
<% else %> <.table id="whitelist" rows={@whitelist}> <:col :let={entry} label={t("IP/CIDR")}>{entry.ip_or_cidr} <:col :let={entry} label={t("Description")}>{entry.description} <:col :let={entry} label={t("Added By")}> <%= if entry.added_by do %> {entry.added_by.email} <% else %> Unknown <% end %> <:col :let={entry} label={t("Added")}> {ToweropsWeb.TimeHelpers.format_date(entry.inserted_at, @timezone)} <:col :let={entry} label=""> <.button phx-click="remove_whitelist" phx-value-id={entry.id} data-confirm={t("Remove this IP/CIDR from the allowlist?")} variant="danger" > {t("Remove")} <% end %>
<% end %> <%= if @current_tab == "blocked" do %>

{t("Denied IP Addresses")}

<%= if Enum.empty?(@blocked_ips) do %>
{t("No denied IPs")}
<% else %> <.table id="blocked_ips" rows={@blocked_ips}> <:col :let={block} label={t("IP Address")}>{block.ip_address} <:col :let={block} label={t("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={t("Status")}> <%= if Towerops.Security.IpBlock.permanent?(block) do %> {t("Permanent")} <% else %> {Towerops.Security.IpBlock.ban_duration(block)} <% end %> <:col :let={block} label={t("Last Violation")}> {ToweropsWeb.TimeHelpers.format_time_ago(block.last_violation_at)} <:col :let={block} label={t("Reason")}>
{block.reason}
<:col :let={block} label=""> <% end %>
<% end %>