diff --git a/back/lib/peer_add b/back/lib/peer_add index 85d877d..ed7f17b 100755 --- a/back/lib/peer_add +++ b/back/lib/peer_add @@ -104,16 +104,25 @@ privkey="$(/usr/bin/wg genkey)" pubkey="$(echo "${privkey}" | /usr/bin/wg pubkey)" address="${ipv4}/${IPV4_NET##*/},${ipv6}/${IPV6_NET##*/}" -# 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_blocks="${8}" + +# Update nameserver +if "${LIB_DIR}/ns_update_add" "${domain:?}" "${ipv4:?}" "${ipv6:?}" + then printf 'Successfully added %s to DNS server.\n' "${domain}" >>"${LOGFILE}" + else printf 'ERROR! Failed to add %s %s %s to DNS server!\n' "${domain}" "${ipv4}" "${ipv6}" >>"${LOGFILE}" +fi & + +# Create SSL cert +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 + +# Do the wireguard and tell the user +server_blocks='' +while IFS=$'\t' read -r server_hostname server_ipv4 server_ipv6 server_pubkey server_endpoint server_admin server_secret; do + [[ ${server_hostname:0:1} = \# ]] && continue server_psk="$(/usr/bin/wg genpsk)" - # 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}" + 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" 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 @@ -133,25 +142,6 @@ for_server_do() { # exit 16 #fi fi -} - -# Update nameserver -if "${LIB_DIR}/ns_update_add" "${domain:?}" "${ipv4:?}" "${ipv6:?}" - then printf 'Successfully added %s to DNS server.\n' "${domain}" >>"${LOGFILE}" - else printf 'ERROR! Failed to add %s %s %s to DNS server!\n' "${domain}" "${ipv4}" "${ipv6}" >>"${LOGFILE}" -fi & - -# Create SSL cert -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 - -# Do the wireguard and tell the user -server_blocks='' -while IFS=$'\t' read -r 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}")" & - [ $( jobs | wc -l ) -ge $( nproc ) ] && wait -done <"${SERVERS_FILE}"; wait +done <"${SERVERS_FILE}" wg_config="[Interface] # ${hostname}.${username}.${TLD}\nPrivateKey=${privkey:?}\nAddress=${address:?}\n${WG_DNS}\n${server_blocks:?}" <<<"${wg_config}" "${LIB_DIR}/http_res" 202