diff --git a/lib/towerops_web/live/org/settings_live.ex b/lib/towerops_web/live/org/settings_live.ex index cbf74bbe..66b72f12 100644 --- a/lib/towerops_web/live/org/settings_live.ex +++ b/lib/towerops_web/live/org/settings_live.ex @@ -75,6 +75,7 @@ defmodule ToweropsWeb.Org.SettingsLive do |> assign(:configuring, nil) |> assign(:integration_form, nil) |> assign(:test_result, nil) + |> assign(:netbox_config, default_netbox_config()) |> assign(:timezone, socket.assigns.current_scope.timezone)} end @@ -284,6 +285,13 @@ defmodule ToweropsWeb.Org.SettingsLive do |> to_form() end + socket = + if provider == "netbox" do + assign(socket, :netbox_config, load_netbox_config(integration)) + else + socket + end + {:noreply, socket |> assign(:configuring, provider) @@ -310,6 +318,22 @@ defmodule ToweropsWeb.Org.SettingsLive do |> Integrations.change_integration(normalize_params(params, integration)) |> Map.put(:action, :validate) + socket = + if socket.assigns.configuring == "netbox" do + assign(socket, :netbox_config, %{ + "sync_direction" => Map.get(params, "sync_direction", "pull"), + "sync_devices" => Map.get(params, "sync_devices", "true") == "true", + "sync_sites" => Map.get(params, "sync_sites", "true") == "true", + "sync_ip_addresses" => Map.get(params, "sync_ip_addresses", "false") == "true", + "sync_interfaces" => Map.get(params, "sync_interfaces", "false") == "true", + "device_role_filter" => Map.get(params, "device_role_filter", ""), + "site_filter" => Map.get(params, "site_filter", ""), + "tag_filter" => Map.get(params, "tag_filter", "") + }) + else + socket + end + {:noreply, assign(socket, :integration_form, to_form(changeset))} end @@ -579,4 +603,34 @@ defmodule ToweropsWeb.Org.SettingsLive do Logger.warning("Integration connection test failed: #{inspect(reason)}") {:error, "Connection failed - please check your API credentials and try again"} end + + defp default_netbox_config do + %{ + "sync_direction" => "pull", + "sync_devices" => true, + "sync_sites" => true, + "sync_ip_addresses" => false, + "sync_interfaces" => false, + "device_role_filter" => "", + "site_filter" => "", + "tag_filter" => "" + } + end + + defp load_netbox_config(nil), do: default_netbox_config() + + defp load_netbox_config(%Integration{credentials: creds}) when is_map(creds) do + %{ + "sync_direction" => Map.get(creds, "sync_direction", "pull"), + "sync_devices" => Map.get(creds, "sync_devices", true), + "sync_sites" => Map.get(creds, "sync_sites", true), + "sync_ip_addresses" => Map.get(creds, "sync_ip_addresses", false), + "sync_interfaces" => Map.get(creds, "sync_interfaces", false), + "device_role_filter" => Map.get(creds, "device_role_filter", ""), + "site_filter" => Map.get(creds, "site_filter", ""), + "tag_filter" => Map.get(creds, "tag_filter", "") + } + end + + defp load_netbox_config(_), do: default_netbox_config() end diff --git a/lib/towerops_web/live/org/settings_live.html.heex b/lib/towerops_web/live/org/settings_live.html.heex index c5866912..0189708c 100644 --- a/lib/towerops_web/live/org/settings_live.html.heex +++ b/lib/towerops_web/live/org/settings_live.html.heex @@ -1141,7 +1141,7 @@