remove: старая реализация
This commit is contained in:
298
ihc-dns.sh
298
ihc-dns.sh
@@ -1,298 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
COOKIE_JAR=/tmp/ihc-cookie.txt
|
|
||||||
DNS_PAGE=/tmp/ihc-dns.html
|
|
||||||
V_USER=
|
|
||||||
V_PASSWORD=
|
|
||||||
V_ACTION=
|
|
||||||
V_DOMAIN=
|
|
||||||
V_NAME=
|
|
||||||
V_TYPE=
|
|
||||||
V_CONTENT=
|
|
||||||
V_RECORD=
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
function auth() {
|
|
||||||
# Авторизация
|
|
||||||
|
|
||||||
local __login=$1
|
|
||||||
local __password=$2
|
|
||||||
|
|
||||||
local __result=$(curl -s -X POST 'https://my.ihc.ru/j_spring_security_check?ajax=true' \
|
|
||||||
--cookie-jar $COOKIE_JAR \
|
|
||||||
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
|
|
||||||
-H 'Referer: https://my.ihc.ru/login/auth' \
|
|
||||||
--data-raw "j_username=${__login}&j_password=${__password}&recaptcha=&ihccaptcha=" \
|
|
||||||
| jq -r '.alert.type')
|
|
||||||
|
|
||||||
if [[ $__result != 'none' ]]; then
|
|
||||||
echo 'ERROR AUTH'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_domains() {
|
|
||||||
# Получить список доступных доменов
|
|
||||||
# RETURN
|
|
||||||
# {
|
|
||||||
# "id": 1234567,
|
|
||||||
# "domain": "example.com"
|
|
||||||
# }
|
|
||||||
|
|
||||||
curl -s -X GET 'https://my.ihc.ru/dnsZone/list' \
|
|
||||||
--cookie $COOKIE_JAR \
|
|
||||||
--cookie-jar $COOKIE_JAR \
|
|
||||||
> $DNS_PAGE
|
|
||||||
|
|
||||||
xmllint --html --xpath '//li[@class="zoneList__zone "]/*/a' $DNS_PAGE 2>/dev/null \
|
|
||||||
| perl -ne 'chop($_); m#href="/dnsZone/index/(.+?)">(.+?)</a>#; print "{\"id\": $1, \"domain\": \"$2\"}\n"' \
|
|
||||||
| jq
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_domain() {
|
|
||||||
# RETURN
|
|
||||||
# {
|
|
||||||
# "id": 1234567,
|
|
||||||
# "domain": "example.com"
|
|
||||||
# }
|
|
||||||
|
|
||||||
local __domain=$1
|
|
||||||
|
|
||||||
get_domains | jq '. | select(.domain == "'$__domain'")'
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_domain_records() {
|
|
||||||
local __domain_id=$1
|
|
||||||
|
|
||||||
curl -s -X POST \
|
|
||||||
--cookie $COOKIE_JAR \
|
|
||||||
--cookie-jar $COOKIE_JAR \
|
|
||||||
-H 'Accept: application/json, text/javascript, */*; q=0.01' \
|
|
||||||
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
|
|
||||||
-H 'Referer: https://my.ihc.ru/dnsZone/index/'$__domain_id \
|
|
||||||
--data-raw 'id='$__domain_id \
|
|
||||||
'https://my.ihc.ru/dnsZone/records' \
|
|
||||||
| jq '.data.records[]'
|
|
||||||
}
|
|
||||||
|
|
||||||
function create_record() {
|
|
||||||
local __domain_id=$1
|
|
||||||
local __type=$2
|
|
||||||
local __content=$3
|
|
||||||
local __name=$4
|
|
||||||
|
|
||||||
curl -s -X POST \
|
|
||||||
--cookie $COOKIE_JAR \
|
|
||||||
--cookie-jar $COOKIE_JAR \
|
|
||||||
-H 'Accept: application/json, text/javascript, */*; q=0.01' \
|
|
||||||
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
|
|
||||||
-H 'Referer: https://my.ihc.ru/dnsZone/index/'$__domain_id \
|
|
||||||
-H 'X-Requested-With: XMLHttpRequest' \
|
|
||||||
--data-raw 'name='$__name'&type='$__type'&content='$__content'&id='$__domain_id \
|
|
||||||
'https://my.ihc.ru/dnsZone/createRecord'
|
|
||||||
}
|
|
||||||
|
|
||||||
function edit_record() {
|
|
||||||
local __domain_id=$1
|
|
||||||
local __record_id=$2
|
|
||||||
local __type=$3
|
|
||||||
local __content=$4
|
|
||||||
local __name=$5
|
|
||||||
|
|
||||||
curl -s -X POST \
|
|
||||||
--cookie $COOKIE_JAR \
|
|
||||||
--cookie-jar $COOKIE_JAR \
|
|
||||||
-H 'Accept: application/json, text/javascript, */*; q=0.01' \
|
|
||||||
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
|
|
||||||
-H 'Referer: https://my.ihc.ru/dnsZone/index/'$__domain_id \
|
|
||||||
-H 'X-Requested-With: XMLHttpRequest' \
|
|
||||||
--data-raw 'name='$__name'&content='$__content'&id='$__domain_id'&recordId='$__record_id'&type='$__type \
|
|
||||||
'https://my.ihc.ru/dnsZone/updateRecord'
|
|
||||||
}
|
|
||||||
|
|
||||||
function delete_record() {
|
|
||||||
local __domain_id=$1
|
|
||||||
local __record_id=$2
|
|
||||||
|
|
||||||
curl -s -X POST \
|
|
||||||
--cookie $COOKIE_JAR \
|
|
||||||
--cookie-jar $COOKIE_JAR \
|
|
||||||
-H 'Accept: application/json, text/javascript, */*; q=0.01' \
|
|
||||||
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
|
|
||||||
-H 'Referer: https://my.ihc.ru/dnsZone/index/'$__domain_id \
|
|
||||||
-H 'X-Requested-With: XMLHttpRequest' \
|
|
||||||
--data-raw 'id='$__domain_id'&recordId='$__record_id \
|
|
||||||
'https://my.ihc.ru/dnsZone/deleteRecord'
|
|
||||||
}
|
|
||||||
|
|
||||||
function clean() {
|
|
||||||
rm $COOKIE_JAR
|
|
||||||
rm $DNS_PAGE
|
|
||||||
}
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
function action_list() {
|
|
||||||
if [[ -z "$V_DOMAIN" ]]; then
|
|
||||||
auth "$V_USER" "$V_PASSWORD"
|
|
||||||
get_domains
|
|
||||||
clean
|
|
||||||
else
|
|
||||||
auth "$V_USER" "$V_PASSWORD"
|
|
||||||
get_domain_records $(get_domains | jq -r '. | select(.domain == "'$V_DOMAIN'") | .id')
|
|
||||||
clean
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function action_add() {
|
|
||||||
if [[ -z "$V_DOMAIN" ]]; then
|
|
||||||
echo "Требуется указать домен"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$V_TYPE" ]]; then
|
|
||||||
echo "Требуется указать тип контента"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$V_CONTENT" ]]; then
|
|
||||||
echo "Требуется указать контент"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
auth "$V_USER" "$V_PASSWORD"
|
|
||||||
local __domain_id=$(get_domains | jq -r '. | select(.domain == "'$V_DOMAIN'") | .id')
|
|
||||||
create_record $__domain_id "$V_TYPE" "$V_CONTENT" "$V_NAME" | jq
|
|
||||||
clean
|
|
||||||
}
|
|
||||||
|
|
||||||
function action_delete() {
|
|
||||||
if [[ -z "$V_DOMAIN" ]]; then
|
|
||||||
echo "Требуется указать домен"
|
|
||||||
exit 3
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$V_RECORD" ]]; then
|
|
||||||
echo "Требуется указать ID записи"
|
|
||||||
exit 3
|
|
||||||
fi
|
|
||||||
|
|
||||||
auth "$V_USER" "$V_PASSWORD"
|
|
||||||
local __domain_id=$(get_domains | jq -r '. | select(.domain == "'$V_DOMAIN'") | .id')
|
|
||||||
delete_record $__domain_id $V_RECORD | jq
|
|
||||||
clean
|
|
||||||
}
|
|
||||||
|
|
||||||
function action_edit() {
|
|
||||||
if [[ -z "$V_DOMAIN" ]]; then
|
|
||||||
echo "Требуется указать домен"
|
|
||||||
exit 4
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$V_RECORD" ]]; then
|
|
||||||
echo "Требуется указать ID записи"
|
|
||||||
exit 4
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$V_TYPE" ]]; then
|
|
||||||
echo "Требуется указать тип контента"
|
|
||||||
exit 4
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$V_CONTENT" ]]; then
|
|
||||||
echo "Требуется указать контент"
|
|
||||||
exit 4
|
|
||||||
fi
|
|
||||||
|
|
||||||
auth "$V_USER" "$V_PASSWORD"
|
|
||||||
local __domain_id=$(get_domains | jq -r '. | select(.domain == "'$V_DOMAIN'") | .id')
|
|
||||||
edit_record $__domain_id $V_RECORD "$V_TYPE" "$V_CONTENT" "$V_NAME" | jq
|
|
||||||
clean
|
|
||||||
}
|
|
||||||
|
|
||||||
function entry_point() {
|
|
||||||
if [[ -z "$V_USER" ]] || [[ -z "$V_PASSWORD" ]]; then
|
|
||||||
echo "Требуется указать логин и пароль"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$V_ACTION" ]]; then
|
|
||||||
echo "Треуется действие"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$V_ACTION" in
|
|
||||||
"list") action_list ;;
|
|
||||||
"add") action_add ;;
|
|
||||||
"edit") action_edit ;;
|
|
||||||
"delete") action_delete ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
# https://www.baeldung.com/linux/bash-parse-command-line-arguments
|
|
||||||
|
|
||||||
VALID_ARGS=$(getopt -o '' --long user:,password:,domain:,list,add,edit,name:,type:,content:,delete,record: -- "$@")
|
|
||||||
if [[ $? -ne 0 ]]; then
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
eval set -- "$VALID_ARGS"
|
|
||||||
|
|
||||||
while [ : ]; do
|
|
||||||
case "$1" in
|
|
||||||
--user)
|
|
||||||
V_USER=$2
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--password)
|
|
||||||
V_PASSWORD=$2
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--domain)
|
|
||||||
V_DOMAIN=$2
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--list)
|
|
||||||
V_ACTION="list"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
--add)
|
|
||||||
V_ACTION="add"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
--edit)
|
|
||||||
V_ACTION="edit"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
--name)
|
|
||||||
V_NAME=$2
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--type)
|
|
||||||
V_TYPE=$2
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--content)
|
|
||||||
V_CONTENT=$2
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--delete)
|
|
||||||
V_ACTION="delete"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
--record)
|
|
||||||
V_RECORD=$2
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
entry_point
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user