defmodule ApiBrasil.Platform.IpWhitelist do @moduledoc """ IP Whitelist da conta (`/ip-whitelist/*`). Restringe de quais IPs o Bearer Token pode ser usado. alias ApiBrasil.Platform.IpWhitelist {:ok, _} = IpWhitelist.set(client, ["200.0.0.1", "10.0.0.0/8"]) {:ok, _} = IpWhitelist.add_current(client) """ use ApiBrasil.Core.Service route_get(:get, "ip-whitelist", "Configuração atual: `GET /ip-whitelist`.") @doc """ Substitui a lista inteira: `PUT /ip-whitelist`. `entries` é a lista completa de IPs/faixas (envia `ip_whitelist` no body). """ @spec set(Client.t(), [String.t()], keyword()) :: result() def set(client, entries, opts \\ []) when is_list(entries) do Service.put(client, "ip-whitelist", %{"ip_whitelist" => entries}, opts) end @doc "Como `set/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha." @spec set!(Client.t(), [String.t()], keyword()) :: map() def set!(client, entries, opts \\ []) do Service.unwrap!(set(client, entries, opts)) end @doc "Adiciona uma entrada: `POST /ip-whitelist/add`." @spec add(Client.t(), String.t(), keyword()) :: result() def add(client, entry, opts \\ []) do Service.post(client, "ip-whitelist/add", %{"entry" => entry}, opts) end @doc "Como `add/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha." @spec add!(Client.t(), String.t(), keyword()) :: map() def add!(client, entry, opts \\ []) do Service.unwrap!(add(client, entry, opts)) end @doc "Remove uma entrada: `DELETE /ip-whitelist/remove`." @spec remove(Client.t(), String.t(), keyword()) :: result() def remove(client, entry, opts \\ []) do Service.delete(client, "ip-whitelist/remove", %{"entry" => entry}, opts) end @doc "Como `remove/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha." @spec remove!(Client.t(), String.t(), keyword()) :: map() def remove!(client, entry, opts \\ []) do Service.unwrap!(remove(client, entry, opts)) end @doc "Valida uma entrada: `POST /ip-whitelist/validate`." @spec validate(Client.t(), String.t(), keyword()) :: result() def validate(client, entry, opts \\ []) do Service.post(client, "ip-whitelist/validate", %{"entry" => entry}, opts) end @doc "Como `validate/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha." @spec validate!(Client.t(), String.t(), keyword()) :: map() def validate!(client, entry, opts \\ []) do Service.unwrap!(validate(client, entry, opts)) end route_get( :current_ip, "ip-whitelist/current-ip", "IP atual visto pelo gateway: `GET /ip-whitelist/current-ip`." ) route_empty( :add_current, :post, "ip-whitelist/add-current", "Adiciona o IP atual: `POST /ip-whitelist/add-current`." ) route_empty( :reset, :post, "ip-whitelist/reset", "Libera todos os IPs (wildcard): `POST /ip-whitelist/reset`." ) end