diff --git a/back/lib/peer_add b/back/lib/peer_add index 8ef23a9..e87ae0d 100755 --- a/back/lib/peer_add +++ b/back/lib/peer_add @@ -103,16 +103,17 @@ fi privkey="$(/usr/bin/wg genkey)" pubkey="$(echo "${privkey}" | /usr/bin/wg pubkey)" address="${ipv4}/${IPV4_NET##*/},${ipv6}/${IPV6_NET##*/}" -server_blocks='' # Run this function in parallel in the while loop below # https://stackoverflow.com/a/33058618 for_server_do() { [[ ${server_hostname:0:1} = \# ]] && return # Ignore comments server_hostname="${1}"; server_ipv4="${2}"; server_ipv6="${3}"; server_pubkey="${4}" - server_endpoint="${5}"; server_admin="${6}"; server_secret="${7}" + server_endpoint="${5}"; server_admin="${6}"; server_secret="${7}"; server_blocks="${8}" server_psk="$(/usr/bin/wg genpsk)" - server_blocks="${server_blocks}\n[Peer] # ${server_hostname}.${TLD}\nPublicKey=${server_pubkey}\nPresharedKey=${server_psk}\nAllowedIPs=${server_ipv4}/32,${server_ipv6}/128\nEndpoint=${server_endpoint}\n" + # Print next line to stdout so it can be captured as the new global server_blocks + printf '%s\n[Peer] # %s.%s\nPublicKey=%s\nPresharedKey=%s\nAllowedIPs=%s\nEndpoint=%s\n' \ + "${server_blocks}" "${server_hostname}" "${TLD}" "${server_pubkey}" "${server_psk}" "${server_ipv4}/32,${server_ipv6}/128" "${server_endpoint}" if [ "${server_hostname}" == "${LOCAL_SERVER}" ]; then # Add new user to local server if "${LIB_DIR}/wg_peer_add" "${pubkey}" "${server_psk}" "${ipv4}/32,${ipv6}/128"; then @@ -144,13 +145,15 @@ fi & if "${LIB_DIR}/ssl_peer_add" "${hostname:?}" "${username:?}" "IP:${ipv4},IP:${ipv6}" then printf 'Successfully signed SSL certs for %s\n' "${domain}" >>"${LOGFILE}" else printf 'ERROR! Failed to create certs for %s with IPS: %s %s!\n' "${domain}" "${ipv4}" "${ipv6}" >>"${LOGFILE}" -fi & +fi +server_blocks='' while IFS=$'\t' read -r server_hostname server_ipv4 server_ipv6 server_pubkey server_endpoint server_admin server_secret - do for_server_do "${server_hostname}" "${server_ipv4}" "${server_ipv6}" "${server_pubkey}" "${server_endpoint}" "${server_admin}" "${server_secret}" & + do server_blocks="$(for_server_do "${server_hostname}" "${server_ipv4}" "${server_ipv6}" "${server_pubkey}" "${server_endpoint}" "${server_admin}" "${server_secret}" "${server_blocks}")" & # Uncomment if SERVERS_FILE is very big #[ $( jobs | wc -l ) -ge $( nproc ) ] && wait done <"${SERVERS_FILE}" + wg_config="[Interface] # ${hostname}.${username}.${TLD}\nPrivateKey=${privkey}\nAddress=${address}\n${WG_DNS}\n${server_blocks}" # Respond to user