dnssec.go raw
1 package goinwx
2
3 import (
4 "errors"
5 "time"
6
7 "github.com/fatih/structs"
8 "github.com/go-viper/mapstructure/v2"
9 )
10
11 const (
12 methodDNSSecAddDNSKey = "dnssec.adddnskey"
13 methodDNSSecDeleteAll = "dnssec.deleteall"
14 methodDNSSecDeleteDNSKey = "dnssec.deletednskey"
15 methodDNSSecDisableDNSSec = "dnssec.disablednssec"
16 methodDNSSecEnableDNSSec = "dnssec.enablednssec"
17 methodDNSSecInfo = "dnssec.info"
18 methodDNSSecListKeys = "dnssec.listkeys"
19 )
20
21 // DNSSecService API access to DNSSEC.
22 type DNSSecService service
23
24 // Add adds one DNSKEY to a specified domain.
25 func (s *DNSSecService) Add(request *DNSSecAddRequest) (*DNSSecAddResponse, error) {
26 if request == nil {
27 return nil, errors.New("request can't be nil")
28 }
29
30 requestMap := structs.Map(request)
31
32 req := s.client.NewRequest(methodDNSSecAddDNSKey, requestMap)
33
34 resp, err := s.client.Do(req)
35 if err != nil {
36 return nil, err
37 }
38
39 var result DNSSecAddResponse
40
41 err = mapstructure.Decode(resp, &result)
42 if err != nil {
43 return nil, err
44 }
45
46 return &result, nil
47 }
48
49 // DeleteAll deletes all DNSKEY/DS entries for a domain.
50 func (s *DNSSecService) DeleteAll(domain string) error {
51 req := s.client.NewRequest(methodDNSSecDeleteAll, map[string]any{
52 "domainName": domain,
53 })
54
55 _, err := s.client.Do(req)
56 if err != nil {
57 return err
58 }
59
60 return nil
61 }
62
63 // DeleteDNSKey deletes one DNSKEY from a specified domain.
64 func (s *DNSSecService) DeleteDNSKey(key string) error {
65 req := s.client.NewRequest(methodDNSSecDeleteDNSKey, map[string]any{
66 "key": key,
67 })
68
69 _, err := s.client.Do(req)
70 if err != nil {
71 return err
72 }
73
74 return nil
75 }
76
77 // Disable disables automated DNSSEC management for a domain.
78 func (s *DNSSecService) Disable(domain string) error {
79 req := s.client.NewRequest(methodDNSSecDisableDNSSec, map[string]any{
80 "domainName": domain,
81 })
82
83 _, err := s.client.Do(req)
84 if err != nil {
85 return err
86 }
87
88 return nil
89 }
90
91 // Enable enables automated DNSSEC management for a domain.
92 func (s *DNSSecService) Enable(domain string) error {
93 req := s.client.NewRequest(methodDNSSecEnableDNSSec, map[string]any{
94 "domainName": domain,
95 })
96
97 _, err := s.client.Do(req)
98 if err != nil {
99 return err
100 }
101
102 return nil
103 }
104
105 // Info gets current DNSSEC information.
106 func (s *DNSSecService) Info(domains []string) (*DNSSecInfoResponse, error) {
107 req := s.client.NewRequest(methodDNSSecInfo, map[string]any{
108 "domains": domains,
109 })
110
111 resp, err := s.client.Do(req)
112 if err != nil {
113 return nil, err
114 }
115
116 var result DNSSecInfoResponse
117
118 err = mapstructure.Decode(resp, &result)
119 if err != nil {
120 return nil, err
121 }
122
123 return &result, nil
124 }
125
126 // List lists domains.
127 func (s *DNSSecService) List(request *DNSSecServiceListRequest) (*DNSSecServiceList, error) {
128 if request == nil {
129 return nil, errors.New("request can't be nil")
130 }
131
132 requestMap := structs.Map(request)
133
134 req := s.client.NewRequest(methodDNSSecListKeys, requestMap)
135
136 resp, err := s.client.Do(req)
137 if err != nil {
138 return nil, err
139 }
140
141 var result DNSSecServiceList
142
143 err = mapstructure.Decode(resp, &result)
144 if err != nil {
145 return nil, err
146 }
147
148 return &result, nil
149 }
150
151 // DNSSecAddRequest API model.
152 type DNSSecAddRequest struct {
153 DomainName string `structs:"domainName,omitempty"`
154 DNSKey string `structs:"dnskey,omitempty"`
155 DS string `structs:"ds,omitempty"`
156 CalculateDigest bool `structs:"calculateDigest,omitempty"`
157 DigestType int `structs:"digestType,omitempty"`
158 }
159
160 // DNSSecAddResponse API model.
161 type DNSSecAddResponse struct {
162 DNSKey string `mapstructure:"dnskey"`
163 DS string `mapstructure:"ds"`
164 }
165
166 // DNSSecInfoResponse API model.
167 type DNSSecInfoResponse struct {
168 Data []DNSSecInfo `mapstructure:"data"`
169 }
170
171 // DNSSecInfo API model.
172 type DNSSecInfo struct {
173 Domain string `mapstructure:"domain"`
174 KeyCount int `mapstructure:"keyCount"`
175 DNSSecStatus string `mapstructure:"dnsSecStatus"`
176 }
177
178 // DNSSecServiceListRequest API model.
179 type DNSSecServiceListRequest struct {
180 DomainName string `structs:"domainName,omitempty"`
181 DomainNameIdn string `structs:"domainNameIdn,omitempty"`
182 KeyTag int `structs:"keyTag,omitempty"`
183 FlagID int `structs:"flagId,omitempty"`
184 AlgorithmID int `structs:"algorithmId,omitempty"`
185 PublicKey string `structs:"publicKey,omitempty"`
186 DigestTypeID int `structs:"digestTypeId,omitempty"`
187 Digest string `structs:"digest,omitempty"`
188 CreatedBefore string `structs:"createdBefore,omitempty"`
189 CreatedAfter string `structs:"createdAfter,omitempty"`
190 Status string `structs:"status,omitempty"`
191 Active int `structs:"active,omitempty"`
192 Page int `structs:"page,omitempty"`
193 PageLimit int `structs:"pagelimit,omitempty"`
194 }
195
196 // DNSSecServiceList API model.
197 type DNSSecServiceList struct {
198 DNSKeys []DNSSecServiceListResponse `mapstructure:"dnskey"`
199 }
200
201 // DNSSecServiceListResponse API model.
202 type DNSSecServiceListResponse struct {
203 OwnerName string `mapstructure:"ownerName"`
204 ID int `mapstructure:"id"`
205 DomainID int `mapstructure:"domainId"`
206 KeyTag int `mapstructure:"keyTag"`
207 FlagID int `mapstructure:"flagId"`
208 AlgorithmID int `mapstructure:"algorithmId"`
209 PublicKey string `mapstructure:"publicKey"`
210 DigestTypeID int `mapstructure:"digestTypeId"`
211 Digest string `mapstructure:"digest"`
212 Created time.Time `mapstructure:"created"`
213 Status string `mapstructure:"status"`
214 Active int `mapstructure:"active"`
215 }
216