83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package internal
|
|
|
|
import "fmt"
|
|
|
|
const successResult = "success"
|
|
|
|
// APIResponse is the representation of an API response.
|
|
type APIResponse struct {
|
|
Result string `json:"result"`
|
|
|
|
Answer *Answer `json:"answer,omitempty"`
|
|
|
|
ErrorCode string `json:"error_code,omitempty"`
|
|
ErrorText string `json:"error_text,omitempty"`
|
|
}
|
|
|
|
func (a APIResponse) Error() string {
|
|
return fmt.Sprintf("API %s: %s: %s", a.Result, a.ErrorCode, a.ErrorText)
|
|
}
|
|
|
|
// HasError returns an error is the response contains an error.
|
|
func (a APIResponse) HasError() error {
|
|
if a.Result != successResult {
|
|
return a
|
|
}
|
|
|
|
if a.Answer != nil {
|
|
for _, domResp := range a.Answer.Domains {
|
|
if domResp.Result != successResult {
|
|
return domResp
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Answer is the representation of an API response answer.
|
|
type Answer struct {
|
|
Domains []DomainResponse `json:"domains,omitempty"`
|
|
}
|
|
|
|
// DomainResponse is the representation of an API response answer domain.
|
|
type DomainResponse struct {
|
|
Result string `json:"result"`
|
|
|
|
DName string `json:"dname"`
|
|
|
|
ErrorCode string `json:"error_code,omitempty"`
|
|
ErrorText string `json:"error_text,omitempty"`
|
|
}
|
|
|
|
func (d DomainResponse) Error() string {
|
|
return fmt.Sprintf("API %s: %s: %s", d.Result, d.ErrorCode, d.ErrorText)
|
|
}
|
|
|
|
// AddTxtRequest is the representation of the payload of a request to add a TXT record.
|
|
type AddTxtRequest struct {
|
|
Username string `json:"username"`
|
|
Password string `json:"password"`
|
|
|
|
Domains []Domain `json:"domains,omitempty"`
|
|
SubDomain string `json:"subdomain,omitempty"`
|
|
Text string `json:"text,omitempty"`
|
|
OutputContentType string `json:"output_content_type,omitempty"`
|
|
}
|
|
|
|
// RemoveRecordRequest is the representation of the payload of a request to remove a record.
|
|
type RemoveRecordRequest struct {
|
|
Username string `json:"username"`
|
|
Password string `json:"password"`
|
|
|
|
Domains []Domain `json:"domains,omitempty"`
|
|
SubDomain string `json:"subdomain,omitempty"`
|
|
Content string `json:"content,omitempty"`
|
|
RecordType string `json:"record_type,omitempty"`
|
|
OutputContentType string `json:"output_content_type,omitempty"`
|
|
}
|
|
|
|
// Domain is the representation of a Domain.
|
|
type Domain struct {
|
|
DName string `json:"dname"`
|
|
}
|