forked from domainr/epp
/
updateds.go
86 lines (77 loc) · 2.49 KB
/
updateds.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package epp
import (
"bytes"
"encoding/xml"
"fmt"
// "github.com/nbio/xx"
)
type DSRecord struct {
KeyTag int
Algorithm int
DigestType int
Digest string
}
// CheckDomain queries the EPP server for the availability status of one or more domains.
func (c *Conn) DomainUpdateDS(domain string, add []DSRecord, rem []DSRecord) (*DomainUpdateResponse, error) {
err := encodeDomainUpdateDS(&c.buf, domain, add, rem)
if err != nil {
return nil, err
}
err = c.flushDataUnit()
if err != nil {
return nil, err
}
var res response_
err = c.readResponse(&res)
if err != nil {
return nil, err
}
return &res.DomainUpdateResponse, nil
}
func encodeDomainUpdateDS(buf *bytes.Buffer, domain string, add []DSRecord, rem []DSRecord) error {
buf.Reset()
buf.WriteString(xmlCommandPrefix)
buf.WriteString(`<update>`)
buf.WriteString(`<domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">`)
buf.WriteString(`<domain:name>`)
xml.EscapeText(buf, []byte(domain))
buf.WriteString(`</domain:name>`)
buf.WriteString(`</domain:update>`)
buf.WriteString(`</update>`)
buf.WriteString(`<extension>`)
buf.WriteString(`<secDNS:update xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">`)
if len(rem) > 0 {
buf.WriteString(`<secDNS:rem>`)
for _, dsr := range rem {
buf.WriteString(`<secDNS:dsData>`)
buf.WriteString(fmt.Sprintf(`<secDNS:keyTag>%d</secDNS:keyTag>`, dsr.KeyTag))
buf.WriteString(fmt.Sprintf(`<secDNS:alg>%d</secDNS:alg>`, dsr.Algorithm))
buf.WriteString(fmt.Sprintf(`<secDNS:digestType>%d</secDNS:digestType>`, dsr.DigestType))
buf.WriteString(fmt.Sprintf(`<secDNS:digest>%s</secDNS:digest>`, dsr.Digest))
buf.WriteString(`</secDNS:dsData>`)
}
buf.WriteString(`</secDNS:rem>`)
}
if len(add) > 0 {
buf.WriteString(`<secDNS:add>`)
for _, dsr := range add {
buf.WriteString(`<secDNS:dsData>`)
buf.WriteString(fmt.Sprintf(`<secDNS:keyTag>%d</secDNS:keyTag>`, dsr.KeyTag))
buf.WriteString(fmt.Sprintf(`<secDNS:alg>%d</secDNS:alg>`, dsr.Algorithm))
buf.WriteString(fmt.Sprintf(`<secDNS:digestType>%d</secDNS:digestType>`, dsr.DigestType))
buf.WriteString(fmt.Sprintf(`<secDNS:digest>%s</secDNS:digest>`, dsr.Digest))
buf.WriteString(`</secDNS:dsData>`)
}
buf.WriteString(`</secDNS:add>`)
}
buf.WriteString(`</secDNS:update>`)
buf.WriteString(`</extension>`)
buf.WriteString(xmlCommandSuffix)
return nil
}
type DomainUpdateResponse struct {
}
func init() {
// Default EPP check data
//path := "epp > response > resData > " + ObjDomain + " infData"
}