From f27e707919ed9651b5d1924d576221a1300dde34 Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Thu, 23 Dec 2021 18:19:29 -0600 Subject: [PATCH] Fix wireguard has peers --- apps/fz_http/lib/fz_http_web/events.ex | 16 ++++++++++------ apps/fz_vpn/lib/fz_vpn/cli/live.ex | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/apps/fz_http/lib/fz_http_web/events.ex b/apps/fz_http/lib/fz_http_web/events.ex index 8a53a7ac6..1d7e49ae0 100644 --- a/apps/fz_http/lib/fz_http_web/events.ex +++ b/apps/fz_http/lib/fz_http_web/events.ex @@ -3,18 +3,22 @@ defmodule FzHttpWeb.Events do Handles interfacing with other processes in the system. """ - alias FzHttp.{Devices, Rules} + alias FzHttp.{Devices, Rules, Settings, Users} def create_device do GenServer.call(vpn_pid(), :create_device) end def device_created(device) do - GenServer.cast(vpn_pid(), { - :device_created, - device.public_key, - "#{Devices.ipv4_address(device)},#{Devices.ipv6_address(device)}" - }) + user = Users.get_user!(device.user_id) + + unless Users.vpn_session_expired?(user, Settings.vpn_duration()) do + GenServer.cast(vpn_pid(), { + :device_created, + device.public_key, + "#{Devices.ipv4_address(device)},#{Devices.ipv6_address(device)}" + }) + end end def device_updated(device) do diff --git a/apps/fz_vpn/lib/fz_vpn/cli/live.ex b/apps/fz_vpn/lib/fz_vpn/cli/live.ex index ccf618efa..0aff9e1a2 100644 --- a/apps/fz_vpn/lib/fz_vpn/cli/live.ex +++ b/apps/fz_vpn/lib/fz_vpn/cli/live.ex @@ -37,6 +37,20 @@ defmodule FzVpn.CLI.Live do set("peer #{pubkey} allowed-ips #{allowed_ips}") end + def delete_peers do + exec!("#{wg()} show") + |> String.split("\n") + |> Enum.filter(fn line -> + String.contains?(line, "peer") + end) + |> Enum.map(fn line -> + String.replace_leading(line, "peer: ", "") + end) + |> Enum.each(fn pubkey -> + delete_peer(pubkey) + end) + end + def delete_peer(pubkey) do set("peer #{pubkey} remove") end @@ -51,6 +65,7 @@ defmodule FzVpn.CLI.Live do def set(config_str) do # Empty config string results in invalid command if String.length(config_str) > 0 do + delete_peers() exec!("#{wg()} set #{iface_name()} #{config_str}") else Logger.warn("""