#!/bin/bash

hostname=""
ip=""
score=0
ping=0
speed=0
countrylong=""
countryshort=""
numvpnsessions=0
uptime=0
totalusers=0
totaltraffic=0
logtype=""
operator=""
message=""
openvpn_configdata_base64=""
servernum=1
cmd=""
loop=""

outlist()
{
    number=$1
    row=0
    until [ $row = "15" ]; do
	row=`expr $row + 1`
	line=`cat ./tmp/vpnhostlist/${servernum} | awk "NR==${row}"`
	case $row in
	    "1" ) hostname="$line";;
	    "2" ) ip="$line";;
	    "3" ) score="$line";;
	    "4" ) ping="$line";;
	    "5" ) speed="$line";;
	    "6" ) countrylong="$line";;
	    "7" ) countryshort="$line";;
	    "8" ) numvpnsessions="$line";;
	    "9" ) uptime="$line";;
	    "10" ) totalusers="$line";;
	    "11" ) totaltraffic="$line";;
	    "12" ) logtype="$line";;
	    "13" ) operator="$line";;
	    "14" ) message="$line";;
	    "15" ) openvpn_configdata_base64="$line";;
	esac
    done
    clear
    echo "${1}件目のサーバーを表示します"
    echo "国・地域(物理的位置):${countrylong}"
    echo "DDNS名:${hostname}"
    echo "IPアドレス:${ip}"
    echo "VPN接続数:${numvpnsessions}セッション"
    # echo "連続稼働時間:
    echo "過去${totalusers}人利用"
    speed=`echo "scale=2; ${speed}/1000000" | bc`
    echo "回線速度:${speed}Mpbs"
    echo "Ping:${ping}ms"
    totaltraffic=`echo "scale=2; ${totaltraffic}/1000000000" | bc`
    echo "累計通信量${totaltraffic}GB"
    echo "ログ記録ポリシー:${logtype}"
    echo "ボランティア運営者名:${operator}"
    echo "運営者によるメッセージ:${message}"
    echo "スコア(品質):${score}"
    echo ""
    echo "Enter:次のサーバーを表示    BackSpace:前のサーバーを表示"
    echo "C:このサーバーに接続"    "Q:終了"
    while : ; do
	read -s -n 1 cmd
	case $cmd in
	    "" )
		servernum=`expr $servernum + 1`
		if [ -e ./tmp/vpnhostlist/${servernum} ]; then
		    break
		else
		    echo "${servernum}番目のサーバーはありません"
		    servernum=`expr $servernum - 1`
		fi
		;;
	    $'\x7f' )
		if [ $servernum = 1 ]; then
		    echo "これ以上前のサーバーはありません"
		else
		    servernum=`expr $servernum - 1`
		    break
		fi
		;;
	    "c" | "C" )
		break
		;;
	    "q" | "Q" )
		break
		;;
	    * )
		read -s -n 1 cmd
		;;
	esac
    done
}
		

if [ "`id | grep root`" = "" ]; then
    echo "root権限で実行してください"
    exit 1
fi

if [ -e ./tmp ]; then
    echo "一時ファイルを削除しています"
    rm -rf ./tmp
fi
mkdir tmp

vpngate_address="www.vpngate.net/"
while getopts dm: OPTION; do
    case $OPTION in
	"m" )
	    echo "mオプションが指定されたので、指定されたミラーサーバーを使用します"
	    vpngate_address=$OPTARG 
	    ;;
	"d" )
	    echo "dオプションが指定されたので、ipアドレスを直接指定して取得を試みます"
	    vpngate_address=$(echo `host www.vpngate.net | awk NR==1`/)
	    break
	    ;;
    esac
done

echo "VPNサーバーの一覧を開始します"
wget -O ./tmp/vpnlist "${vpngate_address}api/iphone/"

if [ $? != 0 ]; then
    echo "サーバー一覧の取得に失敗しました"
    exit 1
fi

echo "VPNサーバーの一覧を処理しています"
mkdir ./tmp/vpnhostlist
cat ./tmp/vpnlist | tr "," "\n" > ./tmp/temp
rm -f ./tmp/vpnlist
mv ./tmp/temp ./tmp/vpnlist
i=-17
servernum=1
cat ./tmp/vpnlist | while read line; do
    i=`expr $i + 1`
    if [ $i -ge 0 ]; then
	echo "$line" >> ./tmp/vpnhostlist/$servernum
	if [ $i = "14" ]; then
	    servernum=`expr $servernum + 1`
	    i=-1
	    echo -n "."
	fi
    fi
done
echo "\n"
echo "完了しました"
servernum=1
loop="n"
while : ; do
    outlist $servernum
    case $cmd in
	"c" )
	    break;;
	"q" )
	    echo "終了しました"
	    exit 0;;
    esac
done
killall openvpn >/dev/null 2>&1
echo "$openvpn_configdata_base64" > ./tmp/openvpn_base64
base64 -d ./tmp/openvpn_base64 > ./tmp/openvpn.conf
openvpn --config ./tmp/openvpn.conf > /dev/null &
clear
echo "接続を開始しました"
echo "接続が完了するまで何秒かかかるので注意してください"
echo "接続できない場合はopenvpnを終了させてからもう一度このスクリプトを起動して違うサーバーに接続してみてください"
echo -n "キーを押すと終了します"
read

exit 0
