Add SharingId for the X-Gandi-Sharing-Id header#15
Open
bjorn wants to merge 1 commit intolibdns:masterfrom
Open
Add SharingId for the X-Gandi-Sharing-Id header#15bjorn wants to merge 1 commit intolibdns:masterfrom
bjorn wants to merge 1 commit intolibdns:masterfrom
Conversation
bjorn
added a commit
to bjorn/caddy-dns-gandi
that referenced
this pull request
May 5, 2026
Sets Provider.SharingId on the underlying libdns/gandi provider, which sends X-Gandi-Sharing-Id on every API call. Required when the PAT user's default organization isn't the one that owns the domain; without it Gandi 404s on per-record-set endpoints. Drive-by while in the same parser: the existing block-form `bearer_token <value>` branch read d.Val() before advancing past the directive name, so it stored the literal string "bearer_token" in BearerToken and then tripped d.NextArg() on the actual value, returning a "wrong argument count" error. Same fix applied here for sharing_id. Depends on libdns/gandi#15 (which adds the SharingId field). Once that lands, bump the libdns/gandi require accordingly.
When the PAT user's default organization is not the one that owns the domain, list endpoints still find the domain (Gandi filters by all visible orgs) but per-record-set endpoints return 404. Sending X-Gandi-Sharing-Id with the org UUID makes Gandi resolve into that org's context and the lookups work. Setting Provider.SharingId injects the header on every API call. The default empty value preserves existing behaviour.
Author
|
Heads-up: the The Gandi API reference at https://api.gandi.net/docs/reference/#Sharing-ID documents
The query-parameter form was the first thing I tried, but it 404s on the per-record-set endpoints, which is exactly where this provider needs to operate. The header form makes those endpoints succeed. Tested with two different PATs (full-permission and product-scoped) on the same domain. Reproducer: PAT=<your-pat>; ORG=<owner-org-uuid>; FQDN=<your-domain>
# query parameter: works on list, 404 on records
curl -sI -H "Authorization: Bearer $PAT" \
"https://api.gandi.net/v5/livedns/domains/$FQDN/records?sharing_id=$ORG" | head -1
# header: works on records
curl -sI -H "Authorization: Bearer $PAT" -H "X-Gandi-Sharing-Id: $ORG" \
"https://api.gandi.net/v5/livedns/domains/$FQDN/records" | head -1Since I couldn't find the header form documented, I want to flag this explicitly: the PR relies on undocumented but empirically working behaviour. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When the PAT user's default organization is not the one that owns the domain, list endpoints still find the domain (Gandi filters by all visible orgs) but per-record-set endpoints return 404. Sending
X-Gandi-Sharing-Idwith the org UUID makes Gandi resolve into that org's context and the lookups work.Setting
Provider.SharingIdinjects the header on every API call. The default empty value preserves existing behaviour.