From fff4f18327ec551d18da0032db58a39113664bfd Mon Sep 17 00:00:00 2001 From: penny Date: Sun, 25 Jan 2026 22:12:38 -0500 Subject: [PATCH] feat: Add support for PLC endpoint configuration --- config/runtime.exs | 3 +++ lib/atex/config/identity_resolver.ex | 26 ++++++++++++++++++++++++++ lib/atex/identity_resolver/did.ex | 3 ++- mix.exs | 2 +- 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 lib/atex/config/identity_resolver.ex diff --git a/config/runtime.exs b/config/runtime.exs index 017eb0f..c0faaa5 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -8,3 +8,6 @@ config :atex, Atex.OAuth, private_key: "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgyIpxhuDm0i3mPkrk6UdX4Sd9Jsv6YtAmSTza+A2nArShRANCAAQLF1GLueOBZOVnKWfrcnoDOO9NSRqH2utmfGMz+Rce18MDB7Z6CwFWjEq2UFYNBI4MI5cMI0+m+UYAmj4OZm+m", key_id: "awooga" + +config :atex, Atex.IdentityResolver, + directory_url: "https://plc.directory" diff --git a/lib/atex/config/identity_resolver.ex b/lib/atex/config/identity_resolver.ex new file mode 100644 index 0000000..d7859fa --- /dev/null +++ b/lib/atex/config/identity_resolver.ex @@ -0,0 +1,26 @@ +defmodule Atex.Config.IdentityResolver do + @moduledoc """ + Configuration management for `Atex.IdentityResolver`. + + Contains all configuration logic for fetching identity documents. + + ## Configuration + + The following structure is expected in your application config: + + config :atex, Atex.IdentityResolver, + directory_url: "https://plc.directory" # An address to a did:plc document host + """ + + @doc """ + Returns the configured URL for PLC queries. + """ + @spec directory_url :: String.t() + def directory_url(), + do: + Keyword.get( + Application.get_env(:atex, Atex.IdentityResolver, []), + :directory_url, + "https://plc.directory" + ) +end diff --git a/lib/atex/identity_resolver/did.ex b/lib/atex/identity_resolver/did.ex index 2564ea6..3597c93 100644 --- a/lib/atex/identity_resolver/did.ex +++ b/lib/atex/identity_resolver/did.ex @@ -1,5 +1,6 @@ defmodule Atex.IdentityResolver.DID do alias Atex.IdentityResolver.DIDDocument + alias Atex.Config.IdentityResolver, as: Config @type resolution_result() :: {:ok, DIDDocument.t()} @@ -14,7 +15,7 @@ defmodule Atex.IdentityResolver.DID do @spec resolve_plc(String.t()) :: resolution_result() defp resolve_plc("did:plc:" <> _id = did) do with {:ok, resp} when resp.status in 200..299 <- - Req.get("https://plc.directory/#{did}"), + Req.get("#{Config.directory_url()}/#{did}"), {:ok, body} <- decode_body(resp.body), {:ok, document} <- DIDDocument.from_json(body), :ok <- DIDDocument.validate_for_atproto(document, did) do diff --git a/mix.exs b/mix.exs index edcd0cc..ce1f309 100644 --- a/mix.exs +++ b/mix.exs @@ -69,7 +69,7 @@ defmodule Atex.MixProject do XRPC: ~r/^Atex\.XRPC/, OAuth: [Atex.Config.OAuth, Atex.OAuth, Atex.OAuth.Plug], Lexicons: ~r/^Atex\.Lexicon/, - Identity: ~r/^Atex\.IdentityResolver/ + Identity: [Atex.Config.IdentityResolver, ~r/^Atex\.IdentityResolver/] ] ] end -- 2.51.2