defmodule Paraxial do @moduledoc """ Paraxial.io functions for use by users. """ alias Paraxial.Helpers @doc """ Given an email, bulk action (such as :email), and count, return true or fase.any() Example config: ```elixir config :paraxial, # ... bulk: %{email: %{trusted: 100, untrusted: 3}}, trusted_domains: MapSet.new(["paraxial.io", "blackcatprojects.xyz"]) ``` ## Examples iex> Paraxial.bulk_allowed?("mike@blackcatprojects.xyz", :email, 3) true iex> Paraxial.bulk_allowed?("mike@blackcatprojects.xyz", :email, 100) true iex> Paraxial.bulk_allowed?("mike@test.xyz", :email, 4) false """ def bulk_allowed?(email, bulk_action, count) do # bulk map: bulk: %{emails: %{trusted: 100, untrusted: 5}} # trusted domains: trusted_domains: ["blackcatprojects.xyz", "paraxial.io"] bulk_map = Helpers.get_bulk_map() trusted_domains = Helpers.get_trusted_domains() limits = bulk_map[bulk_action] if email_trusted?(email, trusted_domains) do count <= limits[:trusted] else count <= limits[:untrusted] end end def email_trusted?(email, trusted_domains) do [_h, domain] = String.split(email, "@") domain in trusted_domains end end