lib/unleash/strategy/remote_address.ex

defmodule Unleash.Strategy.RemoteAddress do
  @moduledoc """
  Requires `:remote_address` in `t:Unleash.context/0`

  Based on the
  [`remoteAddress`](https://unleash.github.io/docs/activation_strategy#remoteaddress)
  strategy.
  """

  use Unleash.Strategy, name: "RemoteAddress"

  alias Unleash.Strategy.Utils

  def enabled?(%{"IPs" => list}, context),
    do: enabled?(%{"ips" => list}, context)

  def enabled?(%{"ips" => _list}, %{remote_address: ""}), do: false

  def enabled?(%{"ips" => _list}, %{remote_address: nil}), do: false

  @impl Strategy
  def enabled?(%{"ips" => list}, %{remote_address: address})
      when is_binary(list) and is_binary(address) do
    {Utils.in_list?(list, address), %{ips: list, remote_address: address}}
  end

  def enabled?(_params, _context), do: false
end