4 #NIC_ClientID='0dc0xxxxxxxxxxxxxxxxxxxxxxxxce88'
5 #NIC_ClientSecret='3LTtxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxnuW8'
6 #NIC_Username="000000/NIC-D"
7 #NIC_Password="xxxxxxx"
9 NIC_Api
="https://api.nic.ru"
15 if ! _nic_get_authtoken save
; then
16 _err
"get NIC auth token failed"
20 _debug
"First detect the root zone"
21 if ! _get_root
"$fulldomain"; then
26 _debug _sub_domain
"$_sub_domain"
27 _debug _domain
"$_domain"
28 _debug _service
"$_service"
31 if ! _nic_rest PUT
"services/$_service/zones/$_domain/records" "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><request><rr-list><rr><name>$_sub_domain</name><type>TXT</type><txt><string>$txtvalue</string></txt></rr></rr-list></request>"; then
32 _err
"Add TXT record error"
36 if ! _nic_rest POST
"services/$_service/zones/$_domain/commit" ""; then
46 if ! _nic_get_authtoken
; then
47 _err
"get NIC auth token failed"
51 if ! _get_root
"$fulldomain"; then
56 _debug _sub_domain
"$_sub_domain"
57 _debug _domain
"$_domain"
58 _debug _service
"$_service"
60 if ! _nic_rest GET
"services/$_service/zones/$_domain/records"; then
61 _err
"Get records error"
65 _domain_id
=$
(printf "%s" "$response" |
grep "$_sub_domain" |
grep -- "$txtvalue" |
sed -r "s/.*<rr id=\"(.*)\".*/\1/g")
67 if ! _nic_rest DELETE
"services/$_service/zones/$_domain/records/$_domain_id"; then
68 _err
"Delete record error"
72 if ! _nic_rest POST
"services/$_service/zones/$_domain/commit" ""; then
77 #################### Private functions below ##################################
79 #_nic_get_auth_elements [need2save]
80 _nic_get_auth_elements
() {
83 NIC_ClientID
="${NIC_ClientID:-$(_readaccountconf_mutable NIC_ClientID)}"
84 NIC_ClientSecret
="${NIC_ClientSecret:-$(_readaccountconf_mutable NIC_ClientSecret)}"
85 NIC_Username
="${NIC_Username:-$(_readaccountconf_mutable NIC_Username)}"
86 NIC_Password
="${NIC_Password:-$(_readaccountconf_mutable NIC_Password)}"
88 ## for backward compatibility
89 if [ -z "$NIC_ClientID" ] ||
[ -z "$NIC_ClientSecret" ]; then
90 NIC_Token
="${NIC_Token:-$(_readaccountconf_mutable NIC_Token)}"
91 _debug NIC_Token
"$NIC_Token"
92 if [ -n "$NIC_Token" ]; then
93 _two_values
="$(echo "${NIC_Token}" | _dbase64)"
94 _debug _two_values
"$_two_values"
95 NIC_ClientID
=$
(echo "$_two_values" | cut
-d':' -f1)
96 NIC_ClientSecret
=$
(echo "$_two_values" | cut
-d':' -f2-)
97 _debug restored_NIC_ClientID
"$NIC_ClientID"
98 _debug restored_NIC_ClientSecret
"$NIC_ClientSecret"
102 if [ -z "$NIC_ClientID" ] ||
[ -z "$NIC_ClientSecret" ] ||
[ -z "$NIC_Username" ] ||
[ -z "$NIC_Password" ]; then
107 _err
"You must export variables: NIC_ClientID, NIC_ClientSecret, NIC_Username and NIC_Password"
111 if [ "$_need2save" ]; then
112 _saveaccountconf_mutable NIC_ClientID
"$NIC_ClientID"
113 _saveaccountconf_mutable NIC_ClientSecret
"$NIC_ClientSecret"
114 _saveaccountconf_mutable NIC_Username
"$NIC_Username"
115 _saveaccountconf_mutable NIC_Password
"$NIC_Password"
118 NIC_BasicAuth
=$
(printf "%s:%s" "${NIC_ClientID}" "${NIC_ClientSecret}" | _base64
)
119 _debug NIC_BasicAuth
"$NIC_BasicAuth"
123 #_nic_get_authtoken [need2save]
124 _nic_get_authtoken
() {
127 if ! _nic_get_auth_elements
"$_need2save"; then
131 _info
"Getting NIC auth token"
133 export _H1
="Authorization: Basic ${NIC_BasicAuth}"
134 export _H2
="Content-Type: application/x-www-form-urlencoded"
136 res
=$
(_post
"grant_type=password&username=${NIC_Username}&password=${NIC_Password}&scope=%28GET%7CPUT%7CPOST%7CDELETE%29%3A%2Fdns-master%2F.%2B" "$NIC_Api/oauth/token" "" "POST")
137 if _contains
"$res" "access_token"; then
138 _auth_token
=$
(printf "%s" "$res" | cut
-d , -f2 |
tr -d "\"" |
sed "s/access_token://")
139 _info
"Token received"
140 _debug _auth_token
"$_auth_token"
151 if ! _nic_rest GET
"zones"; then
155 _all_domains
=$
(printf "%s" "$response" |
grep "idn-name" |
sed -r "s/.*idn-name=\"(.*)\" name=.*/\1/g")
156 _debug2 _all_domains
"$_all_domains"
159 h
=$
(printf "%s" "$domain" | cut
-d .
-f "$i"-100)
166 if _contains
"$_all_domains" "^$h$"; then
167 _sub_domain
=$
(printf "%s" "$domain" | cut
-d .
-f 1-$p)
169 _service
=$
(printf "%s" "$response" |
grep -m 1 "idn-name=\"$_domain\"" |
sed -r "s/.*service=\"(.*)\".*$/\1/")
184 export _H1
="Content-Type: application/xml"
185 export _H2
="Authorization: Bearer $_auth_token"
187 if [ "$m" != "GET" ]; then
189 response
=$
(_post
"$data" "$NIC_Api/dns-master/$ep" "" "$m")
191 response
=$
(_get
"$NIC_Api/dns-master/$ep")
194 if _contains
"$response" "<errors>"; then
195 error
=$
(printf "%s" "$response" |
grep "error code" |
sed -r "s/.*<error code=.*>(.*)<\/error>/\1/g")
200 if ! _contains
"$response" "<status>success</status>"; then
203 _debug2 response
"$response"