mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-12-09 21:55:57 +08:00
53 lines
1.5 KiB
Go
53 lines
1.5 KiB
Go
package joker
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
// EnsureZoneExists creates a zone if it doesn't exist.
|
|
func (api *jokerProvider) EnsureZoneExists(domain string, metadata map[string]string) error {
|
|
// For Joker, all domains you manage automatically have DNS zones available
|
|
// We just need to verify we can access the zone
|
|
_, body, err := api.makeRequest("dns-zone-get", url.Values{"domain": {domain}})
|
|
if err == nil {
|
|
// Zone exists and is accessible - check if it has content
|
|
if strings.TrimSpace(body) != "" {
|
|
// Zone exists with content, no action needed
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// Zone doesn't exist or is empty, initialize it
|
|
params := url.Values{}
|
|
params.Set("domain", domain)
|
|
params.Set("zone", "# Zone initialized by dnscontrol")
|
|
|
|
_, _, err = api.makeRequest("dns-zone-put", params)
|
|
return err
|
|
}
|
|
|
|
// ListZones returns a list of zones managed by this provider.
|
|
func (api *jokerProvider) ListZones() ([]string, error) {
|
|
_, body, err := api.makeRequest("dns-zone-list", nil)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to list zones: %w", err)
|
|
}
|
|
|
|
var zones []string
|
|
lines := strings.Split(strings.TrimSpace(body), "\n")
|
|
for _, line := range lines {
|
|
line = strings.TrimSpace(line)
|
|
if line != "" && !strings.HasPrefix(line, "#") {
|
|
// dns-zone-list returns domains with expiration dates: "domain.com 2025-12-31"
|
|
// We only need the domain name (first part)
|
|
parts := strings.Fields(line)
|
|
if len(parts) >= 1 {
|
|
zones = append(zones, parts[0])
|
|
}
|
|
}
|
|
}
|
|
|
|
return zones, nil
|
|
}
|