136 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#/bin/bash
 | 
						|
 | 
						|
#koi: gestion des records dns sur AlwaysData 
 | 
						|
#ki: fanch&gaël&fab
 | 
						|
#kan: 06/04/2025
 | 
						|
 | 
						|
#doc: https://api.alwaysdata.com/v1/record/doc/
 | 
						|
#doc: https://help.alwaysdata.com/fr/api/ 
 | 
						|
 | 
						|
KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
 | 
						|
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
 | 
						|
setKazVars
 | 
						|
. "${DOCKERS_ENV}"
 | 
						|
 | 
						|
cd "${KAZ_ROOT}"
 | 
						|
export PRG="$0"
 | 
						|
export IP="127.0.0.1"
 | 
						|
export ETC_HOSTS="/etc/hosts"
 | 
						|
 | 
						|
# no more export in .env
 | 
						|
export $(set | grep "domain=")
 | 
						|
 | 
						|
#TODO: récupérer la liste des services kaz au lieu des les écrire en dur
 | 
						|
declare -a forbidenName
 | 
						|
forbidenName=(${calcHost} calc ${cloudHost} bureau ${dateHost} date ${dokuwikiHost} dokuwiki ${fileHost} file ${ldapHost} ${pahekoHost} ${gitHost} ${gravHost} ${matterHost} ${officeHost} collabora ${padHost} ${sympaHost} listes ${webmailHost} ${wordpressHost} www ${vigiloHost} form)
 | 
						|
 | 
						|
export FORCE="NO"
 | 
						|
export CMD=""
 | 
						|
export SIMU=""
 | 
						|
 | 
						|
usage(){
 | 
						|
    echo "Usage: ${PRG} list [sub-domain...]"
 | 
						|
    echo "       ${PRG} [-n] [-f] {add/del} sub-domain..."
 | 
						|
    echo "  -h help"
 | 
						|
    echo "  -n simulation"
 | 
						|
    echo "  -f force protected domain"
 | 
						|
    exit 1
 | 
						|
}
 | 
						|
 | 
						|
. "${KAZ_KEY_DIR}/env-alwaysdata"
 | 
						|
 
 | 
						|
if [[ -z "${ALWAYSDATA_TOKEN}" ]] ; then
 | 
						|
    echo "no ALWAYSDATA_TOKEN set in ${KAZ_KEY_DIR}/env-alwaysdata"
 | 
						|
    usage
 | 
						|
fi
 | 
						|
 
 | 
						|
DOMAIN_ID=$(curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" ${ALWAYSDATA_API}/domain/?name=${domain} | jq '.[0].id')
 | 
						|
 | 
						|
for ARG in $@
 | 
						|
do
 | 
						|
    case "${ARG}" in
 | 
						|
	'-h' | '-help' )
 | 
						|
	    usage
 | 
						|
	    ;;
 | 
						|
	'-f' )
 | 
						|
	    shift
 | 
						|
	    export FORCE="YES"
 | 
						|
	    ;;
 | 
						|
	'-n' )
 | 
						|
	    shift
 | 
						|
	    export SIMU="echo"
 | 
						|
	    ;;
 | 
						|
	'list'|'add'|'del' )
 | 
						|
	    shift
 | 
						|
	    CMD="${ARG}"
 | 
						|
	    break
 | 
						|
	    ;;
 | 
						|
	* )
 | 
						|
	    usage
 | 
						|
	    ;;
 | 
						|
    esac
 | 
						|
done
 | 
						|
 | 
						|
if [ -z "${CMD}" ]; then
 | 
						|
    usage
 | 
						|
fi
 | 
						|
 | 
						|
list(){
 | 
						|
  TARGET=$@
 | 
						|
  LISTE=$(curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/?domain=${DOMAIN_ID}&type=CNAME&name=${TARGET}" | jq '.[] | "\(.name):\(.value)"')
 | 
						|
  echo ${LISTE}
 | 
						|
}
 | 
						|
 | 
						|
saveDns () {
 | 
						|
  mkdir -p /root/dns
 | 
						|
  ${SIMU} curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/?domain=${DOMAIN_ID}" -o /root/dns/dns_save_$(date +'%Y%m%d%H%M%S')
 | 
						|
}
 | 
						|
 | 
						|
badName(){
 | 
						|
    [[ -z "$1" ]] && return 0;
 | 
						|
    for item in "${forbidenName[@]}"; do
 | 
						|
	[[ "${item}" == "$1" ]] && [[ "${FORCE}" == "NO" ]] && return 0
 | 
						|
    done
 | 
						|
    return 1
 | 
						|
}
 | 
						|
 | 
						|
add(){
 | 
						|
    if [ $# -lt 1 ]; then
 | 
						|
	exit
 | 
						|
    fi
 | 
						|
    saveDns $@
 | 
						|
    declare -a ADDED
 | 
						|
    for ARG in $@
 | 
						|
    do
 | 
						|
	if badName "${ARG}" ; then
 | 
						|
	    echo "can't manage '${ARG}'. Use -f option"
 | 
						|
	    continue
 | 
						|
	fi
 | 
						|
        ${SIMU} curl -s -X POST -d "{\"domain\":\"${DOMAIN_ID}\", \"type\":\"CNAME\", \"name\":\"${ARG}\", \"value\":\"${site}.${domain}\"}" --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/"
 | 
						|
	ADDED+=("${ARG}")
 | 
						|
    done
 | 
						|
    echo "Domains added to ${domain}: ${ADDED[@]}"
 | 
						|
} 
 | 
						|
 | 
						|
del(){
 | 
						|
 | 
						|
    if [ $# -lt 1 ]; then
 | 
						|
	exit
 | 
						|
    fi
 | 
						|
    saveDns $@
 | 
						|
    declare -a REMOVED
 | 
						|
    for ARG in $@
 | 
						|
    do
 | 
						|
	if badName "${ARG}" ; then
 | 
						|
	    echo "can't manage '${ARG}'. Use -f option"
 | 
						|
	    continue
 | 
						|
	fi
 | 
						|
	RECORD_ID=$(curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/?name=${ARG}&type=CNAME&domain=${DOMAIN_ID}" | jq ".[] | select(.name==\"${ARG}\").id")
 | 
						|
	${SIMU} curl -s -X DELETE --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/${RECORD_ID}/"
 | 
						|
	REMOVED+=("${ARG}")
 | 
						|
    done
 | 
						|
    echo "Domains removed from ${domain}: ${REMOVED[@]}"
 | 
						|
}
 | 
						|
 | 
						|
${CMD} $*
 |