Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
dc5c220e
Unverified
Commit
dc5c220e
authored
Oct 16, 2019
by
rserpent
Committed by
GitHub
Oct 16, 2019
Browse files
dns_nic init
parent
54143ae6
Changes
1
Show whitespace changes
Inline
Side-by-side
dnsapi/dns_nic.sh
0 → 100644
View file @
dc5c220e
#!/usr/bin/env sh
#
#NIC_Token="sdfsdfsdfljlbjkljlkjsdfoiwjedfglgkdlfgkfgldfkg"
#
#NIC_Username="000000/NIC-D"
#NIC_Password="xxxxxxx"
NIC_Api
=
"https://api.nic.ru"
dns_nic_add
()
{
fulldomain
=
"
${
1
}
"
txtvalue
=
"
${
2
}
"
NIC_Token
=
"
${
NIC_Token
:-
$(
_readaccountconf_mutable NIC_Token
)
}
"
NIC_Username
=
"
${
NIC_Username
:-
$(
_readaccountconf_mutable NIC_Username
)
}
"
NIC_Password
=
"
${
NIC_Password
:-
$(
_readaccountconf_mutable NIC_Password
)
}
"
if
[
-z
"
$NIC_Token
"
]
||
[
-z
"
$NIC_Username
"
]
||
[
-z
"
$NIC_Password
"
]
;
then
NIC_Token
=
""
NIC_Username
=
""
NIC_Password
=
""
_err
"You must export variables: NIC_Token, NIC_Username and NIC_Password"
return
1
fi
_saveaccountconf_mutable NIC_Customer
"
$NIC_Token
"
_saveaccountconf_mutable NIC_Username
"
$NIC_Username
"
_saveaccountconf_mutable NIC_Password
"
$NIC_Password
"
if
!
_nic_get_authtoken
"
$NIC_Username
"
"
$NIC_Password
"
"
$NIC_Token
"
;
then
_err
"get NIC auth token failed"
return
1
fi
_debug
"First detect the root zone"
if
!
_get_root
"
$fulldomain
"
;
then
_err
"Invalid domain"
return
1
fi
_debug _sub_domain
"
$_sub_domain
"
_debug _domain
"
$_domain
"
_debug _service
"
$_service
"
_info
"Adding record"
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
_err
"Add TXT record error"
return
1
fi
if
!
_nic_rest POST
"services/
$_service
/zones/
$_domain
/commit"
""
;
then
return
1
fi
_info
"Added, OK"
}
dns_nic_rm
()
{
fulldomain
=
"
${
1
}
"
txtvalue
=
"
${
2
}
"
NIC_Token
=
"
${
NIC_Token
:-
$(
_readaccountconf_mutable NIC_Token
)
}
"
NIC_Username
=
"
${
NIC_Username
:-
$(
_readaccountconf_mutable NIC_Username
)
}
"
NIC_Password
=
"
${
NIC_Password
:-
$(
_readaccountconf_mutable NIC_Password
)
}
"
if
[
-z
"
$NIC_Token
"
]
||
[
-z
"
$NIC_Username
"
]
||
[
-z
"
$NIC_Password
"
]
;
then
NIC_Token
=
""
NIC_Username
=
""
NIC_Password
=
""
_err
"You must export variables: NIC_Token, NIC_Username and NIC_Password"
return
1
fi
if
!
_nic_get_authtoken
"
$NIC_Username
"
"
$NIC_Password
"
"
$NIC_Token
"
;
then
_err
"get NIC auth token failed"
return
1
fi
if
!
_get_root
"
$fulldomain
"
;
then
_err
"Invalid domain"
return
1
fi
_debug _sub_domain
"
$_sub_domain
"
_debug _domain
"
$_domain
"
_debug _service
"
$_service
"
if
!
_nic_rest GET
"services/
$_service
/zones/
$_domain
/records"
;
then
_err
"Get records error"
return
1
fi
_domain_id
=
$(
printf
"%s"
"
$response
"
|
grep
"
$_sub_domain
"
|
grep
"
$txtvalue
"
|
sed
-r
"s/.*<rr id=
\"
(.*)
\"
.*/
\1
/g"
)
if
!
_nic_rest DELETE
"services/
$_service
/zones/
$_domain
/records/
$_domain_id
"
;
then
_err
"Delete record error"
return
1
fi
if
!
_nic_rest POST
"services/
$_service
/zones/
$_domain
/commit"
""
;
then
return
1
fi
}
#################### Private functions below ##################################
_nic_get_authtoken
()
{
username
=
"
$1
"
password
=
"
$2
"
token
=
"
$3
"
_info
"Getting NIC auth token"
export
_H1
=
"Authorization: Basic
$token
"
export
_H2
=
"Content-Type: application/x-www-form-urlencoded"
res
=
"
$(
_post
"grant_type=password&username=
$username
&password=
$password
&scope=%28GET%7CPUT%7CPOST%7CDELETE%29%3A%2Fdns-master%2F.%2B"
"
$NIC_Api
/oauth/token"
""
"POST"
)
"
if
_contains
"
$res
"
"access_token"
;
then
_auth_token
=
$(
printf
"%s"
"
$res
"
|
cut
-d
,
-f2
|
tr
-d
"
\"
"
|
sed
"s/access_token://"
)
_info
"Token received"
_debug _auth_token
"
$_auth_token
"
return
0
fi
return
1
}
_get_root
()
{
domain
=
"
$1
"
i
=
1
p
=
1
if
!
_nic_rest GET
"zones"
;
then
return
1
fi
_all_domains
=
$(
printf
"%s"
"
$response
"
|
grep
"idn-name"
|
sed
-r
"s/.*idn-name=
\"
(.*)
\"
name=.*/
\1
/g"
)
_debug2 _all_domains
"
$_all_domains
"
while
true
;
do
h
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
"
$i
"
-100
)
_debug h
"
$h
"
if
[
-z
"
$h
"
]
;
then
return
1
fi
if
_contains
"
$_all_domains
"
"^
$h
$"
;
then
_sub_domain
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
1-
$p
)
_domain
=
$h
_service
=
$(
printf
"%s"
"
$response
"
|
grep
"
$_domain
"
|
sed
-r
"s/.*service=
\"
(.*)
\"
.*
$/
\1
/"
)
return
0
fi
p
=
"
$i
"
i
=
$(
_math
"
$i
"
+ 1
)
done
return
1
}
_nic_rest
()
{
m
=
"
$1
"
ep
=
"
$2
"
data
=
"
$3
"
_debug
"
$ep
"
export
_H1
=
"Content-Type: application/xml"
export
_H2
=
"Authorization: Bearer
$_auth_token
"
if
[
"
$m
"
!=
"GET"
]
;
then
_debug data
"
$data
"
response
=
$(
_post
"
$data
"
"
$NIC_Api
/dns-master/
$ep
"
""
"
$m
"
)
else
response
=
$(
_get
"
$NIC_Api
/dns-master/
$ep
"
)
fi
if
_contains
"
$response
"
"<errors>"
;
then
error
=
$(
printf
"%s"
"
$response
"
|
grep
"error code"
|
sed
-r
"s/.*<error code=.*>(.*)<
\/
error>/
\1
/g"
)
_err
"Error:
$error
"
return
1
fi
if
!
_contains
"
$response
"
"<status>success</status>"
;
then
return
1
fi
_debug2 response
"
$response
"
return
0
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment