Skip to content

Commit fa57bf0

Browse files
NEW PROVIDER: Gidinet DNS provider and registrar (#4004)
## Summary Hey! This adds support for Gidinet, an Italian domain registrar. I needed it for managing my domains so figured I'd contribute it back. It works as both DNS provider and registrar: - DNS side handles the usual records (A, AAAA, CNAME, MX, NS, TXT, SRV) - Registrar side manages nameserver delegation The API is SOAP-based which was fun to work with... Their docs are a bit sparse but I got it working after some trial and error. ## Notes - Apex NS records can't be managed via DNS API (they're read-only), so I filter them out with a warning. Nameserver changes go through the registrar instead. - TTL values get rounded to what the API accepts - No CAA support unless you have their premium service Tested with my own domains and it's been working fine. Happy to address any feedback! Please create the GitHub label "provider-gidinet" --------- Co-authored-by: Tom Limoncelli <[email protected]>
1 parent 776b666 commit fa57bf0

File tree

17 files changed

+1630
-2
lines changed

17 files changed

+1630
-2
lines changed

.github/workflows/pr_integration_tests.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ jobs:
5252
Write-Host "Integration test providers: $Providers"
5353
echo "integration_test_providers=$(ConvertTo-Json -InputObject $Providers -Compress)" >> $env:GITHUB_OUTPUT
5454
env:
55-
PROVIDERS: "['ALIDNS', 'AXFRDDNS', 'AXFRDDNS_DNSSEC', 'AZURE_DNS','BIND','BUNNY_DNS','CLOUDFLAREAPI','CLOUDNS','CNR','DIGITALOCEAN','FORTIGATE','GANDI_V5','GCLOUD','HEDNS','HETZNER_V2','HEXONET','HUAWEICLOUD','INWX','JOKER','MYTHICBEASTS', 'NAMEDOTCOM','NS1','POWERDNS','ROUTE53','SAKURACLOUD','TRANSIP']"
55+
PROVIDERS: "['ALIDNS', 'AXFRDDNS', 'AXFRDDNS_DNSSEC', 'AZURE_DNS','BIND','BUNNY_DNS','CLOUDFLAREAPI','CLOUDNS','CNR','DIGITALOCEAN','FORTIGATE','GANDI_V5','GCLOUD','GIDINET','HEDNS','HETZNER_V2','HEXONET','HUAWEICLOUD','INWX','JOKER','MYTHICBEASTS', 'NAMEDOTCOM','NS1','POWERDNS','ROUTE53','SAKURACLOUD','TRANSIP']"
5656
ENV_CONTEXT: ${{ toJson(env) }}
5757
VARS_CONTEXT: ${{ toJson(vars) }}
5858
SECRETS_CONTEXT: ${{ toJson(secrets) }}
@@ -87,6 +87,7 @@ jobs:
8787
FORTIGATE_DOMAIN: ${{ vars.FORTIGATE_DOMAIN }}
8888
GANDI_V5_DOMAIN: ${{ vars.GANDI_V5_DOMAIN }}
8989
GCLOUD_DOMAIN: ${{ vars.GCLOUD_DOMAIN }}
90+
GIDINET_DOMAIN: ${{ vars.GIDINET_DOMAIN }}
9091
HEDNS_DOMAIN: ${{ vars.HEDNS_DOMAIN }}
9192
HETZNER_V2_DOMAIN: ${{ vars.HETZNER_V2_DOMAIN }}
9293
HEXONET_DOMAIN: ${{ vars.HEXONET_DOMAIN }}
@@ -155,6 +156,9 @@ jobs:
155156
GCLOUD_PROJECT: ${{ secrets.GCLOUD_PROJECT }}
156157
GCLOUD_TYPE: ${{ secrets.GCLOUD_TYPE }}
157158
#
159+
GIDINET_PASSWORD: ${{ secrets.GIDINET_PASSWORD }}
160+
GIDINET_USERNAME: ${{ secrets.GIDINET_USERNAME }}
161+
#
158162
HEDNS_PASSWORD: ${{ secrets.HEDNS_PASSWORD }}
159163
HEDNS_TOTP_SECRET: ${{ secrets.HEDNS_TOTP_SECRET }}
160164
HEDNS_USERNAME: ${{ secrets.HEDNS_USERNAME }}

.goreleaser.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ changelog:
3939
regexp: "(?i)^.*(major|new provider|feature)[(\\w)]*:+.*$"
4040
order: 1
4141
- title: 'Provider-specific changes:'
42-
regexp: "(?i)((adguardhome|akamaiedge|autodns|axfrd|azure|azure_private_dns|alidns|bind|bunnydns|cloudflare|cloudflareapi_old|cloudns|cnr|cscglobal|desec|digitalocean|dnsimple|dnsmadeeasy|doh|domainnameshop|dynadot|easyname|exoscale|fortigate|gandi|gcloud|gcore|hedns|hetzner|hetznerv2|hexonet|hostingde|huaweicloud|inwx|joker|linode|loopia|luadns|mythicbeasts|namecheap|namedotcom|netcup|netlify|ns1|opensrs|oracle|ovh|packetframe|porkbun|powerdns|realtimeregister|route53|rwth|sakuracloud|softlayer|transip|vercel|vultr).*:)+.*"
42+
regexp: "(?i)((adguardhome|akamaiedge|autodns|axfrd|azure|azure_private_dns|alidns|bind|bunnydns|cloudflare|cloudflareapi_old|cloudns|cnr|cscglobal|desec|digitalocean|dnsimple|dnsmadeeasy|doh|domainnameshop|dynadot|easyname|exoscale|fortigate|gandi|gcloud|gcore|gidinet|hedns|hetzner|hetznerv2|hexonet|hostingde|huaweicloud|inwx|joker|linode|loopia|luadns|mythicbeasts|namecheap|namedotcom|netcup|netlify|ns1|opensrs|oracle|ovh|packetframe|porkbun|powerdns|realtimeregister|route53|rwth|sakuracloud|softlayer|transip|vercel|vultr).*:)+.*"
4343
order: 2
4444
- title: 'Documentation:'
4545
regexp: "(?i)^.*(docs)[(\\w)]*:+.*$"

OWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ providers/fortigate @KlettIT
2525
providers/gandiv5 @TomOnTime
2626
providers/gcloud @riyadhalnur
2727
providers/gcore @xddxdd
28+
providers/gidinet @zupolgec
2829
providers/hedns @rblenkinsopp
2930
providers/hetzner @das7pad
3031
providers/hetznerv2 @das7pad

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ Currently supported DNS providers:
3939
- Fortigate
4040
- Gandi
4141
- Gcore
42+
- Gidinet
4243
- Google DNS
4344
- Hetzner
4445
- HEXONET
@@ -81,6 +82,7 @@ Currently supported Domain Registrars:
8182
- Dynadot
8283
- easyname
8384
- Gandi
85+
- Gidinet
8486
- HEXONET
8587
- hosting.de
8688
- Internet.bs

documentation/SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@
140140
* [Fortigate](provider/fortigate.md)
141141
* [Gandi_v5](provider/gandiv5.md)
142142
* [Gcore](provider/gcore.md)
143+
* [Gidinet](provider/gidinet.md)
143144
* [Google Cloud DNS](provider/gcloud.md)
144145
* [Hetzner DNS API](provider/hetznerv2.md)
145146
* [Hetzner DNS Console (legacy)](provider/hetzner.md)

documentation/provider/gidinet.md

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
## Configuration
2+
3+
To use this provider, add an entry to `creds.json` with `TYPE` set to `GIDINET`
4+
along with your Gidinet account credentials.
5+
6+
Example:
7+
8+
{% code title="creds.json" %}
9+
```json
10+
{
11+
"gidinet": {
12+
"TYPE": "GIDINET",
13+
"username": "your-gidinet-username",
14+
"password": "your-gidinet-password"
15+
}
16+
}
17+
```
18+
{% endcode %}
19+
20+
The [creds.json](../commands/creds-json.md#example-commands) page in the docs explains how you can generate this dynamically so you can pull the secret token from 1Password or the vault of your choosing.
21+
22+
## Metadata
23+
24+
This provider does not recognize any special metadata fields unique to Gidinet.
25+
26+
## Usage
27+
28+
### As DNS Provider only
29+
30+
If you manage your domain registration elsewhere but want to use Gidinet for DNS:
31+
32+
{% code title="dnsconfig.js" %}
33+
```javascript
34+
var REG_NONE = NewRegistrar("none");
35+
var DSP_GIDINET = NewDnsProvider("gidinet");
36+
37+
D("example.com", REG_NONE, DnsProvider(DSP_GIDINET),
38+
A("test", "1.2.3.4"),
39+
);
40+
```
41+
{% endcode %}
42+
43+
### As both Registrar and DNS Provider
44+
45+
If your domain is registered with Gidinet and you want to manage both nameserver delegation and DNS records:
46+
47+
{% code title="dnsconfig.js" %}
48+
```javascript
49+
var REG_GIDINET = NewRegistrar("gidinet");
50+
var DSP_GIDINET = NewDnsProvider("gidinet");
51+
52+
D("example.com", REG_GIDINET, DnsProvider(DSP_GIDINET),
53+
A("test", "1.2.3.4"),
54+
);
55+
```
56+
{% endcode %}
57+
58+
### As Registrar only (DNS hosted elsewhere)
59+
60+
If your domain is registered with Gidinet but you want to use a different DNS provider:
61+
62+
{% code title="dnsconfig.js" %}
63+
```javascript
64+
var REG_GIDINET = NewRegistrar("gidinet");
65+
var DSP_OTHER = NewDnsProvider("cloudflare");
66+
67+
D("example.com", REG_GIDINET, DnsProvider(DSP_OTHER),
68+
A("test", "1.2.3.4"),
69+
);
70+
```
71+
{% endcode %}
72+
73+
When used as a registrar, Gidinet will manage the nameserver delegation at the registry level.
74+
75+
## Activation
76+
77+
1. Log in to the [Gidinet Control Panel](https://www.gidinet.com/)
78+
2. Your account credentials (username and password) are the same ones you use to log in to the control panel
79+
80+
## Supported record types
81+
82+
The Gidinet DNS API supports the following record types:
83+
84+
| Name | Description |
85+
| ----- | ----------- |
86+
| A | IPv4 address record |
87+
| AAAA | IPv6 address record |
88+
| CNAME | Canonical name (alias) record |
89+
| MX | Mail exchange record |
90+
| NS | Name server record (subdomains only, apex NS managed by registrar) |
91+
| TXT | Text record |
92+
| SRV | Service record |
93+
94+
## Unsupported record types
95+
96+
The following record types are **not supported** by Gidinet:
97+
98+
- `ALIAS` - Not available
99+
- `CAA` - Only available with premium service
100+
- `DHCID`, `DNAME`, `DNSKEY`, `DS`, `HTTPS`, `LOC`, `NAPTR`, `PTR`, `SOA`, `SSHFP`, `SVCB`, `TLSA` - Not available
101+
102+
## Limitations
103+
104+
### TTL values
105+
106+
Gidinet only supports specific TTL values. If you specify a TTL that is not in the allowed list, DNSControl will automatically round up to the nearest allowed value.
107+
108+
Allowed TTL values (in seconds):
109+
- 60 (1 minute)
110+
- 300 (5 minutes)
111+
- 600 (10 minutes)
112+
- 900 (15 minutes)
113+
- 1800 (30 minutes)
114+
- 2700 (45 minutes)
115+
- 3600 (1 hour)
116+
- 7200 (2 hours)
117+
- 14400 (4 hours)
118+
- 28800 (8 hours)
119+
- 43200 (12 hours)
120+
- 64800 (18 hours)
121+
- 86400 (1 day)
122+
- 172800 (2 days)
123+
124+
### Nameservers
125+
126+
Gidinet's default nameservers are:
127+
- `dnsl1.gidinet.com`
128+
- `dnsl2.gidinet.com`
129+
130+
**Apex NS records are automatically filtered** by the DNS provider with a warning message. Gidinet does not support modifying NS records at the zone apex via the DNS API - they are managed by the registrar.
131+
132+
To manage nameserver delegation, use Gidinet as a **registrar** with the `NAMESERVER()` function:
133+
134+
{% code title="dnsconfig.js" %}
135+
```javascript
136+
var REG_GIDINET = NewRegistrar("gidinet");
137+
var DSP_GIDINET = NewDnsProvider("gidinet");
138+
139+
D("example.com", REG_GIDINET, DnsProvider(DSP_GIDINET),
140+
NAMESERVER("dnsl1.gidinet.com."),
141+
NAMESERVER("dnsl2.gidinet.com."),
142+
A("test", "1.2.3.4"),
143+
);
144+
```
145+
{% endcode %}
146+
147+
This uses the Core API's `domainNameServersChange` method to update the nameservers at the registry level.
148+
149+
### Zone creation
150+
151+
Zones must be created via the Gidinet web interface. The API does not support creating new zones.
152+
153+
### Zone listing
154+
155+
The provider supports listing all zones in your account via `dnscontrol get-zones`. This uses the Core API's `domainGetList` method to retrieve all active domains.
156+
157+
### Concurrent operations
158+
159+
The provider does not support concurrent API operations. Changes are applied sequentially to ensure reliability.

documentation/provider/index.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ Jump to a table:
5252
| [`GANDI_V5`](gandiv5.md) ||||
5353
| [`GCLOUD`](gcloud.md) ||||
5454
| [`GCORE`](gcore.md) ||||
55+
| [`GIDINET`](gidinet.md) ||||
5556
| [`HEDNS`](hedns.md) ||||
5657
| [`HETZNER`](hetzner.md) ||||
5758
| [`HETZNER_V2`](hetznerv2.md) ||||
@@ -117,6 +118,7 @@ Jump to a table:
117118
| [`GANDI_V5`](gandiv5.md) |||||
118119
| [`GCLOUD`](gcloud.md) |||||
119120
| [`GCORE`](gcore.md) |||||
121+
| [`GIDINET`](gidinet.md) |||||
120122
| [`HEDNS`](hedns.md) |||||
121123
| [`HETZNER`](hetzner.md) |||||
122124
| [`HETZNER_V2`](hetznerv2.md) |||||
@@ -179,6 +181,7 @@ Jump to a table:
179181
| [`GANDI_V5`](gandiv5.md) ||||||
180182
| [`GCLOUD`](gcloud.md) ||||||
181183
| [`GCORE`](gcore.md) ||||||
184+
| [`GIDINET`](gidinet.md) ||||||
182185
| [`HEDNS`](hedns.md) ||||||
183186
| [`HETZNER`](hetzner.md) ||||||
184187
| [`HETZNER_V2`](hetznerv2.md) ||||||
@@ -238,6 +241,7 @@ Jump to a table:
238241
| [`GANDI_V5`](gandiv5.md) |||||
239242
| [`GCLOUD`](gcloud.md) |||||
240243
| [`GCORE`](gcore.md) |||||
244+
| [`GIDINET`](gidinet.md) |||||
241245
| [`HEDNS`](hedns.md) |||||
242246
| [`HETZNER`](hetzner.md) |||||
243247
| [`HETZNER_V2`](hetznerv2.md) |||||
@@ -296,6 +300,7 @@ Jump to a table:
296300
| [`GANDI_V5`](gandiv5.md) ||||||
297301
| [`GCLOUD`](gcloud.md) ||||||
298302
| [`GCORE`](gcore.md) ||||||
303+
| [`GIDINET`](gidinet.md) ||||||
299304
| [`HEDNS`](hedns.md) ||||||
300305
| [`HETZNER`](hetzner.md) ||||||
301306
| [`HETZNER_V2`](hetznerv2.md) ||||||
@@ -345,6 +350,7 @@ Jump to a table:
345350
| [`DOMAINNAMESHOP`](domainnameshop.md) ||||
346351
| [`GANDI_V5`](gandiv5.md) ||||
347352
| [`GCORE`](gcore.md) ||||
353+
| [`GIDINET`](gidinet.md) ||||
348354
| [`HEDNS`](hedns.md) ||||
349355
| [`HETZNER`](hetzner.md) ||||
350356
| [`HETZNER_V2`](hetznerv2.md) ||||
@@ -429,6 +435,7 @@ Providers in this category and their maintainers are:
429435
|[`EXOSCALE`](exoscale.md)|@pierre-emmanuelJ|
430436
|[`GANDI_V5`](gandi_v5.md)|@TomOnTime|
431437
|[`GCORE`](gcore.md)|@xddxdd|
438+
|[`GIDINET`](gidinet.md)|@zupolgec|
432439
|[`HEDNS`](hedns.md)|@rblenkinsopp|
433440
|[`HETZNER`](hetzner.md)|@das7pad|
434441
|[`HEXONET`](hexonet.md)|@KaiSchwarz-cnic|

integrationTest/profiles.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,12 @@
174174
"api-key": "$GCORE_API_KEY",
175175
"domain": "$GCORE_DOMAIN"
176176
},
177+
"GIDINET": {
178+
"TYPE": "GIDINET",
179+
"domain": "$GIDINET_DOMAIN",
180+
"password": "$GIDINET_PASSWORD",
181+
"username": "$GIDINET_USERNAME"
182+
},
177183
"HEDNS": {
178184
"TYPE": "HEDNS",
179185
"domain": "$HEDNS_DOMAIN",

pkg/providers/_all/all.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
_ "github.com/StackExchange/dnscontrol/v4/providers/gandiv5"
3131
_ "github.com/StackExchange/dnscontrol/v4/providers/gcloud"
3232
_ "github.com/StackExchange/dnscontrol/v4/providers/gcore"
33+
_ "github.com/StackExchange/dnscontrol/v4/providers/gidinet"
3334
_ "github.com/StackExchange/dnscontrol/v4/providers/hedns"
3435
_ "github.com/StackExchange/dnscontrol/v4/providers/hetzner"
3536
_ "github.com/StackExchange/dnscontrol/v4/providers/hetznerv2"

0 commit comments

Comments
 (0)