#!/bin/bash

function Welcome()
{
clear
echo -n "                      Local Time :   " && date "+%F [%T]       ";
echo "            ======================================================";
echo "            |                      lotServer                     |";
echo "            |                                     for Linux      |";
echo "            |----------------------------------------------------|";
echo "            |                                   --By fei5seven   |";
echo "            ======================================================";
echo "";
root_check;
mkdir -p /tmp
cd /tmp
}

function root_check()
{
if [[ $EUID -ne 0 ]]; then
  echo "Error:This script must be run as root!" 1>&2
  exit 1
fi
}

function pause()
{
read -n 1 -p "Press Enter to Continue..." INP
if [ "$INP" != '' ] ; then
  echo -ne '\b \n'
  echo "";
fi
}

function dep_check()
{
  apt-get >/dev/null 2>&1
  [ $? -le '1' ] && apt-get -y -qq install sed grep gawk ethtool >/dev/null 2>&1
  yum >/dev/null 2>&1
  [ $? -le '1' ] && yum -y -q install sed grep gawk ethtool >/dev/null 2>&1
}

function acce_check()
{
  local IFS='.'
  read ver01 ver02 ver03 ver04 <<<"$1"
  sum01=$[$ver01*2**32]
  sum02=$[$ver02*2**16]
  sum03=$[$ver03*2**8]
  sum04=$[$ver04*2**0]
  sum=$[$sum01+$sum02+$sum03+$sum04]
  [ "$sum" -gt '12885627914' ] && echo "1" || echo "0"
}

function Install()
{
  Welcome;
  echo 'Preparatory work...'
  Uninstall;
  dep_check;
  [ -f /etc/redhat-release ] && KNA=$(awk '{print $1}' /etc/redhat-release)
  [ -f /etc/os-release ] && KNA=$(awk -F'[= "]' '/PRETTY_NAME/{print $3}' /etc/os-release)
  [ -f /etc/lsb-release ] && KNA=$(awk -F'[="]+' '/DISTRIB_ID/{print $2}' /etc/lsb-release)
  KNB=$(getconf LONG_BIT)
  [ ! -f /proc/net/dev ] && echo -ne "I can not find network device! \n\n" && exit 1;
  Eth_List=`cat /proc/net/dev |awk -F: 'function trim(str){sub(/^[ \t]*/,"",str); sub(/[ \t]*$/,"",str); return str } NR>2 {print trim($1)}'  |grep -Ev '^lo|^sit|^stf|^gif|^dummy|^vmnet|^vir|^gre|^ipip|^ppp|^bond|^tun|^tap|^ip6gre|^ip6tnl|^teql|^venet' |awk 'NR==1 {print $0}'`
  [ -z "$Eth_List" ] && echo "I can not find the server pubilc Ethernet! " && exit 1
  Eth=$(echo "$Eth_List" |head -n1)
  [ -z "$Eth" ] && Uninstall "Error! Not found a valid ether. "
  Mac=$(cat /sys/class/net/${Eth}/address)
  [ -z "$Mac" ] && Uninstall "Error! Not found mac code. "
  URLKernel='https://github.com/fei5seven/lotServer/raw/master/lotServer.log'
  AcceData=$(wget --no-check-certificate -qO- "$URLKernel")
  AcceVer=$(echo "$AcceData" |grep "$KNA/" |grep "/x$KNB/" |grep "/$KNK/" |awk -F'/' '{print $NF}' |sort -nk 2 -t '_' |tail -n1)
  MyKernel=$(echo "$AcceData" |grep "$KNA/" |grep "/x$KNB/" |grep "/$KNK/" |grep "$AcceVer" |tail -n1)
  [ -z "$MyKernel" ] && echo -ne "Kernel not be matched! \nYou should change kernel manually, and try again! \n\nView the link to get details: \n"$URLKernel" \n\n\n" && exit 1
  pause;
  KNN=$(echo "$MyKernel" |awk -F '/' '{ print $2 }') && [ -z "$KNN" ] && Uninstall "Error! Not Matched. "
  KNV=$(echo "$MyKernel" |awk -F '/' '{ print $5 }') && [ -z "$KNV" ] && Uninstall "Error! Not Matched. "
  AcceRoot="/tmp/lotServer"
  AcceTmp="${AcceRoot}/apxfiles"
  AcceBin="acce-"$KNV"-["$KNA"_"$KNN"_"$KNK"]"
  mkdir -p "${AcceTmp}/bin/"
  mkdir -p "${AcceTmp}/etc/"
  wget --no-check-certificate -qO "${AcceTmp}/bin/${AcceBin}" "https://github.com/fei5seven/lotServer/raw/master/${MyKernel}"
  [ ! -f "${AcceTmp}/bin/${AcceBin}" ] && Uninstall "Download Error! Not Found ${AcceBin}. "
  Welcome;
  wget --no-check-certificate -qO "/tmp/lotServer.tar" "https://github.com/fei5seven/lotServer/raw/master/lotServer.tar"
  tar -xvf "/tmp/lotServer.tar" -C /tmp
  acce_ver=$(acce_check ${KNV})
  # 如果有自己搭建的或者api失效，这里修改成你自己的api即可
  wget --no-check-certificate -qO "${AcceTmp}/etc/apx.lic" "http://lotserver.gggu.eu.org/keygen.php?ver=${acce_ver}&mac=${Mac}"
  [ "$(du -b ${AcceTmp}/etc/apx.lic |cut -f1)" -lt '152' ] && Uninstall "Error! I can not generate the Lic for you, Please try again later. "
  echo "Lic generate success! "
  sed -i "s/^accif\=.*/accif\=\"$Eth\"/" "${AcceTmp}/etc/config"
  sed -i "s/^apxexe\=.*/apxexe\=\"\/appex\/bin\/$AcceBin\"/" "${AcceTmp}/etc/config"
  bash "${AcceRoot}/install.sh" -in 1000000 -out 1000000 -t 0 -r -b -i ${Eth}
  rm -rf /tmp/*lotServer* >/dev/null 2>&1
  Welcome;
  if [ -f /appex/bin/serverSpeeder.sh ]; then
    bash /appex/bin/serverSpeeder.sh status
  elif [ -f /appex/bin/lotServer.sh ]; then
    bash /appex/bin/lotServer.sh status
  fi
  exit 0
}

function Uninstall()
{
  AppexName="lotServer"
  [ -e /appex ] && chattr -R -i /appex >/dev/null 2>&1
  if [ -d /etc/rc.d ]; then
    rm -rf /etc/rc.d/init.d/serverSpeeder >/dev/null 2>&1
    rm -rf /etc/rc.d/rc*.d/*serverSpeeder >/dev/null 2>&1
    rm -rf /etc/rc.d/init.d/lotServer >/dev/null 2>&1
    rm -rf /etc/rc.d/rc*.d/*lotServer >/dev/null 2>&1
  fi
  if [ -d /etc/init.d ]; then
    rm -rf /etc/init.d/*serverSpeeder* >/dev/null 2>&1
    rm -rf /etc/rc*.d/*serverSpeeder* >/dev/null 2>&1
    rm -rf /etc/init.d/*lotServer* >/dev/null 2>&1
    rm -rf /etc/rc*.d/*lotServer* >/dev/null 2>&1
  fi
  rm -rf /etc/lotServer.conf >/dev/null 2>&1
  rm -rf /etc/serverSpeeder.conf >/dev/null 2>&1
  [ -f /appex/bin/lotServer.sh ] && AppexName="lotServer" && bash /appex/bin/lotServer.sh uninstall -f >/dev/null 2>&1
  [ -f /appex/bin/serverSpeeder.sh ] && AppexName="serverSpeeder" && bash /appex/bin/serverSpeeder.sh uninstall -f >/dev/null 2>&1
  rm -rf /appex >/dev/null 2>&1
  rm -rf /tmp/*${AppexName}* >/dev/null 2>&1
  [ -n "$1" ] && echo -ne "$AppexName has been removed! \n" && echo "$1" && echo -ne "\n\n\n" && exit 0
}

if [ $# == '1' ]; then
  [ "$1" == 'install' ] && KNK="$(uname -r)" && Install;
  [ "$1" == 'uninstall' ] && Welcome && pause && Uninstall "Done.";
elif [ $# == '2' ]; then
  [ "$1" == 'install' ] && KNK="$2" && Install;
else
  echo -ne "Usage:\n     bash $0 [install |uninstall |install '{Kernel Version}']\n"
fi


