Browse Source

wifi menu

Bob Mottram 9 years ago
parent
commit
0e465fa575
6 changed files with 141 additions and 139 deletions
  1. 10
    0
      src/freedombone
  2. 2
    28
      src/freedombone-config
  3. 45
    88
      src/freedombone-controlpanel
  4. 1
    1
      src/freedombone-image
  5. 1
    1
      src/freedombone-image-customise
  6. 82
    21
      src/freedombone-wifi

+ 10
- 0
src/freedombone View File

@@ -452,6 +452,7 @@ WIFI_TYPE='wpa2-psk'
452 452
 WIFI_SSID=
453 453
 WIFI_PASSPHRASE=
454 454
 WIFI_HOTSPOT='no'
455
+WIFI_NETWORKS_FILE=~/${PROJECT_NAME}-wifi.cfg
455 456
 
456 457
 # cjdns settings
457 458
 ENABLE_CJDNS="no"
@@ -1094,6 +1095,9 @@ function read_configuration {
1094 1095
         if grep -q "WIFI_HOTSPOT" $CONFIGURATION_FILE; then
1095 1096
             WIFI_HOTSPOT=$(grep "WIFI_HOTSPOT" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
1096 1097
         fi
1098
+        if grep -q "WIFI_NETWORKS_FILE" $CONFIGURATION_FILE; then
1099
+            WIFI_NETWORKS_FILE=$(grep "WIFI_NETWORKS_FILE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
1100
+        fi
1097 1101
         if grep -q "SYNCTHING_ID" $CONFIGURATION_FILE; then
1098 1102
             SYNCTHING_ID=$(grep "SYNCTHING_ID" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
1099 1103
         fi
@@ -1749,6 +1753,12 @@ function setup_wifi {
1749 1753
     if [[ $WIFI_HOTSPOT != 'no' ]]; then
1750 1754
         HOTSPOT='yes'
1751 1755
     fi
1756
+
1757
+    if [ -f $WIFI_NETWORKS_FILE ]; then
1758
+        ${PROJECT_NAME}-wifi -i $WIFI_INTERFACE --networks $WIFI_NETWORKS_FILE
1759
+        echo 'setup_wifi' >> $COMPLETION_FILE
1760
+        return
1761
+    fi
1752 1762
     
1753 1763
     if [[ $WIFI_TYPE != 'none' ]]; then
1754 1764
         if [ ! $WIFI_PASSPHRASE ]; then

+ 2
- 28
src/freedombone-config View File

@@ -107,6 +107,7 @@ WIFI_TYPE='wpa2-psk'
107 107
 WIFI_SSID=
108 108
 WIFI_PASSPHRASE=
109 109
 WIFI_HOTSPOT=
110
+WIFI_NETWORKS_FILE=~/${PROJECT_NAME}-wifi.cfg
110 111
 BATMAN_CELLID='any'
111 112
 WIFI_CHANNEL=
112 113
 CONFIGURATION_FILE=
@@ -1352,35 +1353,8 @@ function interactive_configuration {
1352 1353
     fi
1353 1354
     
1354 1355
     if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then
1355
-        data=$(tempfile 2>/dev/null)
1356
-        trap "rm -f $data" 0 1 2 5 15
1357
-        dialog --backtitle $"Freedombone Configuration" \
1358
-               --title $"Wifi Settings" \
1359
-               --form $"\nIf you wish to use wifi and have a Free Software compatible adapter (eg. Atheros) rather than wired ethernet then enter the details below, otherwise just select Ok:" 17 55 6 \
1360
-               $"Interface:" 1 1 "$WIFI_INTERFACE" 1 16 6 6 \
1361
-               $"SSID:" 2 1 "$WIFI_SSID" 2 16 30 30 \
1362
-               $"Type:" 3 1 "$WIFI_TYPE" 3 16 10 10 \
1363
-               $"Passphrase:" 4 1 "$WIFI_PASSPHRASE" 4 16 30 30 \
1364
-               $"Hotspot:" 5 1 "$WIFI_HOTSPOT" 5 16 6 6 \
1365
-               2> $data
1366
-        sel=$?
1367
-        case $sel in
1368
-            1) exit 1;;
1369
-            255) exit 1;;
1370
-        esac
1371
-        WIFI_INTERFACE=$(cat $data | sed -n 1p)
1372
-        WIFI_SSID=$(cat $data | sed -n 2p)
1373
-        WIFI_TYPE=$(cat $data | sed -n 3p)
1374
-        WIFI_PASSPHRASE=$(cat $data | sed -n 4p)
1375
-        WIFI_HOTSPOT=$(cat $data | sed -n 5p)
1376
-        if [[ $WIFI_HOTSPOT == $'Y' || $WIFI_HOTSPOT == $'y' || $WIFI_HOTSPOT == $'yes' || $WIFI_HOTSPOT == $'Yes' || $WIFI_HOTSPOT == $'true' || $WIFI_HOTSPOT == $'on' || $WIFI_HOTSPOT == $'True' || $WIFI_HOTSPOT == '1' ]]; then
1377
-            WIFI_HOTSPOT='yes'
1378
-        else
1379
-            WIFI_HOTSPOT='no'           
1380
-        fi      
1381
-        save_configuration_file
1356
+		${PROJECT_NAME}-wifi --networksinteractive $WIFI_NETWORKS_FILE
1382 1357
     fi
1383
-
1384 1358
     
1385 1359
     if [[ $SYSTEM_TYPE != "$VARIANT_MESH" && $ONION_ONLY == "no" ]]; then
1386 1360
 

+ 45
- 88
src/freedombone-controlpanel View File

@@ -65,6 +65,7 @@ WIFI_SSID=
65 65
 WIFI_TYPE='wpa2-psk'
66 66
 WIFI_PASSPHRASE=
67 67
 WIFI_HOTSPOT='no'
68
+WIFI_NETWORKS_FILE=~/${PROJECT_NAME}-wifi.cfg
68 69
 
69 70
 USB_DRIVE=sdb
70 71
 # get default USB from config file
@@ -1684,94 +1685,15 @@ Enter a static local IP address for this system.\n\nIt will typically be 192.168
1684 1685
 }
1685 1686
 
1686 1687
 function wifi_settings {
1687
-    PREV_WIFI_HOTSPOT=$WIFI_HOTSPOT
1688
-    PREV_WIFI_INTERFACE=$WIFI_INTERFACE
1689
-    PREV_WIFI_SSID=$WIFI_SSID
1690
-    PREV_WIFI_TYPE=$WIFI_TYPE
1691
-    PREV_WIFI_PASSPHRASE=$WIFI_PASSPHRASE
1692
-
1693
-    data=$(tempfile 2>/dev/null)
1694
-    trap "rm -f $data" 0 1 2 5 15
1695
-    dialog --backtitle $"Freedombone Control Panel" \
1696
-           --title $"Wifi Settings" \
1697
-           --form $"\nIf you wish to use wifi and have a Free Software compatible adapter (eg. Atheros) rather than wired ethernet then enter the details below, otherwise just select Ok:" 17 55 6 \
1698
-           $"Interface:" 1 1 "$WIFI_INTERFACE" 1 16 6 6 \
1699
-           $"SSID:" 2 1 "$WIFI_SSID" 2 16 30 30 \
1700
-           $"Type:" 3 1 "$WIFI_TYPE" 3 16 10 10 \
1701
-           $"Passphrase:" 4 1 "$WIFI_PASSPHRASE" 4 16 30 30 \
1702
-           $"Hotspot:" 5 1 "$WIFI_HOTSPOT" 5 16 6 6 \
1703
-           2> $data
1704
-    sel=$?
1705
-    case $sel in
1706
-        1) return;;
1707
-        255) return;;
1708
-    esac
1709
-    NEW_WIFI_INTERFACE=$(cat $data | sed -n 1p)
1710
-    NEW_WIFI_SSID=$(cat $data | sed -n 2p)
1711
-    NEW_WIFI_TYPE=$(cat $data | sed -n 3p)
1712
-    NEW_WIFI_PASSPHRASE=$(cat $data | sed -n 4p)
1713
-    NEW_WIFI_HOTSPOT=$(cat $data | sed -n 5p)
1714
-
1715
-    if [[ $NEW_WIFI_TYPE != 'none' && $NEW_WIFI_TYPE != 'wpa2-psk' ]]; then
1716
-        return
1717
-    fi
1718
-    
1719
-    if [[ $NEW_WIFI_TYPE != 'none' ]]; then
1720
-        if [ ! $NEW_WIFI_PASSPHRASE ]; then
1721
-            return
1722
-        fi
1723
-        if [ ${#NEW_WIFI_PASSPHRASE} -lt 2 ]; then
1724
-            return
1725
-        fi
1726
-
1727
-        HOTSPOT='no'
1728
-        if [[ $NEW_WIFI_HOTSPOT == $'Y' || $NEW_WIFI_HOTSPOT == $'y' || $NEW_WIFI_HOTSPOT == $'yes' || $NEW_WIFI_HOTSPOT == $'Yes' || $NEW_WIFI_HOTSPOT == $'true' || $NEW_WIFI_HOTSPOT == $'on' || $NEW_WIFI_HOTSPOT == $'True' || $NEW_WIFI_HOTSPOT == '1' ]]; then
1729
-            HOTSPOT='yes'
1730
-        fi      
1731
-        
1732
-        ${PROJECT_NAME}-wifi -i $NEW_WIFI_INTERFACE -s $NEW_WIFI_SSID -t $NEW_WIFI_TYPE -p $NEW_WIFI_PASSPHRASE --hotspot $HOTSPOT
1733
-    else
1734
-        ${PROJECT_NAME}-wifi -i $NEW_WIFI_INTERFACE -s $NEW_WIFI_SSID -t $NEW_WIFI_TYPE --hotspot $HOTSPOT
1735
-    fi
1736
-
1737
-    if [[ $PREV_WIFI_INTERFACE != $NEW_WIFI_INTERFACE || $PREV_WIFI_SSID != $NEW_WIFI_SSID || $PREV_WIFI_TYPE != $NEW_WIFI_TYPE || $PREV_WIFI_PASSPHRASE != $NEW_WIFI_PASSPHRASE ]]; then
1688
+    TEMP_WIFI_NETWORKS_FILE=~/.temp-${PROJECT_NAME}-wifi.cfg
1689
+    ${PROJECT_NAME}-wifi --networksinteractive $TEMP_WIFI_NETWORKS_FILE
1690
+    if [ -f $TEMP_WIFI_NETWORKS_FILE ]; then
1691
+        cp $TEMP_WIFI_NETWORKS_FILE $WIFI_NETWORKS_FILE
1692
+        rm $TEMP_WIFI_NETWORKS_FILE
1693
+        ${PROJECT_NAME}-wifi --networks $WIFI_NETWORKS_FILE
1738 1694
         dialog --title $"Wifi Settings" \
1739 1695
                --msgbox $"Wifi settings were changed" 6 40
1740
-
1741
-        WIFI_INTERFACE=$NEW_WIFI_INTERFACE
1742
-        WIFI_SSID=$NEW_WIFI_SSID
1743
-        WIFI_TYPE=$NEW_WIFI_TYPE
1744
-        WIFI_PASSPHRASE=$NEW_WIFI_PASSPHRASE
1745
-        
1746
-        # update the configuration
1747
-        if ! grep -q "WIFI_INTERFACE=" $CONFIGURATION_FILE; then
1748
-            echo "WIFI_INTERFACE=$WIFI_INTERFACE" >> $CONFIGURATION_FILE
1749
-        else
1750
-            sed -i "s|WIFI_INTERFACE=.*|WIFI_INTERFACE=$WIFI_INTERFACE|g" $CONFIGURATION_FILE
1751
-        fi
1752
-        if ! grep -q "WIFI_TYPE=" $CONFIGURATION_FILE; then
1753
-            echo "WIFI_TYPE=$WIFI_TYPE" >> $CONFIGURATION_FILE
1754
-        else
1755
-            sed -i "s|WIFI_TYPE=.*|WIFI_TYPE=$WIFI_TYPE|g" $CONFIGURATION_FILE
1756
-        fi
1757
-        if ! grep -q "WIFI_SSID=" $CONFIGURATION_FILE; then
1758
-            echo "WIFI_SSID=$WIFI_SSID" >> $CONFIGURATION_FILE
1759
-        else
1760
-            sed -i "s|WIFI_SSID=.*|WIFI_SSID=$WIFI_SSID|g" $CONFIGURATION_FILE
1761
-        fi
1762
-        if ! grep -q "WIFI_PASSPHRASE=" $CONFIGURATION_FILE; then
1763
-            echo "WIFI_PASSPHRASE=$WIFI_PASSPHRASE" >> $CONFIGURATION_FILE
1764
-        else
1765
-            sed -i "s|WIFI_PASSPHRASE=.*|WIFI_PASSPHRASE=$WIFI_PASSPHRASE|g" $CONFIGURATION_FILE
1766
-        fi
1767
-        if ! grep -q "WIFI_HOTSPOT=" $CONFIGURATION_FILE; then
1768
-            echo "WIFI_HOTSPOT=$WIFI_HOTSPOT" >> $CONFIGURATION_FILE
1769
-        else
1770
-            sed -i "s|WIFI_HOTSPOT=.*|WIFI_HOTSPOT=$WIFI_HOTSPOT|g" $CONFIGURATION_FILE
1771
-        fi
1772
-        
1773
-        systemctl restart network-manager
1774
-    fi  
1696
+    fi
1775 1697
 }
1776 1698
 
1777 1699
 function menu_backup_restore {
@@ -1919,6 +1841,41 @@ function menu_media {
1919 1841
     done
1920 1842
 }
1921 1843
 
1844
+function hotspot_settings {
1845
+    # TODO  
1846
+}
1847
+
1848
+function menu_wifi {
1849
+    hotspot_state=$'off'
1850
+    if [ -f /etc/hostapd/hostapd.conf ]; then
1851
+        hotspot_state=$'on'
1852
+    fi
1853
+    
1854
+    while true
1855
+    do
1856
+        data=$(tempfile 2>/dev/null)
1857
+        trap "rm -f $data" 0 1 2 5 15
1858
+        dialog --backtitle $"Freedombone Control Panel" \
1859
+               --title $"Wifi Menu" \
1860
+               --radiolist $"Choose an operation:" 12 70 4 \
1861
+               1 $"Configure wifi networks" off \
1862
+               2 $"Manually edit wifi networks file" off \
1863
+               3 $"Hotspot settings" off \
1864
+               4 $"Exit" on 2> $data
1865
+        sel=$?
1866
+        case $sel in
1867
+            1) break;;
1868
+            255) break;;
1869
+        esac
1870
+        case $(cat $data) in
1871
+            1) wifi_settings;;
1872
+            2) editor $WIFI_NETWORKS_FILE;;
1873
+            3) hotspot_settings;;
1874
+            4) break;;
1875
+        esac
1876
+    done
1877
+}
1878
+
1922 1879
 function menu_irc {
1923 1880
     if [ ! -d /etc/ngircd ]; then
1924 1881
         dialog --title $"IRC Menu" \
@@ -1974,7 +1931,7 @@ function menu_top_level {
1974 1931
                15 $"Change the name of this system" off \
1975 1932
                16 $"Set the TLS date/time source" off \
1976 1933
                17 $"Set a static local IP address" off \
1977
-               18 $"Wifi Settings" off \
1934
+               18 $"Wifi menu" off \
1978 1935
                19 $"Check for updates" off \
1979 1936
                20 $"Power off the system" off \
1980 1937
                21 $"Restart the system" off \
@@ -2002,7 +1959,7 @@ function menu_top_level {
2002 1959
             15) change_system_name;;
2003 1960
             16) set_tls_time_source;;
2004 1961
             17) set_static_IP;;
2005
-            18) wifi_settings;;
1962
+            18) menu_wifi;;
2006 1963
             19) check_for_updates;;
2007 1964
             20) shut_down_system;;
2008 1965
             21) restart_system;;

+ 1
- 1
src/freedombone-image View File

@@ -106,7 +106,7 @@ WIFI_SSID=
106 106
 WIFI_TYPE='wpa-psk'
107 107
 WIFI_PASSPHRASE=
108 108
 WIFI_HOTSPOT='no'
109
-WIFI_NETWORKS_FILE=${PROJECT_NAME}-wifi.cfg
109
+WIFI_NETWORKS_FILE=~/${PROJECT_NAME}-wifi.cfg
110 110
 
111 111
 mesh_router_setup_script() {
112 112
     # create a setup script for a mesh router

+ 1
- 1
src/freedombone-image-customise View File

@@ -84,7 +84,7 @@ WIFI_SSID=
84 84
 WIFI_TYPE='wpa-psk'
85 85
 WIFI_PASSPHRASE=
86 86
 WIFI_HOTSPOT='no'
87
-WIFI_NETWORKS_FILE=${PROJECT_NAME}-wifi.cfg
87
+WIFI_NETWORKS_FILE=~/${PROJECT_NAME}-wifi.cfg
88 88
 
89 89
 enable_eatmydata_override() {
90 90
 	chroot $rootdir apt-get install --no-install-recommends -y eatmydata

+ 82
- 21
src/freedombone-wifi View File

@@ -42,7 +42,8 @@ WIFI_SSID=
42 42
 WIFI_PASSPHRASE=
43 43
 WIFI_HOTSPOT='no'
44 44
 WIFI_CONFIG=/etc/wpa_supplicant/wpa_supplicant.conf
45
-WIFI_NETWORKS_FILE=/root/${PROJECT_NAME}-wifi.cfg
45
+WIFI_NETWORKS_FILE=~/${PROJECT_NAME}-wifi.cfg
46
+NETWORKS_INTERACTIVE=
46 47
 
47 48
 function wifi_get_psk {
48 49
     ssid=$1
@@ -196,7 +197,7 @@ function wifi_none {
196 197
     systemctl restart network-manager
197 198
 }
198 199
 
199
-function create_networks_from_file {
200
+function networks_from_file {
200 201
     if [ ! -f $WIFI_NETWORKS_FILE ]; then
201 202
         exit 4
202 203
     fi
@@ -259,6 +260,54 @@ function create_networks_from_file {
259 260
     systemctl restart network-manager
260 261
 }
261 262
 
263
+function create_networks_interactive {
264
+	if [ -f $WIFI_NETWORKS_FILE ]; then
265
+		rm $WIFI_NETWORKS_FILE
266
+	fi
267
+
268
+	wifi_ctr=0
269
+	wifi_networks_done=
270
+    while [ ! $wifi_networks_done ]
271
+    do
272
+		data=$(tempfile 2>/dev/null)
273
+		trap "rm -f $data" 0 1 2 5 15
274
+		dialog --backtitle $"Freedombone Configuration" \
275
+			   --title $"Wifi Settings ${wifi_ctr}" \
276
+			   --form $"\nIf you wish to use wifi and have a Free Software compatible adapter (eg. Atheros) rather than wired ethernet then enter the details below, otherwise just select Ok:" 15 55 4 \
277
+			   $"SSID:" 1 1 "$WIFI_SSID" 1 16 30 30 \
278
+			   $"Type:" 2 1 "$WIFI_TYPE" 2 16 10 10 \
279
+			   $"Passphrase:" 3 1 "$WIFI_PASSPHRASE" 3 16 30 30 \
280
+			   2> $data
281
+		sel=$?
282
+		case $sel in
283
+			1) return;;
284
+			255) return;;
285
+		esac
286
+		WIFI_SSID=$(cat $data | sed -n 1p)
287
+		WIFI_TYPE=$(cat $data | sed -n 2p)
288
+		WIFI_PASSPHRASE=$(cat $data | sed -n 3p)
289
+
290
+		# if these fields are empty then there are no more wifi networks
291
+		if [ ${#WIFI_SSID} -lt 2 ]; then
292
+			wifi_networks_done='yes'
293
+			continue
294
+		fi	
295
+		if [ ${#WIFI_TYPE} -lt 2 ]; then
296
+			wifi_networks_done='yes'
297
+			continue
298
+		fi
299
+		
300
+		# update the wifi networks file
301
+		echo '' >> $WIFI_NETWORKS_FILE
302
+		echo "$WIFI_SSID" >> $WIFI_NETWORKS_FILE
303
+		echo "$WIFI_TYPE" >> $WIFI_NETWORKS_FILE
304
+		if [ ${#WIFI_PASSPHRASE} -gt 1 ]; then
305
+			echo "$WIFI_PASSPHRASE" >> $WIFI_NETWORKS_FILE
306
+		fi
307
+		wifi_ctr=$((wifi_ctr + 1))
308
+	done
309
+}
310
+
262 311
 function show_help {
263 312
     echo ''
264 313
     echo $"${PROJECT_NAME}-wifi -i [interface] -t [type] -s [ssid] -p [passphrase]"
@@ -271,6 +320,8 @@ function show_help {
271 320
     echo $'  -s --ssid [id]                   Set SSID'
272 321
     echo $'  -p --passphrase [text]           Set passphrase'
273 322
     echo $'     --hotspot [yes|no]            Create a hotspot'
323
+    echo $'     --networks [filename]         File containing wifi networks'
324
+    echo $'     --createnetworks [filename]   Create file containing wifi networks'
274 325
     echo ''
275 326
     exit 0
276 327
 }
@@ -307,6 +358,11 @@ do
307 358
             shift
308 359
             WIFI_NETWORKS_FILE=${1}
309 360
             ;;
361
+        --networksinteractive)
362
+            shift
363
+			NETWORKS_INTERACTIVE='yes'
364
+            WIFI_NETWORKS_FILE=${1}
365
+            ;;
310 366
         *)
311 367
             # unknown option
312 368
             ;;
@@ -314,42 +370,47 @@ do
314 370
     shift
315 371
 done
316 372
 
373
+if [ $NETWORKS_INTERACTIVE ]; then
374
+	create_networks_interactive
375
+	exit 0
376
+fi
377
+
317 378
 if [ -f $WIFI_NETWORKS_FILE ]; then
318
-    create_networks_from_file
319
-    exit 0
379
+	networks_from_file
380
+	exit 0
320 381
 fi
321 382
 
322 383
 if [ ! $WIFI_SSID ]; then
323
-    echo $'No SSID given'
324
-    exit 1
384
+	echo $'No SSID given'
385
+	exit 1
325 386
 fi
326 387
 
327 388
 if [[ $WIFI_HOTSPOT != 'no' ]]; then
328
-    hotspot_on
329
-    exit 0
389
+	hotspot_on
390
+	exit 0
330 391
 else
331
-    hotspot_off
392
+	hotspot_off
332 393
 fi
333 394
 
334 395
 if [[ $WIFI_TYPE != 'none' ]]; then
335
-    if [ ! $WIFI_PASSPHRASE ]; then
336
-        echo $'No wifi passphrase was given'
337
-        exit 2
338
-    fi
396
+	if [ ! $WIFI_PASSPHRASE ]; then
397
+		echo $'No wifi passphrase was given'
398
+		exit 2
399
+	fi
339 400
 fi
340 401
 
341 402
 if [[ $WIFI_TYPE == 'wpa2-psk' ]]; then
342
-    if [ ! -d /etc/wpa_supplicant ]; then
343
-        echo $'wpasupplicant package is not installed'
344
-        exit 3
345
-    fi
346
-    wifi_wpa2_psk "$WIFI_SSID" "$WIFI_PASSPHRASE"
347
-    exit 0
403
+	if [ ! -d /etc/wpa_supplicant ]; then
404
+		echo $'wpasupplicant package is not installed'
405
+		exit 3
406
+	fi
407
+	wifi_wpa2_psk "$WIFI_SSID" "$WIFI_PASSPHRASE"
408
+	exit 0
348 409
 fi
349 410
 
350 411
 if [[ $WIFI_TYPE == 'none' ]]; then
351
-    wifi_none "$WIFI_SSID"
352
-    exit 0
412
+	wifi_none "$WIFI_SSID"
413
+	exit 0
353 414
 fi
354 415
 
355 416
 exit 0