#!/bin/ash
v=180123 #sfs
[ "`whoami`" != "root" ] && exec sudo -A ${0} ${@}

if [ ! "$1" ] ;then
pidof NetworkManager && exit #(sudo -u `sfsusr` nm-connection-editor &) && exit
systemctl is-active connman && exit
systemctl is-active wicd && exit
[ "`netctl list`" ] && exit
fi

RFK() { sudo rfkill unblock wifi; }

WV(){
if [ ! -f /etc/wvdial.conf ] ;then
    msg="Обнаружен /etc/wvdial.conf"
    wt "sudo wvdialconf"
else
    wt "sudo wvdialconf" 
    #sleep 2
    [ ! -f /etc/wvdial.conf ] && msg="/etc/wvdial.conf не обнаружен. Скопирован шаблон
Вероятно проблема с модемом." ; sudo cp /etc/wvdial.conf.bak /etc/wvdial.conf
fi

t="$(while read line; do echo "$line"; done < /etc/wvdial.conf | yad --width=400 --height=300 \
    --separator= --window-icon=gtk-edit --center \
    --title="3G модем" \
    --image-on-top --image="gtk-edit" \
    --text="$msg
Отредактируйте конфигурационный файл" \
    --text-info --editable \
    --text-listen \
    --button="Сохранить и запустить":0 \
    --button gtk-cancel:1 )"

[ "$t" ] && sudo echo "$t" >/etc/wvdial.conf 
exec sudo /lib/udev/wvdial.sh &
}
#WV;exit

OK() {
#Действия , выполняемые после успешной проверки подключения
ntf -i "Автонастройка сети:" "Интернет подключен" &
#[ "`which rox``which spacefm`" ] || (sfs-conky-start && rm ~/.tray ) &
sudo rdate.sh &
#sudo mount-dav dav.2safe.com user "pass" /mnt/net 
#Доп. user конфиг. Права 644
#nu="$HOME/Startup/10netcfg+" ; [ -f $nu ] && . $nu
wt -kill ;exit
}

TST(){
#$1=к-во попыток
ip="`ip route |awk '/^default / {print $3}'`" #шлюз
[ "$ip" ] || return
[ "$ip" = "ppp0" ] && ip="8.8.8.8"

while [ $1 -gt 0 ] ;do 
    #echo $i
    i=$(($i-1))
    sleep 1 
    `which sudo` ping -c 2 -W 3 "$ip" && OK #|| ntf -e "$m1" "не удалась" &
done
}

AWF(){
#wt "sleep 5000" "Поиск 111 wifi сетей" &
wt -start "Поиск wifi сетей" &
  msg="Такие сети не обнаружены"
    sudo ifconfig $IFACE up ; sleep 2
    echo "wireless $IFACE up" #>> /tmp/network.log #контроль
 ###* Получаем список откр. точек доступа 
 [ -f /tmp/iwopen ] && rm /tmp/iwopen
 [ -f /tmp/iwopen2 ] && rm /tmp/iwopen2
sudo iwlist $IFACE sc | grep -E 'Address:|Channel:|Quality|Encryption key:|ESSID:' > /tmp/iwlist #iwopen1
# sudo iwlist $IFACE sc | grep -E 'Address:|Channel:|Quality|Encryption key:|ESSID:' |sed 's/Antonidze/A n to     ze/'> /tmp/iwlist #iwopen1
 #sudo iwlist $IFACE sc | grep -E 'Address:|Channel:|Quality|Encryption key:off|ESSID:' > /tmp/iwopen

 for WLNADDR in $(awk '/Address:/ {print $5}' /tmp/iwlist);  do #все
#    grep -A 4 $WLNADDR /tmp/iwlist |tr -d "\n" |awk '{print $7"\t"$9"\t"$12"\t"$5"\t"$6"\t"$13}' 
    grep -A 4 $WLNADDR /tmp/iwlist |tr -d "\n" |awk '{printf $7"\t"$9"\t"$12"\t"$5"\t"$6"\t"}' 
    grep -A 4 $WLNADDR /tmp/iwlist |tr -d "\n" |awk -F"ESSID:" '{print "ESSID:"$2}' 
#    grep -A 4 $WLNADDR /tmp/iwlist |tr -d "\n" |awk '{print $7"\t"$9"\t"$12"\t"$5"\t"$6"\t"$13" "$14}' 
#    grep -A 4 $WLNADDR /tmp/iwlist |tr -d "\n" |awk '{print $7"\t"$9"\t"$12"\t"$5"\t"$6"\t"$13" "$14}' 
 done |sort -r >/tmp/iwopen2
wt -kill
}

OWF(){
###* Получаем список безпроводных интерфейсов (DDS)
#for IFACE in $(awk '/wi-fi/ {print $2}' /tmp/network.log) ;do
for IFACE in `iwconfig | awk '/IEEE / {print $1}'` ;do
AWF >/dev/null
#  for net in "`grep key:off /tmp/iwopen2 |head -1`" ;do
[ ! "`grep key:off /tmp/iwopen2`" ] && (ntf -a "Открытых WiFi сетей не обнаружено" ) && EXIT
   grep key:off /tmp/iwopen2 |while read net ;do 
		#ntf -w "$net"
	#`echo "$net" |awk '{print "sudo iwconfig '$IFACE' essid "$6" key off channel "$7}'` && msg=
	#es="`echo $net |awk -F "ESSID:" '{print $2}' |awk '{print $1}' |sed 's/\"//g'`"
	es="`echo "$net" |awk -F "ESSID:" '{print $2}' |tr -d "\\"" `" #"
	ch="`echo "$net" |awk -F "Channel:" '{print $2}' |awk '{print $1}'`"
	ntf -i "Попытка подключения" "к $es" &
	echo "sudo iwconfig $IFACE essid $es key off channel $ch"
	sudo iwconfig "$IFACE" essid "$es" key off channel "$ch" && msg=
    ###* пробуем подключиться
 T=0
 until [ "$(cat /sys/class/net/$IFACE/carrier)" = 1 ]; do
 sleep 1
 T="$(expr $T + 1)"
 #echo -n "$T " >> /tmp/network.log #контроль
    if [ $T = 5 ]; then
    #не подключилось
    [ "$(pidof wpa_supplicant)" ] && sudo kill $(pidof wpa_supplicant)
    sudo ifconfig $IFACE down
    #echo "interface $IFACE down" >> /tmp/network.log #контроль
    break
    fi 
 done
 [ $T = 5 ] && continue
    #finddevconf
    #sudo `which wt` "dhcpcd $IFACE"
    sudo wt -o "dhcpcd $IFACE"
    TST 2
    sudo killall dhcpcd ; sudo ifconfig $IFACE down
  done
echo "end $IFACE" #;exit
done
    TST 2
    ntf -e "Подключиться к открытой Wi-Fi не удалось" "$msg" &
rm /tmp/iwopen* /tmp/iwlist
}

NET(){
for IFACE in `iwconfig | awk '/IEEE / {print $1}'` ;do
    AWF >/dev/null
   grep key: /tmp/iwopen2 |while read net ;do 
#	echo "$net" >/tmp/net
	#`echo "$net" |awk '{print "sudo iwconfig '$IFACE' essid "$6" key off channel "$7}'` && msg=
#	es="`echo $net |awk -F "ESSID:" '{print $2}' |awk '{print $1}' |sed 's/\"//g'`"
#	es="`echo $net |awk -F "ESSID:" '{print $2}'  |tr "\\"" "'"`" # |awk '{print $1}'" # |sed 's/\//g'`"
#	es="`echo $net |awk -F "ESSID:" '{print $2}'  |tr -d "\"" `"
#	es="`echo $net |awk -F "ESSID:" '{print $2}'`" #  |tr -d "\"" `"
#	es="`cat /tmp/net |awk -F "ESSID:" '{print $2}' |tr -d "\\"" `"
	es="`echo "$net" |awk -F "ESSID:" '{print $2}' |tr -d "\\"" `" #"
##ntf -w "a" "$es\n$net"
	#ch="`echo $net |awk -F "Channel:" '{print $2}' |awk '{print $1}'`"
	qa="`echo "$net" |awk -F "Quality=" '{print $2}' |awk -F/ '{print $1}'`"
	if [ "`echo "$net" |grep "key:on"`" ] ;then
	    ic=gtk-dialog-authentication ; wp=wpa
	else
	    ic=gtk-yes ; wp=none
	fi
	echo "$es
$qa
$ic
$wp
$IFACE"
   done
done
} 

EXIT(){
($0 -notest &) && exit
}

WF(){
sel="$(NET |yad   --title "Настройка wifi сети v.$v" --list --text \
    "<span size='large'><b>    Найдены сети:</b></span>:     "  --height=240 --width=240 --center  \
	--image-on-top --image="network-transmit-recieve" \
	--window-icon=gtk-network \
	--hide-column=4 \
	--separator="_1234edfqthhgdtthhjdbnvg_" \
	--search-column=1 \
	--column="ESSID" \
	--column="сила" \
	--column=:IMG \
	--column="шифр." \
	--column="инт." \
	)"
[ "$?" = "0" ] || EXIT
rm /tmp/iwopen* /tmp/iwlist
echo "$sel" >/tmp/sel
if [ "`echo "$sel" | awk -F"_1234edfqthhgdtthhjdbnvg_" '{print $4}'`" = "wpa" ] ;then
    #key="`yad --undecorated --center --separator="" --form --field=ключ:H`"
    key="`yad --title="Пароль подключения к wifi" --window-icon=gtk-network --center --separator="" --form --field=ключ:H`"
    #echo -$sel-
    [ "$key" = "" ] && ntf -e "У закрытых сетей ключ" "не может быть пустым" && EXIT
    es="`echo "$sel" | awk -F"_1234edfqthhgdtthhjdbnvg_"  '{print $1}'`"
    key="Key=$(wpa_passphrase "$es" "$key" | sed -n "s/^[[:space:]]*psk=//p")"
fi

#F="`echo "$sel" | awk -F"_1234edfqthhgdtthhjdbnvg_"  '{print "/etc/netctl/"$4"-"$1}'`"
F="`echo "$sel" | awk -F"_1234edfqthhgdtthhjdbnvg_"  '{print "/etc/netctl/"$5"-"$1}' |sed 's/ /_/g'`"

sudo echo "Description='Automatically generated profile by net-auto'" >$F
sudo echo "$sel$key" | awk  -F"_1234edfqthhgdtthhjdbnvg_" '{print "Interface="$5"\n\
Connection=wireless\n\
Security="$4"\n\
ESSID='"'"'"$1"'"'"'\n\
IP=dhcp\n\
'$key'"}' >>$F && (sudo netctl.sh &) && exit
}

#########################start#########
case "$1" in
        --help)
                echo "Usage: $0 [-notest|-wi-fi|-open_wi-fi|-wvdial]
    -notest - пропустить начальный тест подключения и автонастройку проводного dhcp
    -open_wi-fi|-wvdial - запустить только настройку этой категории"
                exit
                ;;
        -wi-fi)
                WF ; exit
                ;;
        -wvdial)
                WV ; exit
                ;;
        -open_wi-fi)
                OWF ; exit
                ;;
esac

notest=1
if ! echo $@| grep -q '\-notest' ;then
##wt -start "Проверка сетей"
###* Ожидаем когда отработают enable конфиги netctl
net="`ps ax |awk '/\/usr\/lib\/network\/network/ {print $6" "$7" "$8}'|sed 's/\/usr\/lib\/network\///' |sort -u`"
if [ "$net" ] ;then
    ntf -i "$net" 
    while [ "`pgrep network`" ] ;do
	sleep 0.5
    done
    TST 7
fi

TST 2
###*Находим проводные (DDS)
for IFACE in $(ls /sys/class/net/ | egrep -v 'lo|ppp') ;do
#for IFACE in `iwconfig 2>&1 | awk '!/^lo/ && !/^$/ && !/^ppp/ {print $1}'` ;do
    #[ "$IFACE" = "ppp" ] && (echo "ppp up";continue)
	[ -d /sys/class/net/$IFACE/wireless ] &&  echo "--wi-fi $IFACE" && continue
    echo "--$IFACE wire"
    [ "$(cat /sys/class/net/$IFACE/operstate)" = "down" ] && (sudo ifconfig $IFACE up; sleep 3)
    ###* ненастроенные
    [ "$(ifconfig $IFACE | grep 'inet ')" != "" ] && continue 
    echo "--$IFACE noconfig"
	#if [ -d /sys/class/net/$IFACE/wireless ]; then
	#    echo "wi-fi $IFACE" && continue
	#elif [ "$(cat /sys/class/net/$IFACE/carrier)" = 1 ]; then
	#    echo "wired $IFACE"
	#fi
    ###* но активные и запускаем dhcp
    if [ "$(cat /sys/class/net/$IFACE/carrier)" = 1 ] ;then
    echo "--$IFACE activ"
	#sudo `which wt` "dhcpcd $IFACE"
	sudo wt -o "dhcpcd $IFACE" "Автонастройка сети
Попытка настроить проводной интерфейс:
dhcpcd $IFACE"
	TST 2
    fi
    sudo killall dhcpcd
    sudo ifconfig $IFACE down
done
fi
wt -kill

###* Проверяем наличие 3g модема
XXX(){
[ -L /dev/modem ] && m="
gtk-edit
wvdial
3G модем"
}

###* и wifi
RFK
if [ "`iwconfig`" ] ;then
w="
network-transmit-recieve
wifi
Мастер настройки wi-fi
\
network-transmit-recieve
open_wi-fi
Поиск открытых wi-fi сетей" 

which rc || w="$w
terminal
wifi-menu
Консольный мастер wi-fi"
fi

s="gtk-network
netctl
Мастер настройки сети$w$m"
which gnome-ppp && s="$s
\
gnome-ppp
gnome-ppp
Мастер настройки модема" 
#echo "--$s---"

###* Предлагаем выбрать из оставшихся вариантов настройки
msg="<span color='red' size='large'>Настроить сеть не удалось.</span>"
[ $notest ] && msg=

sel="$(echo "$s" |yad   --title "Настройка сети v.$v" --list --text \
    "$msg
<span size='large'><b>Доступные варианты настройки:</b></span>       "  --height=290 --center  \
	--image-on-top --image="internet_connect_no" \
	--window-icon=gtk-network \
	--search-column=2 \
	--print-column=2 \
	--column=:IMG \
	--column="Тип" \
	--column="Описание:TEXT" |tr -d "|")"

#[ "$sel" ] || sel="netctl"

case "$sel" in
        gnome-ppp)
                sudo gnome-ppp & 
                exit
                ;;
        wvdial)
                WV
                ;;
        open_wi-fi)
                OWF
                ;;
        wifi)
                WF
                exit
                ;;
        wifi-menu)
                wifi-menu.sh & 
                #urxvt -e sudo wifi-menu -o &
                exit
                ;;
        netctl)
                sudo netctl.sh & 
                exit
                ;;
        *)
                exit
                ;;
esac
#[ "`which frisbee`" ] && (`which sudo` frisbee &) && exit
#sudo netctl.sh & 
$0 & 
#exit $?

exit
######################################## end ########

###* В случае неудачи, пробуем все оставшиеся конфиги netctl https://wiki.archlinux.org/index.php/Netctl_(Русский)
n="`netctl list |grep -v '*'`" # |head -1`" 
#if [ "$n" ] ;then
    for nn in `echo $n` ;do
	m="Попытка подключения к сети $nn"
	ntf -i "$m" &
	. /etc/netctl/$nn 
	echo int=$Interface
	#`which sudo` dhcpcd
	#netctl=/usr/lib/network/network
	netctl=netctl
	`which sudo` ifconfig $Interface down && sudo `which wt` "$netctl start $nn" && TST 1 #sleep 3 && I #\
#	    ntf -i "Ждите..." && sleep 3 && I
	ntf -e "$m" "не удалась" &
    done
#fi

DHCP1(){
iw="`iwconfig | awk '/IEEE / {print $1}'`"
if="`ifconfig -a|awk -F: '/ flags=/ {print $1}'| egrep -v '$iw|lo'`"
echo if=$if iw=$iw
for i in `echo $if` ;do
    [ "`cat /sys/class/net/$i/operstate`" = "up" ]  && `which sudo` dhcpcd && return #&
done
}

DHCP(){
#Если 
[ "`ifconfig |grep ",RUNNING" |wc -l`" -lt 2 ] && `which sudo` dhcpcd #&
}

m1="Попытка автоподключения к интернет"
ntf -i "$m1" "Ждите..." &

DHCP
TST
ntf -e "$m1" "не удалась" &

[ "`which frisbee`" ] && (`which sudo` frisbee &) && exit
[ "`ifconfig |grep ",RUNNING" |wc -l`" -lt 2 ] &&  `which sudo` xpns-tool #&
