#!/bin/bash # list/ajout/supprime/ les domaines extérieurs à kaz.bzh KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) . "${KAZ_ROOT}/bin/.commonFunctions.sh" setKazVars export PRG="$0" cd $(dirname $0) . "${DOCKERS_ENV}" LETS_DIR="/etc/letsencrypt/$([ "${mode}" == "local" ] && echo "local" || echo "live")" declare -a availableComposes availableOrga availableComposes=(${pahekoHost} ${cloudHost} ${dokuwikiHost} ${wordpressHost} ${matterHost} ${castopodHost}) availableOrga=($(sed -e "s/\(.*\)[ \t]*#.*$/\1/" -e "s/^[ \t]*\(.*\)-orga$/\1/" -e "/^$/d" "${KAZ_CONF_DIR}/container-orga.list")) availableProxyComposes=($(getList "${KAZ_CONF_DIR}/container-proxy.list")) # no more export in .env export $(set | grep "domain=") export CMD="" export SIMU="" export CHANGE="" usage(){ echo "Usage: ${PRG} list [friend-domain...]" echo " ${PRG} [-n] add orga [${pahekoHost} ${cloudHost} ${dokuwikiHost} ${wordpressHost} ${matterHost} ${castopodHost}] [friend-domain...] " echo " ${PRG} [-n] del [friend-domain...]" echo " ${PRG} -l" echo " -l short list" echo " -renewAll" echo " -h help" echo " -n simulation" exit 1 } export CERT_CFG="${KAZ_CONF_PROXY_DIR}/foreign-certificate" createCert () { ( fileName="${LETS_DIR}/$1-key.pem" #[ -f "${fileName}" ] || return # if [ -f "${fileName}" ]; then # fileTime=$(stat --format='%Y' "${fileName}") # current_time=$(date +%s) # if (( "${fileTime}" > ( "${current_time}" - ( 60 * 60 * 24 * 89 ) ) )); then # exit # fi # fi printKazMsg "create certificat for $1" ${SIMU} docker exec -i proxyServ bash -c "/opt/certbot/bin/certbot certonly -n --nginx -d $1" ) } for ARG in $@; do case "${ARG}" in '-h' | '-help' ) usage ;; '-n' ) shift export SIMU="echo" ;; '-renewAll') for i in $("${KAZ_BIN_DIR}/foreign-domain.sh" -l); do echo "$i" createCert "$i" |grep failed done exit ;; '-l') for compose in ${availableComposes[@]} ; do grep "server_name" "${KAZ_CONF_PROXY_DIR}/${compose}_kaz_name" | sed -e "s/[ \t]*\([^#]*\)#.*/\1/g" -e "/^$/d" -e "s/.*server_name[ \t]\([^ ;]*\).*/\1/" done exit ;; 'list'|'add'|'del' ) shift CMD="${ARG}" break ;; * ) usage ;; esac done if [ -z "${CMD}" ]; then echo "Commande missing" usage fi ######################################## badDomaine () { [[ -z "$1" ]] && return 0; [[ ! "$1" =~ ^[-.a-zA-Z0-9]*$ ]] && return 0; return 1 } badOrga () { [[ -z "$1" ]] && return 0; [[ ! " ${availableOrga[*]} " =~ " $1 " ]] && return 0 return 1 } badCompose () { [[ -z "$1" ]] && return 0; [[ ! " ${availableComposes[*]} " =~ " $1 " ]] && return 0 return 1 } ######################################## listServ () { for compose in ${availableComposes[@]} ; do sed -e "s/[ \t]*\([^#]*\)#.*/\1/g" -e "/^$/d" -e "s/.*server_name[ \t]\([^ ;]*\).*/\1 : ${compose}/" "${KAZ_CONF_PROXY_DIR}/${compose}_kaz_name" done } listOrgaServ () { for compose in ${availableComposes[@]} ; do sed -e "s/[ \t]*\([^#]*\)#.*/\1/g" -e "/^$/d" -e "s/\([^ ]*\)[ \t]*\([^ \t;]*\).*/\1 => \2 : ${compose}/" "${KAZ_CONF_PROXY_DIR}/${compose}_kaz_map" done } ######################################## list () { previousOrga=$(listOrgaServ) previousServ=$(listServ) if [ $# -lt 1 ]; then [ -n "${previousOrga}" ] && echo "${previousOrga}" [ -n "${previousServ}" ] && echo "${previousServ}" return fi for ARG in $@ do orga=$(echo "${previousOrga}" | grep "${ARG}.* =>") serv=$(echo "${previousServ}" | grep "${ARG}.* =>") [ -n "${orga}" ] && echo "${orga}" [ -n "${serv}" ] && echo "${serv}" done } ######################################## add () { # $1 : orga # $2 : service # $3 : friend-domain [ $# -lt 3 ] && usage badOrga $1 && echo "bad orga: ${RED}$1${NC} not in ${GREEN}${availableOrga[@]}${NC}" && usage badCompose $2 && echo "bad compose: ${RED}$2${NC} not in ${GREEN}${availableComposes[@]}${NC}" && usage ORGA=$1 COMPOSE=$2 shift; shift CLOUD_SERVNAME="${ORGA}-${nextcloudServName}" CLOUD_CONFIG="${DOCK_VOL}/orga_${ORGA}-cloudConfig/_data/config.php" # XXX check compose exist in orga ? # /kaz/bin/kazList.sh service enable ${ORGA} if [ "${COMPOSE}" = "${cloudHost}" ]; then if ! [[ "$(docker ps -f name=${CLOUD_SERVNAME} | grep -w ${CLOUD_SERVNAME})" ]]; then printKazError "${CLOUD_SERVNAME} not running... abort" exit fi fi for FRIEND in $@; do badDomaine "${FRIEND}" && echo "bad domaine: ${RED}${FRIEND}${NC}" && usage done for FRIEND in $@; do createCert "${FRIEND}" if [ "${COMPOSE}" = "${cloudHost}" ]; then IDX=$(awk 'BEGIN {flag=0; cpt=0} /trusted_domains/ {flag=1} /)/ {if (flag) {print cpt+1; exit 0}} / => / {if (flag && cpt<$1) cpt=$1}' "${CLOUD_CONFIG}") ${SIMU} docker exec -ti -u 33 "${CLOUD_SERVNAME}" /var/www/html/occ config:system:set trusted_domains "${IDX}" --value="${FRIEND}" fi previousOrga=$(listOrgaServ | grep "${FRIEND}") [[ " ${previousOrga}" =~ " ${FRIEND} => ${ORGA} : ${COMPOSE}" ]] && echo " - already done" && continue [[ " ${previousOrga}" =~ " ${FRIEND} " ]] && echo " - ${YELLOW}${BOLD}$(echo "${previousOrga}" | grep -e "${FRIEND}")${NC} must be deleted before" && return if [[ -n "${SIMU}" ]] ; then echo "${FRIEND} ${ORGA}; => ${KAZ_CONF_PROXY_DIR}/${COMPOSE}_kaz_map" cat < ${KAZ_CONF_PROXY_DIR}/${COMPOSE}_kaz_name server_name ${FRIEND}; EOF else echo "${FRIEND} ${ORGA};" >> "${KAZ_CONF_PROXY_DIR}/${COMPOSE}_kaz_map" cat >> "${KAZ_CONF_PROXY_DIR}/${COMPOSE}_kaz_name" <\s*'${FRIEND}'/d" -i "${CLOUD_CONFIG}" fi ${SIMU} sed -e "/^[ \t]*${FRIEND}[ \t]/d" -i "${KAZ_CONF_PROXY_DIR}/${COMPOSE}_kaz_map" fi if grep -q -e "^[ \t]*server_name ${FRIEND};" "${KAZ_CONF_PROXY_DIR}/${COMPOSE}_kaz_name" ; then ${SIMU} sed -i "${KAZ_CONF_PROXY_DIR}/${COMPOSE}_kaz_name" \ -e "/^[ \t]*server_name ${FRIEND};/d" fi done echo "${PRG}: ${FRIEND} deleted" CHANGE="del" done } ######################################## ${CMD} $@ if [ -n "${CHANGE}" ] ; then echo "Reload proxy conf" for item in "${availableProxyComposes[@]}"; do ${SIMU} ${KAZ_COMP_DIR}/${item}/proxy-gen.sh ${SIMU} "${KAZ_COMP_DIR}/proxy/reload.sh" done fi ########################################