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