setup/clone/utility/wireless.dwc

96 lines
2.6 KiB
Bash

#!/bin/bash
LOGFILE="/home/sats/satsd/log/dwc.log";
slog(){
echo -e "$1" | sudo -u sats tee -a $LOGFILE > /dev/null;
}
failexit(){
slog "[`date +%s`] > failed";
exit 127;
}
connectedexit(){
slog "[`date +%s`] > connected";
slog "[`date +%s`] <<< Finished\n";
exit 0;
}
test ! -f $LOGFILE && sudo -u sats touch $LOGFILE;
HSALT="***SALT***";
HPEPPER="***PEPPER***";
slog "[`date +%s`] >>> Dynamic Wireless Credentials";
# [1] Checking connectivity
#========================================================#
slog "[`date +%s`] * 1. Checking connectivity"
[ -z "`ping xdrm.io -q -c 1 -i 1 2>&1 > /dev/null`" ] \
&& connectedexit \
|| slog "[`date +%s`] > offline";
# [2] Wifi scan for "SATS_*" APs
#========================================================#
# (1) Get interface name #
slog "[`date +%s`] * 2. Looking for wireless interface";
IFACE=`sudo ifconfig -a | grep -P "^w" | awk '{print $1}' | sed 's/:$//' | head -n 1`;
sudo ifconfig $IFACE up;
# (2) Manage no IFACE found #
test -z "$IFACE" && failexit;
slog "[`date +%s`] > done (got '$IFACE')";
# (3) Get nearest AP matching "SATS_*" and extract HASH #
slog "[`date +%s`] * 3. Looking for nearest AP matching 'SATS_.+'";
AP_HASH=`sudo iwlist $IFACE scan | grep -P "^\s*ESSID:\"SATS_.+\"\s*$" | sed 's/^[ \t]*ESSID:"SATS_//' | sed 's/"[ \t]*$//' | head -n 1`;
# (4) Manage no AP found #
test -z "$AP_HASH" && failexit;
slog "[`date +%s`] > done (got 'SATS_$AP_HASH')";
# [3] Calculate WIFI PASS from SSID hash
#========================================================#
slog "[`date +%s`] * 4. Processing WPA2 passphrase"
PASS=`echo -ne "$HPEPPER$(echo -ne "${HSALT}${AP_HASH}" | sha512sum | sed 's/[ \t]*-$//')" | sha512sum | sed 's/[ \t]*-//' | cut -b 1-63`;
slog "[`date +%s`] > done";
# [4] Update 'wpa_supplicant' configuration
#========================================================#
echo -e "ctrl_interface=/var/run/wpa_supplicant\n\nnetwork={\n\tssid=\"SATS_$AP_HASH\"\n\tpsk=\"$PASS\"\n}" | sudo tee /etc/wpa_supplicant/$IFACE.conf > /dev/null;
# [5] Restart connection
#========================================================#
# (1) Starting wpa_supplicant #
slog "[`date +%s`] * 5. Starting wpa_supplicant"
sudo pkill wpa_supplicant;
sudo wpa_supplicant -B -Dwext -i$IFACE -c/etc/wpa_supplicant/$IFACE.conf \
&& slog "[`date +%s`] > done" \
|| failexit;
# (2) Starting dhclient #
slog "[`date +%s`] * 6. Starting dhclient"
if [ ! -z "`pgrep dhclient`" ]; then
slog "[`date +%s`] > already running";
else
sudo dhclient $IFACE \
&& slog "[`date +%s`] > done" \
|| failexit;
fi;
slog "[`date +%s`] <<< Finished\n";