210 lines
4.9 KiB
Bash
210 lines
4.9 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
# list/ajout/supprime/ un sous-domaine
|
||
|
|
||
|
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=")
|
||
|
|
||
|
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
|
||
|
}
|
||
|
|
||
|
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
|
||
|
|
||
|
. "${KAZ_KEY_DIR}/env-gandi"
|
||
|
|
||
|
if [[ -z "${GANDI_KEY}" ]] ; then
|
||
|
echo
|
||
|
echo "no GANDI_KEY set in ${KAZ_KEY_DIR}/env-gandi"
|
||
|
usage
|
||
|
fi
|
||
|
|
||
|
|
||
|
waitNet () {
|
||
|
if [[ "${domain}" = "kaz.local" ]]; then
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
### wait when error code 503
|
||
|
if [[ $(curl -H "authorization: Apikey ${GANDI_KEY}" --connect-timeout 2 -s -D - "${GANDI_API}" -o /dev/null 2>/dev/null | head -n1) != *200* ]]; then
|
||
|
echo "DNS not available. Please wait..."
|
||
|
while [[ $(curl -H "authorization: Apikey ${GANDI_KEY}" --connect-timeout 2 -s -D - "${GANDI_API}" -o /dev/null 2>/dev/null | head -n1) != *200* ]]
|
||
|
do
|
||
|
sleep 5
|
||
|
done
|
||
|
exit
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
list(){
|
||
|
if [[ "${domain}" = "kaz.local" ]]; then
|
||
|
grep --perl-regex "^${IP}\s.*${domain}" "${ETC_HOSTS}" 2> /dev/null | sed -e "s|^${IP}\s*\([0-9a-z.-]${domain}\)$|\1|g"
|
||
|
return
|
||
|
fi
|
||
|
waitNet
|
||
|
trap 'rm -f "${TMPFILE}"' EXIT
|
||
|
TMPFILE="$(mktemp)" || exit 1
|
||
|
if [[ -n "${SIMU}" ]] ; then
|
||
|
${SIMU} curl -X GET "${GANDI_API}/records" -H "authorization: Apikey ${GANDI_KEY}"
|
||
|
else
|
||
|
curl -X GET "${GANDI_API}/records" -H "authorization: Apikey ${GANDI_KEY}" 2>/dev/null | \
|
||
|
sed "s/,{/\n/g" | \
|
||
|
sed 's/.*rrset_name":"\([^"]*\)".*rrset_values":\["\([^"]*\)".*/\1:\2/g'| \
|
||
|
grep -v '^[_@]'| \
|
||
|
grep -e ":${domain}\.*$" -e ":prod[0-9]*$" > ${TMPFILE}
|
||
|
fi
|
||
|
if [ $# -lt 1 ]; then
|
||
|
cat ${TMPFILE}
|
||
|
else
|
||
|
for ARG in $@
|
||
|
do
|
||
|
cat ${TMPFILE} | grep "${ARG}.*:"
|
||
|
done
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
saveDns () {
|
||
|
for ARG in $@ ; do
|
||
|
if [[ "${ARG}" =~ .local$ ]] ; then
|
||
|
echo "${PRG}: old fasion style (remove .local at the end)"
|
||
|
usage;
|
||
|
fi
|
||
|
if [[ "${ARG}" =~ .bzh$ ]] ; then
|
||
|
echo "${PRG}: old fasion style (remove .bzh at the end)"
|
||
|
usage;
|
||
|
fi
|
||
|
if [[ "${ARG}" =~ .dev$ ]] ; then
|
||
|
echo "${PRG}: old fasion style (remove .dev at the end)"
|
||
|
usage;
|
||
|
fi
|
||
|
done
|
||
|
if [[ "${domain}" = "kaz.local" ]]; then
|
||
|
return
|
||
|
fi
|
||
|
waitNet
|
||
|
${SIMU} curl -X POST "${GANDI_API}/snapshots" -H "authorization: Apikey ${GANDI_KEY}" 2>/dev/null
|
||
|
}
|
||
|
|
||
|
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
|
||
|
case "${domain}" in
|
||
|
kaz.local )
|
||
|
if grep -q --perl-regex "^${IP}.*[ \t]${ARG}.${domain}" "${ETC_HOSTS}" 2> /dev/null ; then
|
||
|
break
|
||
|
fi
|
||
|
if grep -q --perl-regex "^${IP}[ \t]" "${ETC_HOSTS}" 2> /dev/null ; then
|
||
|
${SIMU} sudo sed -i -e "0,/^${IP}[ \t]/s/^\(${IP}[ \t]\)/\1${ARG}.${domain} /g" "${ETC_HOSTS}"
|
||
|
else
|
||
|
${SIMU} sudo sed -i -e "$ a ${IP}\t${ARG}.${domain}" "${ETC_HOSTS}" 2> /dev/null
|
||
|
fi
|
||
|
;;
|
||
|
*)
|
||
|
${SIMU} curl -X POST "${GANDI_API}/records" -H "authorization: Apikey ${GANDI_KEY}" -H 'content-type: application/json' -d '{"rrset_type":"CNAME", "rrset_name":"'${ARG}'", "rrset_values":["'${site}'"]}'
|
||
|
echo
|
||
|
;;
|
||
|
esac
|
||
|
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
|
||
|
case "${domain}" in
|
||
|
kaz.local )
|
||
|
if !grep -q --perl-regex "^${IP}.*[ \t]${ARG}.${domain}" "${ETC_HOSTS}" 2> /dev/null ; then
|
||
|
break
|
||
|
fi
|
||
|
${SIMU} sudo sed -i -e "/^${IP}[ \t]*${ARG}.${domain}[ \t]*$/d" \
|
||
|
-e "s|^\(${IP}.*\)[ \t]${ARG}.${domain}|\1|g" "${ETC_HOSTS}"
|
||
|
;;
|
||
|
* )
|
||
|
${SIMU} curl -X DELETE "${GANDI_API}/records/${ARG}" -H "authorization: Apikey ${GANDI_KEY}"
|
||
|
echo
|
||
|
;;
|
||
|
esac
|
||
|
REMOVED+=("${ARG}")
|
||
|
done
|
||
|
echo "Domains removed from ${domain}: ${REMOVED[@]}"
|
||
|
}
|
||
|
|
||
|
#echo "CMD: ${CMD} $*"
|
||
|
${CMD} $*
|