Skip to content

Commit 40bf2b0

Browse files
Archirkldez
andauthored
selectelv2: fix non-ASCII domain (#2322)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
1 parent b41079b commit 40bf2b0

File tree

3 files changed

+24
-13
lines changed

3 files changed

+24
-13
lines changed

docs/content/dns/zz_gen_selectelv2.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ Configuration for [Selectel v2](https://selectel.ru).
2626
Here is an example bash command using the Selectel v2 provider:
2727

2828
```bash
29-
SELECTEL_USERNAME=trex \
30-
SELECTEL_PASSWORD=xxxxx \
31-
SELECTEL_ACCOUNT_ID=1234567 \
32-
SELECTEL_PROJECT_ID=111a11111aaa11aa1a11aaa11111aa1a \
29+
SELECTELV2_USERNAME=trex \
30+
SELECTELV2_PASSWORD=xxxxx \
31+
SELECTELV2_ACCOUNT_ID=1234567 \
32+
SELECTELV2_PROJECT_ID=111a11111aaa11aa1a11aaa11111aa1a \
3333
lego --email you@example.com --dns selectelv2 --domains my.example.org run
3434
```
3535

providers/dns/selectelv2/selectelv2.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/go-acme/lego/v4/providers/dns/internal/useragent"
1515
selectelapi "github.com/selectel/domains-go/pkg/v2"
1616
"github.com/selectel/go-selvpcclient/v3/selvpcclient"
17+
"golang.org/x/net/idna"
1718
)
1819

1920
const tokenHeader = "X-Auth-Token"
@@ -252,21 +253,26 @@ type clientWrapper struct {
252253
}
253254

254255
func (w *clientWrapper) getZone(ctx context.Context, name string) (*selectelapi.Zone, error) {
255-
params := &map[string]string{"filter": name}
256+
unicodeName, err := idna.ToUnicode(name)
257+
if err != nil {
258+
return nil, fmt.Errorf("to unicode: %w", err)
259+
}
260+
261+
params := &map[string]string{"filter": unicodeName}
256262

257263
zones, err := w.ListZones(ctx, params)
258264
if err != nil {
259265
return nil, fmt.Errorf("list zone: %w", err)
260266
}
261267

262268
for _, zone := range zones.GetItems() {
263-
if zone.Name == dns01.ToFqdn(name) {
269+
if zone.Name == dns01.ToFqdn(unicodeName) {
264270
return zone, nil
265271
}
266272
}
267273

268274
if len(strings.Split(dns01.UnFqdn(name), ".")) == 1 {
269-
return nil, errors.New("zone for challenge has not been found")
275+
return nil, fmt.Errorf("zone '%s' for challenge has not been found", name)
270276
}
271277

272278
// -1 can not be returned since if no dots present we exit above
@@ -276,15 +282,20 @@ func (w *clientWrapper) getZone(ctx context.Context, name string) (*selectelapi.
276282
}
277283

278284
func (w *clientWrapper) getRRset(ctx context.Context, name, zoneID string) (*selectelapi.RRSet, error) {
279-
params := &map[string]string{"name": name, "rrset_types": string(selectelapi.TXT)}
285+
unicodeName, err := idna.ToUnicode(name)
286+
if err != nil {
287+
return nil, fmt.Errorf("to unicode: %w", err)
288+
}
289+
290+
params := &map[string]string{"name": unicodeName, "rrset_types": string(selectelapi.TXT)}
280291

281292
resp, err := w.ListRRSets(ctx, zoneID, params)
282293
if err != nil {
283294
return nil, fmt.Errorf("list rrset: %w", err)
284295
}
285296

286297
for _, rrset := range resp.GetItems() {
287-
if rrset.Name == dns01.ToFqdn(name) {
298+
if rrset.Name == dns01.ToFqdn(unicodeName) {
288299
return rrset, nil
289300
}
290301
}

providers/dns/selectelv2/selectelv2.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ Code = "selectelv2"
55
Since = "v4.17.0"
66

77
Example = '''
8-
SELECTEL_USERNAME=trex \
9-
SELECTEL_PASSWORD=xxxxx \
10-
SELECTEL_ACCOUNT_ID=1234567 \
11-
SELECTEL_PROJECT_ID=111a11111aaa11aa1a11aaa11111aa1a \
8+
SELECTELV2_USERNAME=trex \
9+
SELECTELV2_PASSWORD=xxxxx \
10+
SELECTELV2_ACCOUNT_ID=1234567 \
11+
SELECTELV2_PROJECT_ID=111a11111aaa11aa1a11aaa11111aa1a \
1212
lego --email you@example.com --dns selectelv2 --domains my.example.org run
1313
'''
1414

0 commit comments

Comments
 (0)