From 3f80588c7b6b162e3165d6ecb05041e3f71ceee3 Mon Sep 17 00:00:00 2001 From: Keith Irwin Date: Sat, 10 Sep 2022 19:01:36 -0600 Subject: [PATCH] Cleaned index.cgi and replaced mount with COPY in docker --- back/{srv/dashboard/add => lib/peer_add} | 2 +- back/{srv/dashboard/del => lib/peer_del} | 2 +- back/lib/peer_list | 52 ++++++++++++++++++++++++ back/srv/dashboard/Dockerfile | 4 ++ back/srv/dashboard/index.cgi | 22 ++-------- docker-compose.yml | 1 - 6 files changed, 61 insertions(+), 22 deletions(-) rename back/{srv/dashboard/add => lib/peer_add} (99%) rename back/{srv/dashboard/del => lib/peer_del} (98%) create mode 100755 back/lib/peer_list diff --git a/back/srv/dashboard/add b/back/lib/peer_add similarity index 99% rename from back/srv/dashboard/add rename to back/lib/peer_add index c159315..b87b02c 100755 --- a/back/srv/dashboard/add +++ b/back/lib/peer_add @@ -1,5 +1,5 @@ #!/bin/bash -# FILE: wgapi:back/api/dashboard/add +# FILE: peer_add # DESCRIPTION: Add a new peer # USAGE: add remote_ip querystring # ERRORS: diff --git a/back/srv/dashboard/del b/back/lib/peer_del similarity index 98% rename from back/srv/dashboard/del rename to back/lib/peer_del index 2090e59..3cf81a1 100755 --- a/back/srv/dashboard/del +++ b/back/lib/peer_del @@ -1,5 +1,5 @@ #!/bin/bash -# FILE: wgapi:back/api/dashboard/del +# FILE: peer_del # DESCRIPTION: Del a peer # USAGE: del remote_ip querystring # ERRORS: diff --git a/back/lib/peer_list b/back/lib/peer_list new file mode 100755 index 0000000..561bafc --- /dev/null +++ b/back/lib/peer_list @@ -0,0 +1,52 @@ +#!/bin/bash +# FILE: peer_list +# DESCRIPTION: Add a new peer +# USAGE: add remote_ip +# ERRORS: +# 3: bad args/usage +# 4: config file not found +# 5: Wireguard not installed +# 9: Token file not found +# 10: Failed to get peer data from wg +# 11: Failed to generate new IPs +# 12: Servers file doesn't exist +# 15: Failed to add user to local wireguard +# 16: Failed to add user to federated server +# 17: User not found + +CONFIG_FILE='/etc/wgapi/config' +if ! [ ${#} -eq 1 ]; then + printf 'ERROR! Bad input: %s %s\n' "${0}" "${*}" >>"${LOGFILE}" + exit 3 +fi; if ! [ -x '/usr/bin/wg' ]; then + printf 'ERROR! %s could not find /usr/bin/wg\n' "${0}" >>"${LOGFILE}" + exit 5 +fi; if ! [ -f "${CONFIG_FILE}" ]; then + printf 'ERROR! %s could not find %s!\n' "${0}" "${CONFIG_FILE}" >>"${LOGFILE}" + exit 4 +fi +source "${CONFIG_FILE}" +if ! [ -f "${TOKENS_FILE}" ]; then + printf 'ERROR! %s could not find %s!\n' "${0}" "${TOKENS_FILE}" >>"${LOGFILE}" + exit 9 +fi +ip="${1}" +printf '%s requested peer listing...\n' "${ip}" >>"${LOGFILE}" + +# Create token if needed +token="$(grep "${ip}" "${TOKENS_FILE}" | cut -f2)" +if [ "${token}" == "" ]; then + printf 'Creating token for %s...\n' "${ip}" >>"${LOGFILE}" + token="$(>"${TOKENS_FILE}" +fi + +# Get peer list from wireguard +if peers="[$("${LIB_DIR}/wg_peer_list" "${ip}" json)]"; then + printf '{"token":"%s","peers":%s}' "${token}" "${peers}" | "${LIB_DIR}/http_res" 200 'application/json' + printf 'Sent peers to user %s\n' "${ip}" >>"${LOGFILE}" +else + printf 'ERROR: Failed to lookup user: %s\n' "${ip}" >>"${LOGFILE}" + printf 'Failed to lookup user' | "${LIB_DIR}/http_res" 500 +fi + \ No newline at end of file diff --git a/back/srv/dashboard/Dockerfile b/back/srv/dashboard/Dockerfile index 2f06369..bf60b48 100644 --- a/back/srv/dashboard/Dockerfile +++ b/back/srv/dashboard/Dockerfile @@ -9,6 +9,10 @@ RUN apt-get update && apt-get install --yes \ sudo curl apache2 openssl wireguard-tools dnsutils ipv6calc jq \ && rm -rf /var/lib/apt/lists/* +# Copy over index.cgi +RUN mkdir /var/www/cgi-bin/ && chown www-data:www-data /var/www/cgi-bin/ +COPY index.cgi /var/www/cgi-bin/index.cgi + # Configure apache RUN a2enmod cgi rewrite RUN sed -i "s/^Listen 80$/Listen ${LISTEN_PORT}/" \ diff --git a/back/srv/dashboard/index.cgi b/back/srv/dashboard/index.cgi index 5d2f2a4..6b39b60 100755 --- a/back/srv/dashboard/index.cgi +++ b/back/srv/dashboard/index.cgi @@ -13,29 +13,13 @@ source "${CONFIG_FILE}" case "${REQUEST_METHOD}" in # List peers - 'GET') - printf '%s requested peer listing...\n' "${REMOTE_ADDR}" >>"${LOGFILE}" - # Create token if needed - token="$(grep "${REMOTE_ADDR}" "${TOKENS_FILE}" | cut -f2)" - if [ "${token}" == "" ]; then - printf 'Creating token for %s...\n' "${REMOTE_ADDR}" >>"${LOGFILE}" - token="$(>"${TOKENS_FILE}" - fi - if peers="[$("${LIB_DIR}/wg_peer_list" "${REMOTE_ADDR}" json)]"; then - printf '{"token":"%s","peers":%s}' "${token}" "${peers}" | "${LIB_DIR}/http_res" 200 'application/json' - printf 'Sent peers to user %s\n' "${REMOTE_ADDR}" >>"${LOGFILE}" - else - printf 'ERROR: Failed to lookup user: %s\n' "${REMOTE_ADDR}" >>"${LOGFILE}" - printf 'Failed to lookup user' | "${LIB_DIR}/http_res" 500 - fi - ;; + 'GET') "${LIB_DIR}/peer_add" "${REMOTE_ADDR}";; # Add peer - 'POST') ./add "${REMOTE_ADDR}" "${QUERY_STRING}";; + 'POST') "${LIB_DIR}/peer_add" "${REMOTE_ADDR}" "${QUERY_STRING}";; # Delete peer - 'DELETE') ./del "${REMOTE_ADDR}" "${QUERY_STRING}";; + 'DELETE') "${LIB_DIR}/peer_del" "${REMOTE_ADDR}" "${QUERY_STRING}";; # Bad request *) printf 'Invalid HTTP verb' | "${LIB_DIR}/http_res" 405;; diff --git a/docker-compose.yml b/docker-compose.yml index f1ed1a3..ba9a53f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,4 +10,3 @@ services: - '/etc/wgapi:/etc/wgapi:ro' - '/var/log/wgapi:/var/log/wgapi' - './back/lib:/usr/local/bin:ro' - - './back/srv/dashboard:/var/www/cgi-bin:ro'