Files
homelab_dashboard/lib/homelab_dashboard_web/controllers/page_controller.ex
T
adyrem 9461285318 Auto-sync services from homelab repo via GenServer
ServicesSync polls ~/dev/homelab every 5 minutes: runs git pull, then
re-parses ansible/roles/traefik/defaults/main.yml to derive public and
internal service lists. Services with public_host are shown publicly;
others require internal network access. PageController now delegates to
ServicesSync instead of hardcoded module attributes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 15:08:30 +02:00

25 lines
861 B
Elixir

defmodule HomelabDashboardWeb.PageController do
use HomelabDashboardWeb, :controller
import Bitwise
def home(conn, _params) do
{public_services, internal_services} = HomelabDashboard.ServicesSync.get_services()
render(conn, :home,
public_services: public_services,
internal_services: internal_services,
show_internal: internal_network?(conn.remote_ip)
)
end
defp internal_network?({127, _, _, _}), do: true
defp internal_network?({10, _, _, _}), do: true
defp internal_network?({192, 168, _, _}), do: true
defp internal_network?({172, b, _, _}) when b in 16..31, do: true
defp internal_network?({0, 0, 0, 0, 0, 0, 0, 1}), do: true
defp internal_network?({0, 0, 0, 0, 0, 65535, ab, cd}) do
internal_network?({ab >>> 8, ab &&& 0xFF, cd >>> 8, cd &&& 0xFF})
end
defp internal_network?(_), do: false
end