From 1073e0457701f29013b0dbd2527acd758efb6ac8 Mon Sep 17 00:00:00 2001 From: Yannik Sembritzki Date: Tue, 31 Jan 2023 23:22:54 +0800 Subject: [PATCH] HOSTINGDE: Implement ListZones (fixes #1975) (#2019) Co-authored-by: Yannik Sembritzki Co-authored-by: Tom Limoncelli --- providers/hostingde/api.go | 24 +++++++++++++++++++++--- providers/hostingde/hostingdeProvider.go | 13 +++++++++++++ providers/hostingde/types.go | 10 +++++----- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/providers/hostingde/api.go b/providers/hostingde/api.go index ec64f3e1d..be3680f79 100644 --- a/providers/hostingde/api.go +++ b/providers/hostingde/api.go @@ -22,7 +22,7 @@ type hostingdeProvider struct { func (hp *hostingdeProvider) getDomainConfig(domain string) (*domainConfig, error) { params := request{ - Filter: filter{ + Filter: &filter{ Field: "domainName", Value: domain, }, @@ -135,7 +135,7 @@ func (hp *hostingdeProvider) getRecords(domain string) ([]*record, error) { page := uint(1) for { params := request{ - Filter: filter{ + Filter: &filter{ Field: "ZoneConfigId", Value: zc.ID, }, @@ -210,7 +210,7 @@ func (hp *hostingdeProvider) getZoneConfig(domain string) (*zoneConfig, error) { } params := request{ - Filter: filter{ + Filter: &filter{ Field: "ZoneName", Value: t, }, @@ -267,3 +267,21 @@ func (hp *hostingdeProvider) get(service, method string, params request) (*respo return respData.Response, nil } + +func (hp *hostingdeProvider) getAllZoneConfigs() ([]*zoneConfig, error) { + params := request{ + Limit: 10000, + } + + resp, err := hp.get("dns", "zoneConfigsFind", params) + if err != nil { + return nil, fmt.Errorf("could not get zones: %w", err) + } + + zc := []*zoneConfig{} + if err := json.Unmarshal(resp.Data, &zc); err != nil { + return nil, fmt.Errorf("could not parse response: %w", err) + } + + return zc, nil +} diff --git a/providers/hostingde/hostingdeProvider.go b/providers/hostingde/hostingdeProvider.go index f1a633f4c..30c38937f 100644 --- a/providers/hostingde/hostingdeProvider.go +++ b/providers/hostingde/hostingdeProvider.go @@ -222,3 +222,16 @@ func (hp *hostingdeProvider) EnsureDomainExists(domain string) error { } return nil } + +func (hp *hostingdeProvider) ListZones() ([]string, error) { + zcs, err := hp.getAllZoneConfigs() + if err != nil { + return nil, err + } + zones := make([]string, 0, len(zcs)) + for _, zoneConfig := range zcs { + zones = append(zones, zoneConfig.Name) + } + return zones, nil + +} diff --git a/providers/hostingde/types.go b/providers/hostingde/types.go index c6b71a616..f157e295b 100644 --- a/providers/hostingde/types.go +++ b/providers/hostingde/types.go @@ -16,11 +16,11 @@ var ( ) type request struct { - AuthToken string `json:"authToken"` - OwnerAccountID string `json:"ownerAccountId,omitempty"` - Filter filter `json:"filter,omitempty"` - Limit uint `json:"limit,omitempty"` - Page uint `json:"page,omitempty"` + AuthToken string `json:"authToken"` + OwnerAccountID string `json:"ownerAccountId,omitempty"` + Filter *filter `json:"filter,omitempty"` + Limit uint `json:"limit,omitempty"` + Page uint `json:"page,omitempty"` // Update Zone ZoneConfig *zoneConfig `json:"zoneConfig"`