This repository has been archived by the owner on Mar 12, 2020. It is now read-only.
/
domain.go
162 lines (143 loc) · 4.86 KB
/
domain.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
package models
import (
"errors"
"fmt"
"github.com/jezman/yapdd/pdd"
"github.com/jezman/yapdd/utils"
"github.com/levigross/grequests"
)
// Domain struct
type Domain struct {
Accounts []*Account `json:"accounts"` // user account
Aliases []string `json:"aliases"` // list of domain aliases
CheckResults string `json:"check_results"` // last check result
Country string `json:"country"` // interface language for mailboxes by default.
Delegated string `json:"delegated"` // status of the domain name delegation on the Yandex servers
DKIM DKIM
Domain string `json:"domain"` // domain name
EmailsCount int `json:"emails-count"` // number of available mailboxes
EmailsMaxCount int `json:"emails-max-count"` // maximum number of mailboxes that can be created for the domain
Error string `json:"error"` // error message
ImapEnabled int `json:"imap_enabled"` // imap status
LastCheck string `json:"last_check"` // date and time of last check
Logo bool `json:"logo_enabled"` // presence logo
LogoURL string `json:"logo_url"` // logo URL
Name string `json:"name"` // domain name
NextCheck string `json:"next_check"` // date and time of next check
NoDKIM bool `json:"nodkim"` // a sign that DKIM is not connected
NSDelegated bool `json:"nsdelegated"` // status of the domain name delegation on the Yandex servers
PopEnabled int `json:"pop_enabled"` // pop status
Secrets *Secrets `json:"secrets"` // Secret data test file (or CNAME records)
Status string `json:"status"` // domain status
Success string `json:"success"` // request status
Total int `json:"total"` // total counts of user account
}
// Secrets data struct
type Secrets struct {
Name string `json:"name"` // secret part of the actual file name (or CNAME records)
Content string `json:"content"` // secret contents of the test file
}
// List accounts in domain.
func (d *Domain) List(domainName string) (*Domain, error) {
ro.Params["on_page"] = "1000"
ro.Params["domain"] = domainName
response, err := grequests.Get(pdd.AccountsList, ro)
if err != nil {
return nil, err
}
if err := response.JSON(d); err != nil {
return nil, err
}
return d, nil
}
// Add domain into Yandex PDD.
func (d *Domain) Add(domainName string) (*Domain, error) {
ro.Params["domain"] = domainName
response, err := grequests.Post(pdd.DomainAdd, ro)
if err != nil {
return nil, err
}
if err := response.JSON(d); err != nil {
return nil, err
}
return d, nil
}
// ConnectionStatus gets domain connetion status.
func (d *Domain) ConnectionStatus(domainName string) (*Domain, error) {
ro.Params["domain"] = domainName
response, err := grequests.Get(pdd.DomainStatus, ro)
if err != nil {
return nil, err
}
if err := response.JSON(d); err != nil {
return nil, err
}
return d, nil
}
// Config gets domain settings.
func (d *Domain) Config(domainName string) (*Domain, error) {
ro.Params["domain"] = domainName
response, err := grequests.Get(pdd.DomainConfig, ro)
if err != nil {
return nil, err
}
if err := response.JSON(d); err != nil {
return nil, err
}
return d, nil
}
// Remove domain from YandexPDD.
func (d *Domain) Remove(domainName string) (*Domain, error) {
// generates capcha for confirm remove
capcha := utils.RandomInt(8)
warning := "please confirm domain removed. input: " + capcha + "\n"
// read user confirmation
confirmation := utils.ReadStdIn(warning)
// check confirmation
if confirmation == capcha {
ro.Params["domain"] = domainName
// sends remove request
response, err := grequests.Get(pdd.DomainDelete, ro)
if err != nil {
return nil, err
}
if err := response.JSON(d); err != nil {
return nil, err
}
return d, nil
}
// wrong confirmation
return nil, errors.New("confirmation error")
}
// SetCountry for domain.
func (d *Domain) SetCountry(domainName string) (*Domain, error) {
allowedCountries := map[string]string{
"ru": "Russian",
"en": "English",
"ua": "Український",
"tr": "Türk",
"by": "Беларускі",
"az": "Azərbaycan",
"ro": "Românesc",
"ge": "ქართული",
"kz": "Қазақша",
}
fmt.Println("Choose language:")
for key, val := range allowedCountries {
fmt.Printf("%s - %s\n", key, val)
}
country := utils.ReadStdIn("choose language: ")
if _, ok := allowedCountries[country]; ok {
ro.Params["domain"] = domainName
ro.Params["country"] = country
response, err := grequests.Post(pdd.DomainSetCountry, ro)
if err != nil {
return nil, err
}
if err := response.JSON(d); err != nil {
return nil, err
}
return d, nil
}
return nil, errors.New("wrong language")
}