Defdo.ConfigHelper (defdo_ddns v0.5.0)

Copy Markdown

Runtime-safe configuration parsing helpers.

This module is intentionally compiled under lib/ because config/runtime.exs depends on it at release boot time. Keeping it compiled avoids release crashes caused by missing ad-hoc .exs helper files.

Summary

Functions

parse_boolean_env(env_var, default \\ false)

parse_domain_mappings(mappings_string)

parse_domain_mappings_json(json_string)

@spec parse_domain_mappings_json(String.t()) :: {:ok, map()} | {:error, String.t()}

Parse JSON domain mappings.

Supported formats:

  1. Object map: {"example.com":["www","api"],"zone.net":[]}

  2. Array entries: [{"domain":"example.com","subdomains":["www","api"]}] (subdomains may also be named hosts or records)

parse_integer_env(env_var, default, opts \\ [])

parse_json_env(env_var, default \\ [])

parse_list_env(env_var, default \\ [])

resolve_domain_mappings(legacy_mappings, a_records_json)

@spec resolve_domain_mappings(String.t() | nil, String.t() | nil) :: map()

Resolve domain mappings from JSON-first config with legacy fallback.

Priority:

  1. a_records_json (CLOUDFLARE_A_RECORDS_JSON)
  2. legacy_mappings (CLOUDFLARE_DOMAIN_MAPPINGS)

resolve_json_domain_mappings(json_mappings, default \\ %{})

@spec resolve_json_domain_mappings(String.t() | nil, map()) :: map()

Resolve domain mappings from JSON input only.

Useful for record-specific mapping vars (for example AAAA records) where we do not want legacy string fallback semantics.