241 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			241 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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 <<EOF
 | |
|     => ${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" <<EOF
 | |
| server_name ${FRIEND};
 | |
| EOF
 | |
| 	fi
 | |
| 	echo "${PRG}: ${FRIEND} added"
 | |
| 	
 | |
| 	CHANGE="add"
 | |
|     done
 | |
|     #(cd "${KAZ_COMP_DIR}/${ORGA}-orga"; docker-compose restart)
 | |
| }
 | |
| 
 | |
| ########################################
 | |
| del () {
 | |
|     [ $# -lt 1 ] && usage
 | |
| 
 | |
|     for FRIEND in $@; do
 | |
| 	badDomaine "${FRIEND}"  && echo "bad domaine: ${RED}${FRIEND}${NC}" && usage
 | |
| 	previous=$(listOrgaServ | grep -e "${FRIEND}")
 | |
| 	[[ ! "${previous}" =~ ^${FRIEND} ]] && echo "${FRIEND} not found in ${previous}" && continue
 | |
| 	# XXX if done OK
 | |
| 	for COMPOSE in ${availableComposes[@]} ; do
 | |
| 	    if grep -q -e "^[ \t]*${FRIEND}[ \t]" "${KAZ_CONF_PROXY_DIR}/${COMPOSE}_kaz_map" ; then
 | |
| 		if [ "${COMPOSE}" = "${cloudHost}" ]; then
 | |
| 		    ORGA="$(grep "${FRIEND}" "${KAZ_CONF_PROXY_DIR}/${COMPOSE}_kaz_map" | sed "s/^${FRIEND}\s*\([^;]*\);/\1/")"
 | |
| 		    CLOUD_CONFIG="${DOCK_VOL}/orga_${ORGA}-cloudConfig/_data/config.php"
 | |
| 		    ${SIMU} sed -e "/\d*\s*=>\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
 | |
| 
 | |
| ########################################
 |