Update NordVPN.sh
Added NordVPN Variables to docker file Update start.sh Update NordVPN.sh Update NordVPN configs on run NordVPN was missing server files. Have updated to run the nordvpn updateConfigs.sh script on start Update NordVPN_Server_Selector.sh Update start.sh Moved Selector script to NordVPN directory Update NordVPN_Server_Selector.sh Update NordVPN_Server_Selector.sh Update updateConfigs.sh Update updateConfigs.sh Added auto-update of NordVPN container will auto-update NordVPN files on start. This increases the start up time by a bit. But ensures that all configs are present for the auto-selector script Create default.ovpn Update default.ovpn
This commit is contained in:
63
openvpn/nordvpn/NordVPN_Server_Selector.sh
Executable file
63
openvpn/nordvpn/NordVPN_Server_Selector.sh
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
|
||||
country_filter() { # curl -s "https://api.nordvpn.com/v1/servers/countries" | jq --raw-output '.[] | [.code, .name] | @tsv'
|
||||
local nordvpn_api=$1 country=(${NORDVPN_COUNTRY//[;,]/ })
|
||||
if [[ ${#country[@]} -ge 1 ]]; then
|
||||
country=${country[0]//_/ }
|
||||
local country_id=`curl -s "${nordvpn_api}/v1/servers/countries" | jq --raw-output ".[] |
|
||||
select( (.name|test(\"^${country}$\";\"i\")) or
|
||||
(.code|test(\"^${country}$\";\"i\")) ) |
|
||||
.id" | head -n 1`
|
||||
if [[ -n ${country_id} ]]; then
|
||||
echo "Searching for country : ${country} (${country_id})" > /dev/stderr
|
||||
echo "filters\[country_id\]=${country_id}&"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
group_filter() { # curl -s "https://api.nordvpn.com/v1/servers/groups" | jq --raw-output '.[] | [.identifier, .title] | @tsv'
|
||||
local nordvpn_api=$1 category=(${NORDVPN_CATEGORY//[;,]/ })
|
||||
if [[ ${#category[@]} -ge 1 ]]; then
|
||||
category=${category[0]//_/ }
|
||||
local identifier=`curl -s "${nordvpn_api}/v1/servers/groups" | jq --raw-output ".[] |
|
||||
select( .title | test(\"${category}\";\"i\") ) |
|
||||
.identifier" | head -n 1`
|
||||
if [[ -n ${identifier} ]]; then
|
||||
echo "Searching for group: ${identifier}" > /dev/stderr
|
||||
echo "filters\[servers_groups\]\[identifier\]=${identifier}&"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
technology_filter() { # curl -s "https://api.nordvpn.com/v1/technologies" | jq --raw-output '.[] | [.identifier, .name ] | @tsv' | grep openvpn
|
||||
local identifier
|
||||
if [[ ${NORDVPN_PROTOCOL,,} =~ .*udp.* ]]; then
|
||||
identifier="openvpn_udp"
|
||||
elif [[ ${NORDVPN_PROTOCOL,,} =~ .*tcp.* ]];then
|
||||
identifier="openvpn_tcp"
|
||||
fi
|
||||
if [[ -n ${identifier} ]]; then
|
||||
echo "Searching for technology: ${identifier}" > /dev/stderr
|
||||
echo "filters\[servers_technologies\]\[identifier\]=${identifier}&"
|
||||
fi
|
||||
}
|
||||
select_hostname() { #TODO return multiples
|
||||
local nordvpn_api="https://api.nordvpn.com" \
|
||||
filters hostname
|
||||
|
||||
echo "Selecting the best server..." > /dev/stderr
|
||||
filters+="$(country_filter ${nordvpn_api})"
|
||||
filters+="$(group_filter ${nordvpn_api})"
|
||||
filters+="$(technology_filter )"
|
||||
|
||||
hostname=`curl -s "${nordvpn_api}/v1/servers/recommendations?${filters}limit=1" | jq --raw-output ".[].hostname"`
|
||||
if [[ -z ${hostname} ]]; then
|
||||
echo "Unable to find a server with the specified parameters, using any recommended server" > /dev/stderr
|
||||
hostname=`curl -s "${nordvpn_api}/v1/servers/recommendations?limit=1" | jq --raw-output ".[].hostname"`
|
||||
fi
|
||||
|
||||
echo "Best server : ${hostname}" > /dev/stderr
|
||||
echo ${hostname}
|
||||
}
|
||||
|
||||
# Select recommended VPN
|
||||
echo "$(select_hostname).${NORDVPN_PROTOCOL,,}"
|
@@ -1,5 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
TIME_FORMAT=`date "+%Y-%m-%d %H:%M:%S"`
|
||||
|
||||
@@ -21,8 +20,8 @@ script_init() {
|
||||
log "Checking curl installation"
|
||||
script_needs curl
|
||||
|
||||
log "Checking dos2unix installation"
|
||||
script_needs dos2unix
|
||||
# log "Checking dos2unix installation"
|
||||
# script_needs dos2unix
|
||||
|
||||
log "Checking unzip installation"
|
||||
script_needs unzip
|
||||
@@ -31,20 +30,23 @@ script_init() {
|
||||
script_init
|
||||
|
||||
# If the script is called from elsewhere
|
||||
cd "${0%/*}"
|
||||
cd "${VPN_PROVIDER_CONFIGS}"
|
||||
|
||||
# Delete everything (not this script though)
|
||||
log "Removing existing configs"
|
||||
find . ! -name '*.sh' -delete
|
||||
find . ! -name '*.sh' -type f -delete
|
||||
|
||||
# Get updated configuration zip
|
||||
log "Downloading latest configs"
|
||||
curl -skL https://downloads.nordcdn.com/configs/archives/servers/ovpn.zip -o openvpn.zip \
|
||||
&& unzip -j openvpn.zip $1 >/dev/null 2>&1 && rm openvpn.zip
|
||||
|
||||
|
||||
# Ensure linux line endings
|
||||
log "Checking line endings"
|
||||
dos2unix * $1 >/dev/null 2>&1
|
||||
# dos2unix * $1 >/dev/null 2>&1
|
||||
# find . -name '*.ovpn' -type f -print 0 | xargs -0 sed -i 's/^M$//'
|
||||
find ${VPN_PROVIDER_CONFIGS} -name '*.ovpn' -type f -exec sed -i 's/^M$//' {} \;
|
||||
|
||||
# Update configs with correct options
|
||||
log "Updating configs for docker-transmission-openvpn"
|
||||
@@ -57,4 +59,6 @@ sed -i 's/ping-timer-rem//g' *.ovpn
|
||||
# Pick a random file config for default.ovpn
|
||||
random_config=$(ls uk*udp* | sort -R | head -n1)
|
||||
log "Setting default.ovpn to $random_config"
|
||||
ln -s $random_config default.ovpn
|
||||
ln -s $random_config default.ovpn
|
||||
|
||||
cd "${0%/*}"
|
Reference in New Issue
Block a user