@@ -105,10 +105,9 @@ var listRecordsCmd = &cobra.Command{
105
105
Long : "List the A/SRV entries of the given network" ,
106
106
Run : func (cmd * cobra.Command , args []string ) {
107
107
recordType = strings .ToUpper (recordType )
108
- if recordType == "" || recordType == "A" || recordType == "CNAME" || recordType == "SRV" {
109
- listEntries (listNetwork , recordType )
110
- } else {
111
- fmt .Fprintf (os .Stderr , "Invalid recordType specified.\n " )
108
+ err := listEntries (listNetwork , recordType )
109
+ if err != nil {
110
+ fmt .Fprintf (os .Stderr , "%v\n " , err )
112
111
os .Exit (1 )
113
112
}
114
113
},
@@ -181,6 +180,19 @@ var exportCmd = &cobra.Command{
181
180
},
182
181
}
183
182
183
+ func doAddTXT (from string , to string ) error {
184
+ cfZoneID , cfToken , err := getClouldflareCredentials ()
185
+ if err != nil {
186
+ return fmt .Errorf ("error getting DNS credentials: %v" , err )
187
+ }
188
+
189
+ cloudflareDNS := cloudflare .NewDNS (cfZoneID , cfToken )
190
+
191
+ const priority = 1
192
+ const proxied = false
193
+ return cloudflareDNS .CreateDNSRecord (context .Background (), "TXT" , from , to , cloudflare .AutomaticTTL , priority , proxied )
194
+ }
195
+
184
196
func doAddDNS (from string , to string ) (err error ) {
185
197
cfZoneID , cfToken , err := getClouldflareCredentials ()
186
198
if err != nil {
@@ -315,7 +327,7 @@ func doDeleteDNS(network string, noPrompt bool, excludePattern string, includePa
315
327
316
328
cloudflareDNS := cloudflare .NewDNS (cfZoneID , cfToken )
317
329
318
- idsToDelete := make ( map [ string ] string ) // Maps record ID to Name
330
+ var idsToDelete []cloudflare. DNSRecordResponseEntry
319
331
services := []string {"_algobootstrap" , "_metrics" }
320
332
servicesRegexp , err := regexp .Compile ("^(_algobootstrap|_metrics)\\ ._tcp\\ ..*algodev.network$" )
321
333
@@ -355,7 +367,7 @@ func doDeleteDNS(network string, noPrompt bool, excludePattern string, includePa
355
367
356
368
if includeRegex == nil || (includeRegex .MatchString (r .Name ) && servicesRegexp .MatchString (r .Name )) {
357
369
fmt .Printf ("Found SRV record: %s\n " , r .Name )
358
- idsToDelete [ r . ID ] = r . Name
370
+ idsToDelete = append ( idsToDelete , r )
359
371
}
360
372
}
361
373
}
@@ -367,7 +379,7 @@ func doDeleteDNS(network string, noPrompt bool, excludePattern string, includePa
367
379
networkSuffix = "." + network + ".algodev.network"
368
380
}
369
381
370
- for _ , recordType := range []string {"A" , "CNAME" } {
382
+ for _ , recordType := range []string {"A" , "CNAME" , "TXT" } {
371
383
records , err := cloudflareDNS .ListDNSRecord (context .Background (), recordType , "" , "" , "" , "" , "" )
372
384
if err != nil {
373
385
fmt .Fprintf (os .Stderr , "Error listing DNS '%s' entries: %v\n " , recordType , err )
@@ -384,64 +396,89 @@ func doDeleteDNS(network string, noPrompt bool, excludePattern string, includePa
384
396
385
397
if includeRegex == nil || includeRegex .MatchString (r .Name ) {
386
398
fmt .Printf ("Found DNS '%s' record: %s\n " , recordType , r .Name )
387
- idsToDelete [ r . ID ] = r . Name
399
+ idsToDelete = append ( idsToDelete , r )
388
400
}
389
401
}
390
402
}
391
403
}
392
404
393
- if len (idsToDelete ) == 0 {
405
+ err = checkedDelete (idsToDelete , cloudflareDNS )
406
+ if err != nil {
407
+ fmt .Fprintf (os .Stderr , "Error deleting: %s\n " , err )
408
+ }
409
+ return true
410
+ }
411
+
412
+ func checkedDelete (toDelete []cloudflare.DNSRecordResponseEntry , cloudflareDNS * cloudflare.DNS ) error {
413
+ if len (toDelete ) == 0 {
394
414
fmt .Printf ("No DNS/SRV records found\n " )
395
- return true
415
+ return nil
396
416
}
397
417
398
418
var text string
399
419
if ! noPrompt {
400
420
reader := bufio .NewReader (os .Stdin )
401
- fmt .Printf ("Delete these %d entries (type 'yes' to delete)? " , len (idsToDelete ))
421
+ fmt .Printf ("Delete these %d entries (type 'yes' to delete)? " , len (toDelete ))
402
422
text , _ = reader .ReadString ('\n' )
403
423
text = strings .Replace (text , "\n " , "" , - 1 )
404
424
} else {
405
425
text = "yes"
406
426
}
407
427
408
428
if text == "yes" {
409
- for id , name := range idsToDelete {
410
- fmt .Fprintf (os .Stdout , "Deleting %s\n " , name )
411
- err = cloudflareDNS .DeleteDNSRecord (context .Background (), id )
429
+ for _ , entry := range toDelete {
430
+ fmt .Fprintf (os .Stdout , "Deleting %s\n " , entry . Name )
431
+ err : = cloudflareDNS .DeleteDNSRecord (context .Background (), entry . ID )
412
432
if err != nil {
413
- fmt .Fprintf ( os . Stderr , " !! error deleting %s: %v\n " , name , err )
433
+ return fmt .Errorf ( " !! error deleting %s: %v" , entry . Name , err )
414
434
}
415
435
}
416
436
}
417
- return true
437
+ return nil
418
438
}
419
439
420
- func listEntries (listNetwork string , recordType string ) {
440
+ func getEntries (getNetwork string , recordType string ) ([]cloudflare.DNSRecordResponseEntry , error ) {
441
+ recordTypes := []string {"A" , "CNAME" , "SRV" , "TXT" }
442
+ isKnown := false
443
+ for _ , known := range append (recordTypes , "" ) {
444
+ if recordType == known {
445
+ isKnown = true
446
+ break
447
+ }
448
+ }
449
+ if ! isKnown {
450
+ return nil , fmt .Errorf ("invalid recordType specified %s" , recordType )
451
+ }
421
452
cfZoneID , cfToken , err := getClouldflareCredentials ()
422
453
if err != nil {
423
- fmt .Fprintf (os .Stderr , "error getting DNS credentials: %v" , err )
424
- return
454
+ return nil , fmt .Errorf ("error getting DNS credentials: %v" , err )
425
455
}
426
456
427
457
cloudflareDNS := cloudflare .NewDNS (cfZoneID , cfToken )
428
- recordTypes := []string {"A" , "CNAME" , "SRV" }
429
458
if recordType != "" {
430
459
recordTypes = []string {recordType }
431
460
}
461
+ var records []cloudflare.DNSRecordResponseEntry
432
462
for _ , recType := range recordTypes {
433
- records , err : = cloudflareDNS .ListDNSRecord (context .Background (), recType , "" , "" , "" , "" , "" )
463
+ records , err = cloudflareDNS .ListDNSRecord (context .Background (), recType , getNetwork , "" , "" , "" , "" )
434
464
if err != nil {
435
- fmt .Fprintf (os .Stderr , "Error listing DNS entries: %v\n " , err )
436
- os .Exit (1 )
465
+ return nil , fmt .Errorf ("error listing DNS entries %w" , err )
437
466
}
467
+ }
468
+ return records , nil
469
+ }
438
470
439
- for _ , record := range records {
440
- if strings .HasSuffix (record .Name , listNetwork ) {
441
- fmt .Printf ("%v\n " , record .Name )
442
- }
471
+ func listEntries (listNetwork string , recordType string ) error {
472
+ records , err := getEntries ("" , recordType )
473
+ if err != nil {
474
+ return err
475
+ }
476
+ for _ , record := range records {
477
+ if strings .HasSuffix (record .Name , listNetwork ) {
478
+ fmt .Printf ("%v\n " , record .Name )
443
479
}
444
480
}
481
+ return nil
445
482
}
446
483
447
484
func doExportZone (network string , outputFilename string ) bool {
0 commit comments