#!/usr/bin/env sh # #PLESK_Host="host.com" # #PLESK_User="sdfsdfsdfljlbjkljlkjsdfoiwje" # #PLESK_Password="xxxx@sss.com" ######## Public functions ##################### #Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs" dns_plesk_add() { fulldomain=$1 txtvalue=$2 if ! init_config; then return 1 fi _debug "First detect the root zone" if ! _get_root "$fulldomain"; then _err "invalid domain" return 1 fi _debug _domain_id "$_domain_id" _debug _sub_domain "$_sub_domain" _debug _domain "$_domain" _info "Adding record" add_txt_record "$_domain_id" "$_sub_domain" "$txtvalue" } #fulldomain txtvalue dns_plesk_rm() { fulldomain=$1 txtvalue=$2 if ! init_config; then return 1 fi _debug "First detect the root zone" if ! _get_root "$fulldomain"; then _err "invalid domain" return 1 fi _debug _domain_id "$_domain_id" _debug _sub_domain "$_sub_domain" _debug _domain "$_domain" _info "Remove record" del_txt_record "$_domain_id" "$fulldomain" } #################### Private functions below ################################## function init_config(){ PLESK_Host="${PLESK_Host:-$(_readaccountconf_mutable PLESK_Host)}" PLESK_User="${PLESK_User:-$(_readaccountconf_mutable PLESK_User)}" PLESK_Password="${PLESK_Password:-$(_readaccountconf_mutable PLESK_Password)}" if [ -z "$PLESK_Host" ] || [ -z "$PLESK_User" ] || [ -z "$PLESK_Password" ]; then PLESK_Host="" PLESK_User="" PLESK_Password="" _err "You didn't specify a plesk credentials yet." _err "Please create the key and try again." return 1 fi #save the api key and email to the account conf file. _saveaccountconf_mutable PLESK_Host "$PLESK_Host" _saveaccountconf_mutable PLESK_User "$PLESK_User" _saveaccountconf_mutable PLESK_Password "$PLESK_Password" } function plesk_api() { request="$1" export _H1="HTTP_AUTH_LOGIN: $PLESK_User" export _H2="HTTP_AUTH_PASSWD: $PLESK_Password" export _H3="content-Type: text/xml" export _H4="HTTP_PRETTY_PRINT: true" response="$(_post "$request" "https://$PLESK_Host:8443/enterprise/control/agent.php" "" "POST")" _debug2 "response" "$response" return 0 } function add_txt_record() { site_id=$1 subdomain=$2 txt_value=$3 request="$site_idTXT$subdomain$txt_value" plesk_api "$request" if ! _contains "${response}" 'ok'; then return 1 fi return 0 } function del_txt_record() { site_id=$1 fulldomain="${2}." get_dns_record_list "$site_id" j=0 for item in "${_plesk_dns_host[@]}" do _debug "item" "$item" if [ "$fulldomain" = "$item" ]; then _dns_record_id=${_plesk_dns_ids[$j]} fi j=$(_math "$j" +1) done _debug "record id" "$_dns_record_id" request="$_dns_record_id" plesk_api "$request" if ! _contains "${response}" 'ok'; then return 1 fi return 0 } #fetches the domain list for the given account function get_domain_list() { request='' plesk_api "$request" if ! _contains "${response}" 'ok'; then return 1 fi _plesk_domain_names=($(echo "${response}" | sed -nr 's_(.*)_\1_p')); _plesk_domain_ids=($(echo "${response}"| sed -nr 's_(.*)_\1_p')); _plesk_domain_ids=("${_plesk_domain_ids[@]:1}") #remove first entry because it is the customer id } #fetches all dns records fo rthe given sit function get_dns_record_list() { siteid=$1 request="$siteid" plesk_api "$request" if ! _contains "${response}" 'ok'; then return 1 fi _plesk_dns_host=($(echo "${response}" | sed -nr 's_(.*)_\1_p')); _plesk_dns_ids=($(echo "${response}"| sed -nr 's_(.*)_\1_p')); } #_acme-challenge.www.domain.com #returns # _sub_domain=_acme-challenge.www # _domain=domain.com # _domain_id=sdjkglgdfewsdfg _get_root() { domain=$1 i=2 p=1 get_domain_list while true; do h=$(printf "%s" "$domain" | cut -d . -f $i-100) _debug h "$h" if [ -z "$h" ]; then #not valid return 1 fi j=0 for item in "${_plesk_domain_names[@]}" do _debug "item" "$item" if [ "$h" = "$item" ]; then _sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p) _domain="$h" _domain_id=${_plesk_domain_ids[$j]} return 0 fi j=$(_math "$j" +1) done p=$i i=$(_math "$i" + 1) done return 1 }