1
0
mirror of https://github.com/StackExchange/dnscontrol.git synced 2024-05-11 05:55:12 +00:00

New provider: Loopia DNS service provider (#2140)

Co-authored-by: Tom Limoncelli <tlimoncelli@stackoverflow.com>
This commit is contained in:
Paul Dee
2023-03-15 14:54:07 +01:00
committed by GitHub
parent 9beb00f6b1
commit 8e643c2856
16 changed files with 2585 additions and 1 deletions

View File

@ -0,0 +1,640 @@
package loopia
const (
exampleDomain = "example.com"
exampleSubDomain = "_acme-challenge"
exampleRdata = "LHDhK3oGRvkiefQnx7OOczTY5Tic_xZ6HcMOc_gmtoM"
)
// Testdata based on real traffic between an xml-rpc client and the api.
const responseOk = `<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<string>
OK
</string>
</value>
</param>
</params>
</methodResponse>`
const responseAuthError = `<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<string>
AUTH_ERROR
</string>
</value>
</param>
</params>
</methodResponse>`
const responseUnknownError = `<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<string>
UNKNOWN_ERROR
</string>
</value>
</param>
</params>
</methodResponse>`
const responseRPCError = `<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>
faultCode
</name>
<value>
<int>
201
</int>
</value>
</member>
<member>
<name>
faultString
</name>
<value>
<string>
Method signature error: 42
</string>
</value>
</member>
</struct>
</value>
</fault>
</methodResponse>`
const addZoneRecordGoodAuth = `<?xml version="1.0"?>
<methodCall>
<methodName>addZoneRecord</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>goodpassword</string>
</value>
</param>
<param>
<value>
<string>example.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
<param>
<value>
<struct>
<member>
<name>type</name>
<value>
<string>TXT</string>
</value>
</member>
<member>
<name>ttl</name>
<value>
<int>123</int>
</value>
</member>
<member>
<name>priority</name>
<value>
<int>0</int>
</value>
</member>
<member>
<name>rdata</name>
<value>
<string>TXTrecord</string>
</value>
</member>
<member>
<name>record_id</name>
<value>
<int>0</int>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>`
const addZoneRecordBadAuth = `<?xml version="1.0"?>
<methodCall>
<methodName>addZoneRecord</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>badpassword</string>
</value>
</param>
<param>
<value>
<string>example.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
<param>
<value>
<struct>
<member>
<name>type</name>
<value>
<string>TXT</string>
</value>
</member>
<member>
<name>ttl</name>
<value>
<int>123</int>
</value>
</member>
<member>
<name>priority</name>
<value>
<int>0</int>
</value>
</member>
<member>
<name>rdata</name>
<value>
<string>TXTrecord</string>
</value>
</member>
<member>
<name>record_id</name>
<value>
<int>0</int>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>`
const addZoneRecordNonValidDomain = `<?xml version="1.0"?>
<methodCall>
<methodName>addZoneRecord</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>goodpassword</string>
</value>
</param>
<param>
<value>
<string>badexample.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
<param>
<value>
<struct>
<member>
<name>type</name>
<value>
<string>TXT</string>
</value>
</member>
<member>
<name>ttl</name>
<value>
<int>123</int>
</value>
</member>
<member>
<name>priority</name>
<value>
<int>0</int>
</value>
</member>
<member>
<name>rdata</name>
<value>
<string>TXTrecord</string>
</value>
</member>
<member>
<name>record_id</name>
<value>
<int>0</int>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>`
const addZoneRecordEmptyResponse = `<?xml version="1.0"?>
<methodCall>
<methodName>addZoneRecord</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>goodpassword</string>
</value>
</param>
<param>
<value>
<string>empty.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
<param>
<value>
<struct>
<member>
<name>type</name>
<value>
<string>TXT</string>
</value>
</member>
<member>
<name>ttl</name>
<value>
<int>123</int>
</value>
</member>
<member>
<name>priority</name>
<value>
<int>0</int>
</value>
</member>
<member>
<name>rdata</name>
<value>
<string>TXTrecord</string>
</value>
</member>
<member>
<name>record_id</name>
<value>
<int>0</int>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>`
const getZoneRecords = `<?xml version="1.0"?>
<methodCall>
<methodName>getZoneRecords</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>goodpassword</string>
</value>
</param>
<param>
<value>
<string>example.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
</params>
</methodCall>`
const getZoneRecordsResponse = `<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>type</name>
<value>
<string>TXT</string>
</value>
</member>
<member>
<name>ttl</name>
<value>
<int>300</int>
</value>
</member>
<member>
<name>priority</name>
<value>
<int>0</int>
</value>
</member>
<member>
<name>rdata</name>
<value>
<string>LHDhK3oGRvkiefQnx7OOczTY5Tic_xZ6HcMOc_gmtoM</string>
</value>
</member>
<member>
<name>record_id</name>
<value>
<int>12345678</int>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</param>
</params>
</methodResponse>`
const removeRecordGoodAuth = `<?xml version="1.0"?>
<methodCall>
<methodName>removeZoneRecord</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>goodpassword</string>
</value>
</param>
<param>
<value>
<string>example.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
<param>
<value>
<int>12345678</int>
</value>
</param>
</params>
</methodCall>`
const removeRecordBadAuth = `<?xml version="1.0"?>
<methodCall>
<methodName>removeZoneRecord</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>badpassword</string>
</value>
</param>
<param>
<value>
<string>example.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
<param>
<value>
<int>12345678</int>
</value>
</param>
</params>
</methodCall>`
const removeRecordNonValidDomain = `<?xml version="1.0"?>
<methodCall>
<methodName>removeZoneRecord</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>goodpassword</string>
</value>
</param>
<param>
<value>
<string>badexample.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
<param>
<value>
<int>12345678</int>
</value>
</param>
</params>
</methodCall>`
const removeRecordEmptyResponse = `<?xml version="1.0"?>
<methodCall>
<methodName>removeZoneRecord</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>goodpassword</string>
</value>
</param>
<param>
<value>
<string>empty.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
<param>
<value>
<int>12345678</int>
</value>
</param>
</params>
</methodCall>`
const removeSubdomainGoodAuth = `<?xml version="1.0"?>
<methodCall>
<methodName>removeSubdomain</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>goodpassword</string>
</value>
</param>
<param>
<value>
<string>example.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
</params>
</methodCall>`
const removeSubdomainBadAuth = `<?xml version="1.0"?>
<methodCall>
<methodName>removeSubdomain</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>badpassword</string>
</value>
</param>
<param>
<value>
<string>example.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
</params>
</methodCall>`
const removeSubdomainNonValidDomain = `<?xml version="1.0"?>
<methodCall>
<methodName>removeSubdomain</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>goodpassword</string>
</value>
</param>
<param>
<value>
<string>badexample.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
</params>
</methodCall>`
const removeSubdomainEmptyResponse = `<?xml version="1.0"?>
<methodCall>
<methodName>removeSubdomain</methodName>
<params>
<param>
<value>
<string>apiuser</string>
</value>
</param>
<param>
<value>
<string>goodpassword</string>
</value>
</param>
<param>
<value>
<string>empty.com</string>
</value>
</param>
<param>
<value>
<string>_acme-challenge</string>
</value>
</param>
</params>
</methodCall>`