From 1337990eece281563223f30dd0c198aacec29e5d Mon Sep 17 00:00:00 2001 From: aptalca <541623+aptalca@users.noreply.github.com> Date: Mon, 30 Oct 2023 17:29:41 -0400 Subject: [PATCH 1/4] sanitize sed replace --- root/app/auto-proxy.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/root/app/auto-proxy.sh b/root/app/auto-proxy.sh index d99e3a7..ee490c0 100755 --- a/root/app/auto-proxy.sh +++ b/root/app/auto-proxy.sh @@ -67,7 +67,8 @@ for CONTAINER in ${AUTO_GEN}; do echo "**** Overriding proto as ${swag_proto} for ${CONTAINER} ****" fi if [ -n "${swag_url}" ]; then - sed -i "s|server_name .*|server_name ${swag_url};|" "/etc/nginx/http.d/auto-proxy-${CONTAINER}.subdomain.conf" + SED_swag_url=$(sed -e 's/[&\\|]/\\&/g; s|$|\\|; $s|\\$||' <<<"${swag_url}") + sed -i "s|server_name .*|server_name ${SED_swag_url};|" "/etc/nginx/http.d/auto-proxy-${CONTAINER}.subdomain.conf" echo "**** Overriding url as ${swag_url} for ${CONTAINER} ****" fi if [ "${swag_auth}" == "authelia" ]; then @@ -133,7 +134,8 @@ DUDE if [ -z "${swag_url}" ]; then swag_url="${CONTAINER}.*" fi - sed -i "s|server_name .*|server_name ${swag_url};|" "/etc/nginx/http.d/auto-proxy-${CONTAINER}.subdomain.conf" + SED_swag_url=$(sed -e 's/[&\\|]/\\&/g; s|$|\\|; $s|\\$||' <<<"${swag_url}") + sed -i "s|server_name .*|server_name ${SED_swag_url};|" "/etc/nginx/http.d/auto-proxy-${CONTAINER}.subdomain.conf" echo "**** Setting url ${swag_url} for ${CONTAINER} ****" if [ "${swag_auth}" == "authelia" ]; then sed -i "s|#include /config/nginx/authelia|include /config/nginx/authelia|g" "/etc/nginx/http.d/auto-proxy-${CONTAINER}.subdomain.conf" From f044bef4aaef7879e6791e57c150797e41f50243 Mon Sep 17 00:00:00 2001 From: aptalca <541623+aptalca@users.noreply.github.com> Date: Mon, 30 Oct 2023 17:29:57 -0400 Subject: [PATCH 2/4] add compatibility with cron changes --- .../s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/finish | 2 +- root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/run | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/finish b/root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/finish index 5d76736..df84fd1 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/finish +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/finish @@ -1,4 +1,4 @@ #!/usr/bin/with-contenv bash -sed -i '/\/app\/auto-proxy.sh/d' /config/crontabs/root +sed -i '/\/app\/auto-proxy.sh/d' /etc/crontabs/root rm -rf /etc/nginx/http.d/auto-proxy*.conf /config/nginx/proxy-confs/auto-proxy*.conf diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/run b/root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/run index 2ca9911..19e71a2 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/run @@ -12,8 +12,7 @@ rm -rf /auto-proxy mkdir /auto-proxy if ! grep -q "/app/auto-proxy.sh" /config/crontabs/root; then - echo "* * * * * /app/auto-proxy.sh" >> /config/crontabs/root - cp /config/crontabs/root /etc/crontabs/root + echo "* * * * * /app/auto-proxy.sh" >> /etc/crontabs/root fi /app/auto-proxy.sh From 0c79c468ba93b92083dc6b9ac57403da8a98a39d Mon Sep 17 00:00:00 2001 From: aptalca <541623+aptalca@users.noreply.github.com> Date: Mon, 30 Oct 2023 18:08:11 -0400 Subject: [PATCH 3/4] add optional `swag_server_custom_directive` label --- README.md | 1 + root/app/auto-proxy.sh | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 44f5822..dab472e 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ This mod gives SWAG the ability to auto-detect running containers via labels and - `swag_url=containername.domain.com` - *optional* - overrides *server_name* (defaults to `containername.*`) - `swag_auth=authelia` - *optional* - enables auth methods (options are `authelia`, `authentik`, `ldap` and `http` for basic http auth) - `swag_auth_bypass=/api,/othersubfolder` - *optional* - bypasses auth for selected subfolders. Comma separated, no spaces. +- `swag_server_custom_directive=custom_directive;` - *optional* - injects the label value as is into the server block of the generated conf. Must be a valid nginx directive, ending with a semi colon. In SWAG docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:universal-docker|linuxserver/mods:swag-auto-proxy` and either add a volume mapping for `/var/run/docker.sock:/var/run/docker.sock:ro`, or set an environment var `DOCKER_HOST=remoteaddress`. diff --git a/root/app/auto-proxy.sh b/root/app/auto-proxy.sh index ee490c0..6aca077 100755 --- a/root/app/auto-proxy.sh +++ b/root/app/auto-proxy.sh @@ -13,7 +13,7 @@ else AUTO_GEN="${CONTAINER} ${AUTO_GEN}" else INSPECTION=$(docker inspect ${CONTAINER}) - for VAR in swag_address swag_port swag_proto swag_url swag_auth swag_auth_bypass; do + for VAR in swag_address swag_port swag_proto swag_url swag_auth swag_auth_bypass swag_server_custom_directive; do VAR_VALUE=$(echo ${INSPECTION} | jq -r ".[0].Config.Labels[\"${VAR}\"]") if [ "${VAR_VALUE}" == "null" ]; then VAR_VALUE="" @@ -40,7 +40,7 @@ fi for CONTAINER in ${AUTO_GEN}; do INSPECTION=$(docker inspect ${CONTAINER}) rm -rf "/auto-proxy/${CONTAINER}.conf" - for VAR in swag_address swag_port swag_proto swag_url swag_auth swag_auth_bypass; do + for VAR in swag_address swag_port swag_proto swag_url swag_auth swag_auth_bypass swag_server_custom_directive; do VAR_VALUE=$(echo ${INSPECTION} | jq -r ".[0].Config.Labels[\"${VAR}\"]") if [ "${VAR_VALUE}" == "null" ]; then VAR_VALUE="" @@ -71,6 +71,11 @@ for CONTAINER in ${AUTO_GEN}; do sed -i "s|server_name .*|server_name ${SED_swag_url};|" "/etc/nginx/http.d/auto-proxy-${CONTAINER}.subdomain.conf" echo "**** Overriding url as ${swag_url} for ${CONTAINER} ****" fi + if [ -n "${swag_server_custom_directive}" ]; then + SED_swag_server_custom_directive=$(sed -e 's/[&\\|]/\\&/g; s|$|\\|; $s|\\$||' <<<"${swag_server_custom_directive}") + sed -i -e '/include.*ssl.conf;/a\' -e " ${SED_swag_server_custom_directive}" "/etc/nginx/http.d/auto-proxy-${CONTAINER}.subdomain.conf" + echo "**** Adding custom directive from the swag_server_custom_directive label for ${CONTAINER} ****" + fi if [ "${swag_auth}" == "authelia" ]; then sed -i "s|#include /config/nginx/authelia|include /config/nginx/authelia|g" "/etc/nginx/http.d/auto-proxy-${CONTAINER}.subdomain.conf" echo "**** Enabling Authelia for ${CONTAINER} ****" @@ -137,6 +142,11 @@ DUDE SED_swag_url=$(sed -e 's/[&\\|]/\\&/g; s|$|\\|; $s|\\$||' <<<"${swag_url}") sed -i "s|server_name .*|server_name ${SED_swag_url};|" "/etc/nginx/http.d/auto-proxy-${CONTAINER}.subdomain.conf" echo "**** Setting url ${swag_url} for ${CONTAINER} ****" + if [ -n "${swag_server_custom_directive}" ]; then + SED_swag_server_custom_directive=$(sed -e 's/[&\\|]/\\&/g; s|$|\\|; $s|\\$||' <<<"${swag_server_custom_directive}") + sed -i -e '/include.*ssl.conf;/a\' -e " ${SED_swag_server_custom_directive}" "/etc/nginx/http.d/auto-proxy-${CONTAINER}.subdomain.conf" + echo "**** Adding custom directive from the swag_server_custom_directive label for ${CONTAINER} ****" + fi if [ "${swag_auth}" == "authelia" ]; then sed -i "s|#include /config/nginx/authelia|include /config/nginx/authelia|g" "/etc/nginx/http.d/auto-proxy-${CONTAINER}.subdomain.conf" echo "**** Enabling Authelia for ${CONTAINER} ****" From 68fb0b03c00e8becf7f9b2766a7e37b8c11e4efc Mon Sep 17 00:00:00 2001 From: aptalca <541623+aptalca@users.noreply.github.com> Date: Thu, 2 Nov 2023 15:43:04 -0400 Subject: [PATCH 4/4] Update root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/run Co-authored-by: Eric Nemchik --- root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/run b/root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/run index 19e71a2..3f67b2f 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-swag-auto-proxy-setup/run @@ -11,7 +11,7 @@ cp /defaults/auto-proxy-readme /etc/nginx/http.d/auto-proxy-readme rm -rf /auto-proxy mkdir /auto-proxy -if ! grep -q "/app/auto-proxy.sh" /config/crontabs/root; then +if ! grep -q "/app/auto-proxy.sh" /etc/crontabs/root; then echo "* * * * * /app/auto-proxy.sh" >> /etc/crontabs/root fi