Support for provider: hosting.nl (SQR.nl) #1598
Labels
area/dnsprovider
contrib/waiting-for-feedback
enhancement
new-provider
state/need-user-tests
Need users to test functionality
Welcome
How do you use lego?
Through Traefik
Link to the DNS provider
https://sqr.nl
Link to the API documentation
https://api.sqr.nl/api/documentation
Additional Notes
Here are the required details for implementing a challenge solver to the DNS API provided by SQR.nl (a Dutch provider). Being a customer of SQR.nl myself, I can attest that this should work.
I am a programmer so I had a look at https://go-acme.github.io/lego/usage/library/writing-a-challenge-solver/ for details, but I have no knowledge at all of Go (or C++), so providing a challenge solver would be very hard for me at this point.
Although, I am in the process of writing a custom Node JS service that interfaces with SQR.nl's API and allows for an
HTTPREQ
implementation for use with Traefik. So have managed to get this thing to work and thus I am able and willing to help work out the details or help test.All information in this post is based on publicly available information:
Present
A
Present
call would look like this:curl -X POST "https://api.sqr.nl/domains/example.com/dns?client_id=0" -H "accept: */*" -H "API-TOKEN: XYZ" -H "Content-Type: application/json" -H "X-CSRF-TOKEN: " -d "[{\"name\":\"example.com\",\"type\":\"TXT\",\"content\":\"\\\"CHALLENGE\\\"\",\"ttl\":3600,\"prio\":0}]"
Variables:
XYZ
: a customer API keyexample.com
: the domain name (used both in the URL and the JSON data)CHALLENGE
: the challenge textA response from SQR.nl's API should look like this:
{ "success": true, "data": [ { "id": "12345", "type": "TXT", "content": "\"CHALLENGE\"", "name": "example.com", "prio": 0, "ttl": 3600 } ] }
Note the
id
property for the added DNS record.Cleanup
A
Cleanup
call would look like this:curl -X DELETE "https://api.sqr.nl/domains/example.com/dns?client_id=0" -H "accept: */*" -H "API-TOKEN: XYZ" -H "Content-Type: application/json" -H "X-CSRF-TOKEN: " -d "[{\"id\":12345}]"
Variables:
XYZ
: the customer API keyexample.com
: the domain name12345
: the DNS record that needs to be removedA response should look like this:
{ "success": true, "data": [ { "id": "12345" } ] }
Find entry to remove
To optionally find the the correct DNS record to delete, you can fetch a list of all DNS records:
curl -X GET "https://api.sqr.nl/domains/example.com/dns?client_id=0" -H "accept: */*" -H "API-TOKEN: XYZ" -H "X-CSRF-TOKEN: "
Variables:
XYZ
: the customer API keyexample.com
: the domain nameA response should look something like this:
{ "success": true, "data": [ { "id": "12344", "name": "example.com", "type": "SOA", "content": "some-content", "ttl": "86400", "prio": "0", "disabled": "0" }, { "id": "12345", "name": "example.com", "type": "TXT", "content": "\"CHALLENGE\"", "ttl": "3600", "prio": "0", "disabled": "0" }, { "id": "12346", "name": "*.example.com", "type": "CNAME", "content": "example.com", "ttl": "60", "prio": "0", "disabled": "0" }, { "id": "12347", "name": "example.com", "type": "A", "content": "93.184.216.34", "ttl": "60", "prio": "0", "disabled": "0" } ] }
That way, it's possible to iterate over all DNS records and find the one that holds the challenge text. Thus you will find the ID required for cleanup.
Errors
In case any error happens, you will usually only get this response:
{ "errors": { "message": "Something went wrong" } }
Notes:
client_id=0
as a request parameter and the value is always0
API-TOKEN
X-CSRF-TOKEN
can be omitted; I have not tested that; it's just listed in many of the examples that SQR.nl provides (see: https://sqr.nl/support/beheer-domeinen-en-dns-met-de-api/ (Dutch only))The text was updated successfully, but these errors were encountered: