9461285318
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>
25 lines
861 B
Elixir
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
|