Skip to content

Commit abdaa1f

Browse files
Support for 4 new DNS providers for Let's Encrypt challenges (#111)
1 parent 617811f commit abdaa1f

17 files changed

Lines changed: 369 additions & 0 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
- Improved the Code Editor for static response routes by replacing the outdated Codeium Editor with CodeMirror 6.
66
- Removed Codeium API Key configuration because the previous API Key option for Codeium (now Windsurf) is no longer used.
7+
- Added support for 4 new DNS providers for Let's Encrypt challenges: Netnod, 1cloud.ru, Online.net, and UCloud.
78
- General UI improvements and tweaks.
89
- Other minor improvements and bug fixes.
910

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package netnod
2+
3+
import (
4+
"context"
5+
6+
"github.com/go-acme/lego/v4/challenge"
7+
"github.com/go-acme/lego/v4/providers/dns/netnod"
8+
9+
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns"
10+
"dillmann.com.br/nginx-ignition/core/common/dynamicfields"
11+
"dillmann.com.br/nginx-ignition/core/common/i18n"
12+
)
13+
14+
const tokenFieldID = "netnodToken"
15+
16+
type Provider struct{}
17+
18+
func (p *Provider) ID() string {
19+
return "NETNOD"
20+
}
21+
22+
func (p *Provider) Name(ctx context.Context) *i18n.Message {
23+
return i18n.M(ctx, i18n.K.CertificateLetsencryptDnsNetnodName)
24+
}
25+
26+
func (p *Provider) DynamicFields(ctx context.Context) []dynamicfields.DynamicField {
27+
return dns.LinkedToProvider(p.ID(), []dynamicfields.DynamicField{
28+
{
29+
ID: tokenFieldID,
30+
Description: i18n.M(ctx, i18n.K.CertificateLetsencryptDnsNetnodToken),
31+
Required: true,
32+
Sensitive: true,
33+
Type: dynamicfields.SingleLineTextType,
34+
},
35+
})
36+
}
37+
38+
func (p *Provider) ChallengeProvider(
39+
_ context.Context,
40+
_ []string,
41+
parameters map[string]any,
42+
) (challenge.Provider, error) {
43+
token, _ := parameters[tokenFieldID].(string)
44+
45+
cfg := netnod.NewDefaultConfig()
46+
cfg.Token = token
47+
cfg.TTL = dns.TTL
48+
cfg.PropagationTimeout = dns.PropagationTimeout
49+
cfg.PollingInterval = dns.PollingInterval
50+
51+
return netnod.NewDNSProviderConfig(cfg)
52+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package onecloudru
2+
3+
import (
4+
"context"
5+
6+
"github.com/go-acme/lego/v4/challenge"
7+
"github.com/go-acme/lego/v4/providers/dns/onecloudru"
8+
9+
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns"
10+
"dillmann.com.br/nginx-ignition/core/common/dynamicfields"
11+
"dillmann.com.br/nginx-ignition/core/common/i18n"
12+
)
13+
14+
const tokenFieldID = "oneCloudRuToken"
15+
16+
type Provider struct{}
17+
18+
func (p *Provider) ID() string {
19+
return "ONECLOUDRU"
20+
}
21+
22+
func (p *Provider) Name(ctx context.Context) *i18n.Message {
23+
return i18n.M(ctx, i18n.K.CertificateLetsencryptDnsOnecloudruName)
24+
}
25+
26+
func (p *Provider) DynamicFields(ctx context.Context) []dynamicfields.DynamicField {
27+
return dns.LinkedToProvider(p.ID(), []dynamicfields.DynamicField{
28+
{
29+
ID: tokenFieldID,
30+
Description: i18n.M(ctx, i18n.K.CertificateLetsencryptDnsOnecloudruToken),
31+
Required: true,
32+
Sensitive: true,
33+
Type: dynamicfields.SingleLineTextType,
34+
},
35+
})
36+
}
37+
38+
func (p *Provider) ChallengeProvider(
39+
_ context.Context,
40+
_ []string,
41+
parameters map[string]any,
42+
) (challenge.Provider, error) {
43+
token, _ := parameters[tokenFieldID].(string)
44+
45+
cfg := onecloudru.NewDefaultConfig()
46+
cfg.Token = token
47+
cfg.TTL = dns.TTL
48+
cfg.PropagationTimeout = dns.PropagationTimeout
49+
cfg.PollingInterval = dns.PollingInterval
50+
51+
return onecloudru.NewDNSProviderConfig(cfg)
52+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package onlinenet
2+
3+
import (
4+
"context"
5+
6+
"github.com/go-acme/lego/v4/challenge"
7+
"github.com/go-acme/lego/v4/providers/dns/onlinenet"
8+
9+
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns"
10+
"dillmann.com.br/nginx-ignition/core/common/dynamicfields"
11+
"dillmann.com.br/nginx-ignition/core/common/i18n"
12+
)
13+
14+
const apiTokenFieldID = "onlineNetApiToken"
15+
16+
type Provider struct{}
17+
18+
func (p *Provider) ID() string {
19+
return "ONLINENET"
20+
}
21+
22+
func (p *Provider) Name(ctx context.Context) *i18n.Message {
23+
return i18n.M(ctx, i18n.K.CertificateLetsencryptDnsOnlinenetName)
24+
}
25+
26+
func (p *Provider) DynamicFields(ctx context.Context) []dynamicfields.DynamicField {
27+
return dns.LinkedToProvider(p.ID(), []dynamicfields.DynamicField{
28+
{
29+
ID: apiTokenFieldID,
30+
Description: i18n.M(ctx, i18n.K.CertificateLetsencryptDnsOnlinenetApiToken),
31+
Required: true,
32+
Sensitive: true,
33+
Type: dynamicfields.SingleLineTextType,
34+
},
35+
})
36+
}
37+
38+
func (p *Provider) ChallengeProvider(
39+
_ context.Context,
40+
_ []string,
41+
parameters map[string]any,
42+
) (challenge.Provider, error) {
43+
apiToken, _ := parameters[apiTokenFieldID].(string)
44+
45+
cfg := onlinenet.NewDefaultConfig()
46+
cfg.APIToken = apiToken
47+
cfg.TTL = dns.TTL
48+
cfg.PropagationTimeout = dns.PropagationTimeout
49+
cfg.PollingInterval = dns.PollingInterval
50+
cfg.SequenceInterval = dns.SequenceInterval
51+
52+
return onlinenet.NewDNSProviderConfig(cfg)
53+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package ucloud
2+
3+
import (
4+
"context"
5+
6+
"github.com/go-acme/lego/v4/challenge"
7+
"github.com/go-acme/lego/v4/providers/dns/ucloud"
8+
9+
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns"
10+
"dillmann.com.br/nginx-ignition/core/common/dynamicfields"
11+
"dillmann.com.br/nginx-ignition/core/common/i18n"
12+
)
13+
14+
const (
15+
publicKeyFieldID = "uCloudPublicKey"
16+
privateKeyFieldID = "uCloudPrivateKey"
17+
regionFieldID = "uCloudRegion"
18+
projectIDFieldID = "uCloudProjectId"
19+
)
20+
21+
type Provider struct{}
22+
23+
func (p *Provider) ID() string {
24+
return "UCLOUD"
25+
}
26+
27+
func (p *Provider) Name(ctx context.Context) *i18n.Message {
28+
return i18n.M(ctx, i18n.K.CertificateLetsencryptDnsUcloudName)
29+
}
30+
31+
func (p *Provider) DynamicFields(ctx context.Context) []dynamicfields.DynamicField {
32+
return dns.LinkedToProvider(p.ID(), []dynamicfields.DynamicField{
33+
{
34+
ID: publicKeyFieldID,
35+
Description: i18n.M(ctx, i18n.K.CertificateLetsencryptDnsUcloudPublicKey),
36+
Required: true,
37+
Sensitive: true,
38+
Type: dynamicfields.SingleLineTextType,
39+
},
40+
{
41+
ID: privateKeyFieldID,
42+
Description: i18n.M(ctx, i18n.K.CertificateLetsencryptDnsUcloudPrivateKey),
43+
Required: true,
44+
Sensitive: true,
45+
Type: dynamicfields.SingleLineTextType,
46+
},
47+
{
48+
ID: regionFieldID,
49+
Description: i18n.M(ctx, i18n.K.CertificateLetsencryptDnsUcloudRegion),
50+
Required: false,
51+
Type: dynamicfields.SingleLineTextType,
52+
},
53+
{
54+
ID: projectIDFieldID,
55+
Description: i18n.M(ctx, i18n.K.CertificateLetsencryptDnsUcloudProjectId),
56+
Required: false,
57+
Type: dynamicfields.SingleLineTextType,
58+
},
59+
})
60+
}
61+
62+
func (p *Provider) ChallengeProvider(
63+
_ context.Context,
64+
_ []string,
65+
parameters map[string]any,
66+
) (challenge.Provider, error) {
67+
publicKey, _ := parameters[publicKeyFieldID].(string)
68+
privateKey, _ := parameters[privateKeyFieldID].(string)
69+
region, _ := parameters[regionFieldID].(string)
70+
projectID, _ := parameters[projectIDFieldID].(string)
71+
72+
cfg := ucloud.NewDefaultConfig()
73+
cfg.PublicKey = publicKey
74+
cfg.PrivateKey = privateKey
75+
cfg.Region = region
76+
cfg.ProjectID = projectID
77+
cfg.TTL = dns.TTL
78+
cfg.PropagationTimeout = dns.PropagationTimeout
79+
cfg.PollingInterval = dns.PollingInterval
80+
81+
return ucloud.NewDNSProviderConfig(cfg)
82+
}

certificate/letsencrypt/dns_provider.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,16 @@ import (
133133
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/neodigit"
134134
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/netcup"
135135
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/netlify"
136+
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/netnod"
136137
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/nicmanager"
137138
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/nicru"
138139
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/nifcloud"
139140
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/njalla"
140141
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/nodion"
141142
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/ns1"
142143
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/octenium"
144+
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/onecloudru"
145+
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/onlinenet"
143146
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/oraclecloud"
144147
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/otc"
145148
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/ovh"
@@ -171,6 +174,7 @@ import (
171174
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/timewebcloud"
172175
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/todaynic"
173176
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/transip"
177+
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/ucloud"
174178
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/ultradns"
175179
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/uniteddomains"
176180
"dillmann.com.br/nginx-ignition/certificate/letsencrypt/dns/variomedia"
@@ -326,13 +330,16 @@ var providers = []dns.Provider{
326330
&neodigit.Provider{},
327331
&netcup.Provider{},
328332
&netlify.Provider{},
333+
&netnod.Provider{},
329334
&nicmanager.Provider{},
330335
&nicru.Provider{},
331336
&nifcloud.Provider{},
332337
&njalla.Provider{},
333338
&nodion.Provider{},
334339
&ns1.Provider{},
335340
&octenium.Provider{},
341+
&onecloudru.Provider{},
342+
&onlinenet.Provider{},
336343
&oraclecloud.Provider{},
337344
&otc.Provider{},
338345
&ovh.Provider{},
@@ -364,6 +371,7 @@ var providers = []dns.Provider{
364371
&timewebcloud.Provider{},
365372
&todaynic.Provider{},
366373
&transip.Provider{},
374+
&ucloud.Provider{},
367375
&ultradns.Provider{},
368376
&uniteddomains.Provider{},
369377
&variomedia.Provider{},

i18n/messages_bn.properties

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,8 @@ certificate/letsencrypt/dns/netcup/customer=Netcup কাস্টমার
437437
certificate/letsencrypt/dns/netcup/name=Netcup
438438
certificate/letsencrypt/dns/netlify/api-key=Netlify API কি
439439
certificate/letsencrypt/dns/netlify/name=Netlify
440+
certificate/letsencrypt/dns/netnod/name=Netnod
441+
certificate/letsencrypt/dns/netnod/token=Netnod API টোকেন
440442
certificate/letsencrypt/dns/nicmanager/api-email=Nicmanager API ইমেইল
441443
certificate/letsencrypt/dns/nicmanager/api-login=Nicmanager API লগইন
442444
certificate/letsencrypt/dns/nicmanager/api-mode=Nicmanager API মোড
@@ -460,6 +462,10 @@ certificate/letsencrypt/dns/ns1/api-key=NS1 API কি
460462
certificate/letsencrypt/dns/ns1/name=NS1
461463
certificate/letsencrypt/dns/octenium/api-key=Octenium API কি
462464
certificate/letsencrypt/dns/octenium/name=Octenium
465+
certificate/letsencrypt/dns/onecloudru/name=1cloud.ru
466+
certificate/letsencrypt/dns/onecloudru/token=1cloud.ru API টোকেন
467+
certificate/letsencrypt/dns/onlinenet/api-token=Online.net API টোকেন
468+
certificate/letsencrypt/dns/onlinenet/name=Online.net
463469
certificate/letsencrypt/dns/oraclecloud/compartment-ocid=OCI কম্পার্টমেন্ট OCID
464470
certificate/letsencrypt/dns/oraclecloud/name=Oracle Cloud (OCI)
465471
certificate/letsencrypt/dns/oraclecloud/private-key-help=PEM কন্টেন্ট
@@ -579,6 +585,11 @@ certificate/letsencrypt/dns/todaynic/name=Todaynic
579585
certificate/letsencrypt/dns/transip/account-name=TransIP অ্যাকাউন্ট নাম
580586
certificate/letsencrypt/dns/transip/name=TransIP
581587
certificate/letsencrypt/dns/transip/private-key-path=TransIP প্রাইভেট কি ফাইল পাথ
588+
certificate/letsencrypt/dns/ucloud/name=UCloud
589+
certificate/letsencrypt/dns/ucloud/private-key=UCloud প্রাইভেট কি
590+
certificate/letsencrypt/dns/ucloud/project-id=UCloud প্রজেক্ট ID
591+
certificate/letsencrypt/dns/ucloud/public-key=UCloud পাবলিক কি
592+
certificate/letsencrypt/dns/ucloud/region=UCloud অঞ্চল
582593
certificate/letsencrypt/dns/ultradns/name=UltraDNS
583594
certificate/letsencrypt/dns/ultradns/password=UltraDNS পাসওয়ার্ড
584595
certificate/letsencrypt/dns/ultradns/username=UltraDNS ইউজারনেম

i18n/messages_de.properties

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,8 @@ certificate/letsencrypt/dns/netcup/customer=Netcup Kunde
437437
certificate/letsencrypt/dns/netcup/name=Netcup
438438
certificate/letsencrypt/dns/netlify/api-key=Netlify API-Schlüssel
439439
certificate/letsencrypt/dns/netlify/name=Netlify
440+
certificate/letsencrypt/dns/netnod/name=Netnod
441+
certificate/letsencrypt/dns/netnod/token=Netnod-API-Token
440442
certificate/letsencrypt/dns/nicmanager/api-email=Nicmanager API E-Mail
441443
certificate/letsencrypt/dns/nicmanager/api-login=Nicmanager API Login
442444
certificate/letsencrypt/dns/nicmanager/api-mode=Nicmanager API Modus
@@ -460,6 +462,10 @@ certificate/letsencrypt/dns/ns1/api-key=NS1 API-Schlüssel
460462
certificate/letsencrypt/dns/ns1/name=NS1
461463
certificate/letsencrypt/dns/octenium/api-key=Octenium API-Schlüssel
462464
certificate/letsencrypt/dns/octenium/name=Octenium
465+
certificate/letsencrypt/dns/onecloudru/name=1cloud.ru
466+
certificate/letsencrypt/dns/onecloudru/token=1cloud.ru-API-Token
467+
certificate/letsencrypt/dns/onlinenet/api-token=Online.net-API-Token
468+
certificate/letsencrypt/dns/onlinenet/name=Online.net
463469
certificate/letsencrypt/dns/oraclecloud/compartment-ocid=OCI Compartment OCID
464470
certificate/letsencrypt/dns/oraclecloud/name=Oracle Cloud (OCI)
465471
certificate/letsencrypt/dns/oraclecloud/private-key-help=PEM Inhalt
@@ -579,6 +585,11 @@ certificate/letsencrypt/dns/todaynic/name=Todaynic
579585
certificate/letsencrypt/dns/transip/account-name=TransIP Kontoname
580586
certificate/letsencrypt/dns/transip/name=TransIP
581587
certificate/letsencrypt/dns/transip/private-key-path=TransIP privater Schlüsseldateipfad
588+
certificate/letsencrypt/dns/ucloud/name=UCloud
589+
certificate/letsencrypt/dns/ucloud/private-key=UCloud privater Schlüssel
590+
certificate/letsencrypt/dns/ucloud/project-id=UCloud Projekt-ID
591+
certificate/letsencrypt/dns/ucloud/public-key=UCloud öffentlicher Schlüssel
592+
certificate/letsencrypt/dns/ucloud/region=UCloud Region
582593
certificate/letsencrypt/dns/ultradns/name=UltraDNS
583594
certificate/letsencrypt/dns/ultradns/password=UltraDNS Passwort
584595
certificate/letsencrypt/dns/ultradns/username=UltraDNS Benutzername

i18n/messages_en.properties

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,8 @@ certificate/letsencrypt/dns/netcup/customer=Netcup customer
437437
certificate/letsencrypt/dns/netcup/name=Netcup
438438
certificate/letsencrypt/dns/netlify/api-key=Netlify API key
439439
certificate/letsencrypt/dns/netlify/name=Netlify
440+
certificate/letsencrypt/dns/netnod/name=Netnod
441+
certificate/letsencrypt/dns/netnod/token=Netnod API token
440442
certificate/letsencrypt/dns/nicmanager/api-email=Nicmanager API email
441443
certificate/letsencrypt/dns/nicmanager/api-login=Nicmanager API login
442444
certificate/letsencrypt/dns/nicmanager/api-mode=Nicmanager API mode
@@ -460,6 +462,10 @@ certificate/letsencrypt/dns/ns1/api-key=NS1 API key
460462
certificate/letsencrypt/dns/ns1/name=NS1
461463
certificate/letsencrypt/dns/octenium/api-key=Octenium API key
462464
certificate/letsencrypt/dns/octenium/name=Octenium
465+
certificate/letsencrypt/dns/onecloudru/name=1cloud.ru
466+
certificate/letsencrypt/dns/onecloudru/token=1cloud.ru API token
467+
certificate/letsencrypt/dns/onlinenet/api-token=Online.net API token
468+
certificate/letsencrypt/dns/onlinenet/name=Online.net
463469
certificate/letsencrypt/dns/oraclecloud/compartment-ocid=OCI compartment OCID
464470
certificate/letsencrypt/dns/oraclecloud/name=Oracle Cloud (OCI)
465471
certificate/letsencrypt/dns/oraclecloud/private-key-help=PEM contents
@@ -579,6 +585,11 @@ certificate/letsencrypt/dns/todaynic/name=Todaynic
579585
certificate/letsencrypt/dns/transip/account-name=TransIP account name
580586
certificate/letsencrypt/dns/transip/name=TransIP
581587
certificate/letsencrypt/dns/transip/private-key-path=TransIP private key file path
588+
certificate/letsencrypt/dns/ucloud/name=UCloud
589+
certificate/letsencrypt/dns/ucloud/private-key=UCloud private key
590+
certificate/letsencrypt/dns/ucloud/project-id=UCloud project ID
591+
certificate/letsencrypt/dns/ucloud/public-key=UCloud public key
592+
certificate/letsencrypt/dns/ucloud/region=UCloud region
582593
certificate/letsencrypt/dns/ultradns/name=UltraDNS
583594
certificate/letsencrypt/dns/ultradns/password=UltraDNS password
584595
certificate/letsencrypt/dns/ultradns/username=UltraDNS username

0 commit comments

Comments
 (0)