#!/bin/sh toUpperCase() { echo "$*" | tr '[:lower:]' '[:upper:]'; } GIT_REPO=$GIT_REPO if [ "$GIT_REPO" == "" ]; then GIT_REPO=git.format.hu fi ORGANIZATION=$ORGANIZATION if [ "$ORGANIZATION" == "" ]; then ORGANIZATION=format fi PUBLIC_PROXY=$(toUpperCase $PUBLIC_PROXY) SMARTHOST_PROXY=$(toUpperCase $SMARTHOST_PROXY) WIREGUARD=$(toUpperCase $WIREGUARD) OPENVPN=$(toUpperCase $OPENVPN) LETSENCRYPT_MAIL=$LETSENCRYPT_MAIL USER_CONFIG_PATH=$USER_CONFIG_PATH if [ "$USER_CONFIG_PATH" = "" ]; then USER_CONFIG_PATH=/etc/user/config/user.json fi DOCKER_REGISTRY_URL=$DOCKER_REGISTRY_URL if [ "$DOCKER_REGISTRY_URL" = "" ]; then DOCKER_REGISTRY_URL=registry.format.hu fi if [[ "$PUBLIC_PROXY" == "YES" || "$PUBLIC_PROXY" == "TRUE" ]]; then PROXY_TYPE=public-proxy; fi if [[ "$SMARTHOST_PROXY" == "YES" || "$SMARTHOST_PROXY" == "TRUE" ]]; then PROXY_TYPE=smarthost-proxy" "$PROXY_TYPE; fi # INSTALL PROXY SERVICES for i in $(echo $PROXY_TYPE); do # Clone source files from git repository git clone ssh://$GIT_REPO/$ORGANIZATION/$i.git /tmp/$i #if [ "$i" == "public-proxy" ] ; then # Check VPN accessible #if [[ "$WIREGUARD" == "YES" || "$WIREGUARD" == "TRUE" ]]; then # COPY SERVICE FILES INTO SRVICE DIR # DEFINE SERVICE DIR FROM PROXY-SCHEDULER AND PROXY SERVICE FILE JSONS if [ "$i" == "public-proxy" ] ; then PROXY_SCHEDULER_FILE=proxy-scheduler.json else PROXY_SCHEDULER_FILE=smarthost-proxy-scheduler.json fi PROXY_SCHEDULER_NAME=$(jq -r .containers[0].NAME /tmp/$i/$PROXY_SCHEDULER_FILE | cut -d "-" -f1) PROXY_SERVICE_FILE=$(jq -r .$PROXY_SCHEDULER_NAME.PROXY_SERVICE_FILE /tmp/$i/proxy_config) SERVICE_DIR=$(jq -r .containers[0].VOLUMES[].SOURCE /tmp/$i/$PROXY_SCHEDULER_FILE |grep $PROXY_SERVICE_FILE | sed s/$PROXY_SERVICE_FILE//g) PROXY_CONFIG_DIR=$(jq -r .$PROXY_SCHEDULER_NAME.PROXY_CONFIG_DIR /tmp/$i/proxy_config) PROXY_VOLUME=$(jq -r --arg DEST "$PROXY_CONFIG_DIR" '.containers[0].VOLUMES[] | select(.DEST==$DEST)' /tmp/$i/$PROXY_SCHEDULER_FILE) PROXY_DIR=$(echo $PROXY_VOLUME | jq -r .SOURCE) PROXY_DIR=$(dirname $PROXY_DIR | sed s/$i//g) DOMAIN_CONFIG_DIR=$(jq -r .$PROXY_SCHEDULER_NAME.DOMAIN_DIR /tmp/$i/proxy_config) DOMAIN_VOLUME=$(jq -r --arg DEST "$DOMAIN_CONFIG_DIR" '.containers[0].VOLUMES[] | select(.DEST==$DEST)' /tmp/$i/$PROXY_SCHEDULER_FILE) DOMAIN_DIR=$(echo $DOMAIN_VOLUME | jq -r .SOURCE) mkdir -p $SERVICE_DIR; cp -av /tmp/$i/*.json $SERVICE_DIR/ # CREATE FILESYSTEM ACCESS FOR SERVICES mkdir -p $PROXY_DIR mkdir -p $DOMAIN_DIR SPEC_PROXY_DIR=$PROXY_DIR/$i # CREATE ALL SOURCE FOLDER FOR RUNNING PROXIES PROXY_VOLUMES=$(jq -r .containers[].VOLUMES[].SOURCE /tmp/$i/$i.json |grep -v '\.') for VOLUME in $(echo $PROXY_VOLUMES); do mkdir -p $VOLUME; done # CREATE PROXY SCHEDULER SERVICE # CHECK proxy config file exists SOURCE=$(cat /tmp/$i/proxy_config| tail -n+2 |head -n-2); TARGET=$(cat $PROXY_DIR/proxy.json | tail -n+2); TMP_FILE=$(mktemp -p /tmp/) { echo "{" echo $SOURCE } > "$TMP_FILE"; if [[ -f $PROXY_DIR/proxy.json ]]; then { echo "}," echo $TARGET } >> "$TMP_FILE"; else { echo "}" echo "}" } >> "$TMP_FILE"; fi # formats json content and removes duplications jq -r . $TMP_FILE > $PROXY_DIR/proxy.json rm $TMP_FILE if [ "$i" == "public-proxy" ]; then # COPY LOADBALANCER STATIC CONFIG mkdir -p $SPEC_PROXY_DIR/loadbalancer; cp -av /tmp/$i/haproxy.cfg $SPEC_PROXY_DIR/loadbalancer/ ; fi if [ "$i" == "smarthost-proxy" ]; then # SETUP LETSENCRYPT USER SPECIFIED CONFIGURATION if [ "$LETSENCRYPT_MAIL" = "" ]; then echo "No email address given, Let's Encrypt will not work properly." else TMP_FILE=$(mktemp -p /tmp/) LETS_CONTENT=$(echo '"letsencrypt": {"EMAIL": "'$LETSENCRYPT_MAIL'","DOCKER_REGISTRY_URL": "'$DOCKER_REGISTRY_URL'"'}); if [[ -f $USER_CONFIG_PATH ]]; then TARGET=$(cat $USER_CONFIG_PATH | head -n-2); { echo $TARGET echo "}," echo $LETS_CONTENT echo "}" } >> "$TMP_FILE"; else { echo "{" echo $LETS_CONTENT echo "}" } >> "$TMP_FILE"; fi # formats json content and removes duplications jq -r . $TMP_FILE > $USER_CONFIG_PATH rm $TMP_FILE fi # SETUP PROXY DNS SERVICE # COPY PROXY DNS FILES if [ "$PROXY_DNS" == "" ]; then PROXY_DNS=proxy-dns fi git clone ssh://$GIT_REPO/$ORGANIZATION/$PROXY_DNS.git /tmp/$PROXY_DNS DNS_VOLUMES=$(jq -r .containers[].VOLUMES[].SOURCE /tmp/$i/$PROXY_DNS.json |grep -v '\.') for VOLUME in $(echo $DNS_VOLUMES); do mkdir -p $VOLUME; done DNS_VOLUMES=$(jq -r --arg DEST "/etc/dnsmasq" '.containers[0].VOLUMES[] | select(.DEST | startswith($DEST))' /tmp/$i/$PROXY_DNS.json) DNS_DIR=$(echo $DNS_VOLUMES | jq -r .SOURCE) mkdir -p $DNS_DIR; cp -rv /tmp/$PROXY_DNS/* $DNS_DIR/ ; fi done