tazpanel annotate network.cgi @ rev 475

network.cgi: add ether-wake support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri May 01 23:56:00 2015 +0200 (2015-05-01)
parents c23efdafb18d
children a15936aa1275
rev   line source
pankso@38 1 #!/bin/sh
pankso@38 2 #
pankso@38 3 # Network configuration CGI interface
pankso@38 4 #
al@419 5 # Copyright (C) 2012-2015 SliTaz GNU/Linux - BSD License
pankso@112 6 #
pankso@38 7
al@419 8
pankso@38 9 # Common functions from libtazpanel
al@419 10
pankso@38 11 . lib/libtazpanel
pankso@38 12 get_config
pascal@81 13 header
pankso@38 14
al@443 15 TITLE=$(_ 'TazPanel - Network')
pankso@42 16
pankso@106 17
al@419 18 # Start a Wi-Fi connection
al@419 19
pankso@247 20 start_wifi() {
pankso@247 21 sed -i \
al@419 22 -e 's|^WIFI=.*|WIFI="yes"|' \
al@419 23 -e 's|^DHCP=.*|DHCP="yes"|' \
al@419 24 -e 's|^STATIC=.*|STATIC="no"|' /etc/network.conf
pankso@247 25 ifconfig $WIFI_INTERFACE up
pankso@247 26 iwconfig $WIFI_INTERFACE txpower auto
Christian@273 27 /etc/init.d/network.sh restart | log
al@463 28
al@463 29 # Sleep until connection established (max 5 seconds)
al@463 30 for i in $(seq 5); do
al@419 31 [ -n "$(iwconfig 2>/dev/null | fgrep Link)" ] && break
al@419 32 sleep 1
al@419 33 done
al@419 34 }
al@419 35
al@419 36
al@420 37 # Start an Ethernet connection
al@420 38
al@420 39 start_eth() {
al@420 40 case "$(GET staticip)" in
al@420 41 on) DHCP='no'; STATIC='yes';;
al@420 42 *) DHCP='yes'; STATIC='no';;
al@420 43 esac
al@420 44
al@420 45 /etc/init.d/network.sh stop | log
al@420 46 sleep 2
al@420 47 sed -i \
al@420 48 -e "s|^INTERFACE=.*|INTERFACE=\"$(GET iface)\"|" \
al@420 49 -e 's|^WIFI=.*|WIFI="no"|' \
al@420 50 -e "s|^DHCP=.*|DHCP=\"$DHCP\"|" \
al@420 51 -e "s|^STATIC=.*|STATIC=\"$STATIC\"|" \
al@420 52 -e "s|^IP=.*|IP=\"$(GET ip)\"|" \
al@420 53 -e "s|^NETMASK=.*|NETMASK=\"$(GET netmask)\"|" \
al@420 54 -e "s|^GATEWAY=.*|GATEWAY=\"$(GET gateway)\"|" \
al@420 55 -e "s|^DNS_SERVER=.*|DNS_SERVER=\"$(GET dns)\"|" \
al@420 56 /etc/network.conf
al@420 57 /etc/init.d/network.sh start | log
al@420 58 . /etc/network.conf
al@420 59 }
al@420 60
al@420 61
al@419 62 # Use /etc/wpa/wpa.conf as single database for known networks, passwords, etc.
al@419 63 # Translate this data to use in javascript.
al@419 64
al@419 65 parse_wpa_conf() {
al@419 66 awk '
al@419 67 BEGIN { print "networks = ["; begin_list = 1; network = 0; }
al@419 68 {
al@419 69 if ($0 == "network={") {
al@419 70 if (begin_list == 0) print ",";
al@419 71 begin_list = 0;
al@419 72 printf "{"; begin_obj = 1;
al@419 73 network = 1; next;
al@419 74 }
al@419 75 if (network == 1) {
al@419 76 if ($0 ~ "=") {
al@419 77 if (begin_obj == 0) printf ", ";
al@419 78 begin_obj = 0;
al@463 79
al@463 80 # split line into variable and value (note "=" can appear in the value)
al@463 81 split($0, a, "="); variable = a[1];
al@463 82 value = gensub(variable "=", "", "");
al@463 83
al@463 84 # escape html entities
al@463 85 value = gensub("\\\\", "\\\\", "g", value);
al@463 86 value = gensub("&", "\\&amp;", "g", value);
al@463 87 value = gensub("<", "\\&lt;", "g", value);
al@463 88 value = gensub(">", "\\&gt;", "g", value);
al@463 89 value = gensub("\"", "\\\"", "g", value);
al@463 90
al@463 91 # if value was already quoted - remove \" from begin and end
al@463 92 if (substr(value, 1, 2) == "\\\"")
al@463 93 value = substr(value, 3, length(value) - 4);
al@463 94
al@463 95 # output in form: variable:"escaped value"
al@463 96 printf "%s:\"%s\"", variable, value;
al@419 97 }
al@419 98 }
al@419 99 if (network == 1 && $0 ~ "}") { printf "}"; network = 0; next; }
al@419 100 }
al@419 101 END {print "\n];"}
al@419 102 ' /etc/wpa/wpa.conf | sed 's|\t||g;'
al@419 103 }
al@419 104
al@419 105
al@419 106 # Waiting for network link up
al@419 107
al@419 108 wait_up() {
al@463 109 for i in $(seq 5); do
al@419 110 [ -z "$(cat /sys/class/net/*/operstate | fgrep up)"] && sleep 1
al@419 111 done
pankso@247 112 }
pankso@247 113
al@463 114
pankso@41 115 # Actions commands before page is displayed
al@419 116
pascal@81 117 case " $(GET) " in
pascal@81 118 *\ start\ *)
al@419 119 /etc/init.d/network.sh start | log
pankso@41 120 # Here we sleep a bit to let udhcp get the lease before reloading
paul@205 121 # the page with status
al@419 122 wait_up ;;
pascal@81 123 *\ stop\ *)
pankso@76 124 /etc/init.d/network.sh stop | log ;;
naitsirhc@269 125 *\ restart\ *)
al@419 126 /etc/init.d/network.sh restart | log
al@419 127 wait_up ;;
al@420 128 *\ start_wifi\ *)
al@419 129 start_wifi ;;
al@420 130 *\ start_eth\ *)
al@420 131 start_eth ;;
pascal@475 132 *\ dowakeup\ *)
pascal@475 133 mac="$(GET macwakup)"
pascal@475 134 unset pass
pascal@475 135 [ "$(GET pass)" ] && pass="-p $(GET pass)"
pascal@475 136 if [ "$mac" ]; then
pascal@475 137 ether-wake $(GET iface) $mac $pass
pascal@475 138 else
pascal@475 139 ether-wake -b $(GET iface) $pass
pascal@475 140 fi
pascal@475 141 ;;
al@419 142 *\ host\ *)
al@419 143 get_hostname="$(GET host)"
al@443 144 echo $(_ 'Changed hostname: %s' $get_hostname) | log
al@303 145 echo "$get_hostname" > /etc/hostname ;;
pankso@41 146 esac
pankso@41 147
al@463 148 case " $(POST) " in
al@463 149 *\ connect_wifi\ *)
al@463 150 # Connect to a Wi-Fi network
al@463 151 /etc/init.d/network.sh stop | log
al@463 152 password="$(POST password)"
al@463 153
al@463 154 # Escape special characters to use with sed substitutions
al@463 155 password="$(echo -n "$password" | sed 's|\\|\\\\|g; s|&|\\\&|g' | sed "s|'|'\"'\"'|g")"
al@463 156
al@463 157 sed -i \
al@463 158 -e "s|^WIFI_ESSID=.*|WIFI_ESSID=\"$(POST essid)\"|" \
al@463 159 -e "s|^WIFI_BSSID=.*|WIFI_BSSID=\"$(POST bssid)\"|" \
al@463 160 -e "s|^WIFI_KEY_TYPE=.*|WIFI_KEY_TYPE=\"$(POST keyType)\"|" \
al@463 161 -e "s|^WIFI_KEY=.*|WIFI_KEY='$password'|" \
al@463 162 -e "s|^WIFI_EAP_METHOD=.*|WIFI_EAP_METHOD=\"$(POST eap)\"|" \
al@463 163 -e "s|^WIFI_CA_CERT=.*|WIFI_CA_CERT=\"$(POST caCert)\"|" \
al@463 164 -e "s|^WIFI_CLIENT_CERT=.*|WIFI_CLIENT_CERT=\"$(POST clientCert)\"|" \
al@463 165 -e "s|^WIFI_IDENTITY=.*|WIFI_IDENTITY=\"$(POST identity)\"|" \
al@463 166 -e "s|^WIFI_ANONYMOUS_IDENTITY=.*|WIFI_ANONYMOUS_IDENTITY=\"$(POST anonymousIdentity)\"|" \
al@463 167 -e "s|^WIFI_PHASE2=.*|WIFI_PHASE2=\"$(POST phase2)\"|" \
al@463 168 /etc/network.conf
al@463 169 . /etc/network.conf
al@463 170 start_wifi
al@463 171 ;;
al@463 172 esac
al@463 173
al@419 174
paul@127 175 # Get values only now since they could have been modified by actions.
al@419 176
pankso@108 177 . /etc/network.conf
pankso@108 178
al@419 179
al@419 180
al@419 181
al@419 182
pankso@38 183 #
pankso@41 184 # Main Commands for pages
pankso@38 185 #
pankso@38 186
pascal@81 187 case " $(GET) " in
al@419 188
pascal@136 189 *\ scan\ *)
pascal@136 190 # Scan open ports
al@419 191 scan=$(GET scan); back=$(GET back)
pascal@136 192 xhtml_header
al@443 193 LOADING_MSG=$(_ 'Scanning open ports...'); loading_msg
al@303 194
al@419 195 cat <<EOT
al@419 196 <section>
al@419 197 <header>
al@443 198 $(_ 'Port scanning for %s' $scan)
al@443 199 $(back_button "$back" "$(_ 'Network')" "")
al@419 200 </header>
al@419 201 <pre>$(pscan -b $scan)</pre>
al@419 202 </section>
pascal@136 203 EOT
pascal@136 204 ;;
al@303 205
al@419 206
pascal@81 207 *\ eth\ *)
pankso@41 208 # Wired connections settings
pankso@38 209 xhtml_header
al@419 210
al@420 211 PAR1="size=\"20\" required"; PAR="$PAR1 pattern=\"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\""
al@420 212
al@420 213 case "$STATIC" in
al@420 214 yes) use_static='checked';;
al@420 215 *) use_static='';;
al@420 216 esac
al@420 217
al@420 218 stop_disabled=''; start_disabled=''
al@420 219 if cat /sys/class/net/eth*/operstate | fgrep -q up; then
al@420 220 start_disabled='disabled'
al@420 221 else
al@420 222 stop_disabled='disabled'
pankso@107 223 fi
al@419 224
al@419 225 cat <<EOT
al@443 226 <h2>$(_ 'Ethernet connection')</h2>
pascal@435 227 EOT
pascal@435 228 [ -w /etc/network.conf ] && cat <<EOT
al@443 229 <p>$(_ "Here you can configure a wired connection using DHCP to \
al@303 230 automatically get a random IP or configure a static/fixed IP")</p>
al@303 231
al@312 232 <section>
al@443 233 <header>$(_ 'Configuration')</header>
al@419 234 <form id="conf">
al@419 235 <input type="hidden" name="eth"/>
al@419 236 <div>
al@419 237 <table>
al@443 238 <tr><td>$(_ 'Interface')</td>
al@420 239 <td><select name="iface" value="$INTERFACE" style="width:100%">
al@419 240 $(cd /sys/class/net; ls -1 | awk -viface="$INTERFACE" '{
al@419 241 sel = ($0 == iface) ? " selected":""
al@419 242 printf "<option value=\"%s\"%s>%s", $0, sel, $0
al@419 243 }')
al@419 244 </select></td>
al@419 245 </tr>
al@443 246 <tr><td>$(_ 'Static IP')</td>
al@420 247 <td><label><input type="checkbox" name="staticip" id="staticip" $use_static/>
al@443 248 $(_ 'Use static IP')</td>
al@419 249 </tr>
al@443 250 <tr id="st1"><td>$(_ 'IP address')</td>
al@420 251 <td><input type="text" name="ip" value="$IP" $PAR/></td>
al@419 252 </tr>
al@443 253 <tr id="st2"><td>$(_ 'Netmask')</td>
al@420 254 <td><input type="text" name="netmask" value="$NETMASK" $PAR/></td>
al@419 255 </tr>
al@443 256 <tr id="st3"><td>$(_ 'Gateway')</td>
al@420 257 <td><input type="text" name="gateway" value="$GATEWAY" $PAR/></td>
al@420 258 </tr>
al@443 259 <tr id="st4"><td>$(_ 'DNS server')</td>
al@420 260 <td><input type="text" name="dns" value="$DNS_SERVER" $PAR/></td>
al@419 261 </tr>
pascal@475 262 <tr><td>$(_ 'Wake up')</td>
pascal@475 263 <td><label><input type="checkbox" name="wakeup" id="wakeup" />
pascal@475 264 $(_ 'Wake up machines by network')</td>
pascal@475 265 </tr>
pascal@475 266 <tr id="wk1"><td>$(_ 'MAC address to wake up')</td>
pascal@475 267 <td><input type="text" name="macwakup" title="$(_ 'Leave empty for a general wakeup')" $PAR/><!--
pascal@475 268 <button name="ethers" value="/etc/ethers" data-icon="view">$(_ 'View')</button -->
pascal@475 269 </td>
pascal@475 270 </tr>
al@419 271 </table>
al@419 272 </div>
al@419 273 </form>
al@419 274 <footer><!--
al@443 275 --><button form="conf" type="submit" name="start_eth" data-icon="start" $start_disabled>$(_ 'Start' )</button><!--
al@443 276 --><button form="conf" type="submit" name="stop" data-icon="stop" $stop_disabled >$(_ 'Stop' )</button><!--
pascal@475 277 --><button form="conf" type="submit" name="dowakeup" data-icon="clock" $stop_disabled >$(_ 'Wake up')</button><!--
al@419 278 --></footer>
al@419 279 </section>
al@419 280
al@419 281 <script type="text/javascript">
pascal@475 282 function check_change() {
pascal@475 283 enabled = document.getElementById('staticip').checked;
al@420 284 for (i = 1; i < 5; i++) {
pascal@475 285 document.getElementById('st' + i).style.display = enabled ? '' : 'none';
pascal@475 286 }
pascal@475 287 enabled = document.getElementById('wakeup').checked;
pascal@475 288 for (i = 1; i < 2; i++) {
pascal@475 289 document.getElementById('wk' + i).style.display = enabled ? '' : 'none';
al@420 290 }
al@420 291 }
al@419 292
pascal@475 293 document.getElementById('staticip').onchange = check_change;
pascal@475 294 document.getElementById('wakeup').onchange = check_change;
pascal@475 295 check_change();
al@419 296 </script>
pascal@435 297 EOT
pascal@435 298 cat <<EOT
al@419 299 <section>
al@419 300 <header>
al@443 301 $(_ 'Configuration file')
pascal@435 302 EOT
pascal@435 303 [ -w /etc/network.conf ] && cat <<EOT
al@419 304 <form action="index.cgi">
al@419 305 <input type="hidden" name="file" value="/etc/network.conf"/>
al@443 306 <button name="action" value="edit" data-icon="edit">$(_ 'Edit')</button>
al@419 307 </form>
pascal@435 308 EOT
pascal@435 309 cat <<EOT
al@419 310 </header>
al@443 311 <div>$(_ "These values are the ethernet settings in the main /etc/network.conf configuration file")</div>
al@419 312 <pre>$(awk '{if($1 !~ "WIFI" && $1 !~ "#" && $1 != ""){print $0}}' /etc/network.conf | syntax_highlighter conf)</pre>
al@419 313 </section>
al@419 314 EOT
al@419 315 ;;
al@419 316
al@419 317
al@419 318
al@419 319 *\ wifi_list\ *)
al@419 320 # Catch ESSIDs and format output.
al@419 321 # We get the list of networks by Cell and without spaces.
al@419 322
al@443 323 HIDDEN="$(_ '(hidden)')"
al@419 324
al@419 325 cat <<EOT
al@419 326 <table class="wide center zebra">
pankso@107 327 <thead>
pankso@107 328 <tr>
al@443 329 <td>$(_ 'Name')</td>
al@443 330 <td>$(_ 'Signal level')</td>
al@443 331 <td>$(_ 'Channel')</td>
al@443 332 <td>$(_ 'Encryption')</td>
al@443 333 <td>$(_ 'Status')</td>
pankso@107 334 </tr>
pankso@107 335 </thead>
al@303 336 <tbody>
al@419 337 EOT
al@419 338 if [ -d /sys/class/net/$WIFI_INTERFACE/wireless ]; then
al@419 339 ifconfig $WIFI_INTERFACE up
al@419 340 for i in $(iwlist $WIFI_INTERFACE scan | sed '/Cell /!d;s/.*Cell \([^ ]*\).*/Cell.\1/')
al@419 341 do
al@419 342 SCAN=$(iwlist $WIFI_INTERFACE scan last | sed "/$i/,/Cell/!d" | sed '$d')
al@419 343
al@419 344 BSSID=$(echo "$SCAN" | sed -n 's|.*Address: \([^ ]*\).*|\1|p')
al@419 345
al@419 346 CHANNEL=$(echo "$SCAN" | sed -n 's|.*Channel[:=]\([^ ]*\).*|\1|p')
al@419 347
al@419 348 QUALITY=$(echo "$SCAN" | sed -n 's|.*Quality[:=]\([^ ]*\).*|\1|p')
al@419 349 QUALITY_ICON="lvl$(( 5*${QUALITY:-0} ))" # lvl0 .. lvl4, lvl5
al@419 350 LEVEL=$(echo "$SCAN" | sed -n 's|.*Signal level[:=]\([^ ]*\).*|\1|p; s|-|−|')
al@419 351
al@419 352 ENCRYPTION=$(echo "$SCAN" | sed -n 's|.*Encryption key[:=]\([^ ]*\).*|\1|p') # on/off
al@419 353
al@419 354 ESSID=$(echo "$SCAN" | sed -n 's|.*ESSID:"\([^"]*\).*|\1|p')
al@419 355
al@419 356 # WPA Type - Group Cipher - Pairwise Ciphers - Authentication Suites
al@419 357 # {WPA|WPA2}-{TKIP|CCMP}-{TKIP|CCMP|TKIP CCMP}-{PSK|802.1x}
al@419 358 #CAPABILITIES="$(echo "$SCAN" | grep -e 'IE: .*WPA*' -A3 | cut -d: -f2 | sed -e 's|^ ||' -e '/WPA2/s|.*|=WPA2|' -e '/WPA /s|.*|=WPA|' -e '/--/d' | tr '\n' '-' | tr '=' '\n' | sed -e '/^$/d' -e 's|-$||')"
al@419 359
al@419 360 # Authentication type
al@419 361 AUTH="$(echo "$SCAN" | sed -n 's|.*Authentication Suites[^:]*: *\(.*\)|\1|p')"
al@419 362 if [ -n "$(echo -n $AUTH | fgrep PSK)" ]; then
al@419 363 # WPA-Personal. Authentication using password (PSK = pre-shared key)
al@419 364 WIFI_KEY_TYPE='WPA'
al@419 365 elif [ -n "$(echo -n $AUTH | fgrep 802.1x)" ]; then
al@419 366 # WPA-Enterprise. Authentication using username, password, certificates...
al@419 367 WIFI_KEY_TYPE='EAP'
al@419 368 else
al@419 369 WIFI_KEY_TYPE='NONE'
al@419 370 fi
al@419 371
al@419 372 # Check encryption type
al@419 373 if [ "$ENCRYPTION" == 'on' ]; then
al@419 374 # "WPA" or "WPA2" or "WPA/WPA2" (maybe also "WPA2/WPA")
al@419 375 ENC_SIMPLE=$(echo "$SCAN" | sed -n '/.*WPA.*/ s|.*\(WPA[^ ]*\).*|\1|p')
al@419 376 ENC_SIMPLE=$(echo $ENC_SIMPLE | sed 's| |/|')
al@419 377 ENC_ICON='sechi' # high
al@419 378 if [ -z "$ENC_SIMPLE" ]; then
al@419 379 WIFI_KEY_TYPE='WEP'
al@419 380 ENC_SIMPLE='WEP'; ENC_ICON='secmi' # middle
al@419 381 fi
al@419 382 else
al@419 383 WIFI_KEY_TYPE='NONE'
al@443 384 ENC_SIMPLE="$(_ 'None')"; ENC_ICON='seclo' # low
al@419 385 fi
al@419 386
al@419 387 # Connected or not connected...
al@419 388 if ifconfig $WIFI_INTERFACE | fgrep -q inet && \
al@419 389 iwconfig $WIFI_INTERFACE | fgrep -q "ESSID:\"$ESSID\""; then
al@443 390 status="$(_ 'Connected')"
al@419 391 else
al@419 392 status='---'
al@419 393 fi
al@419 394
al@419 395 cat <<EOT
al@419 396 <tr>
al@419 397 <td><a data-icon="wifi" onclick="loadcfg('$ESSID', '$BSSID', '$WIFI_KEY_TYPE')">${ESSID:-$HIDDEN}</a></td>
al@419 398 <td><span data-icon="$QUALITY_ICON" title="Quality: $QUALITY"> $LEVEL dBm</span></td>
al@419 399 <td>$CHANNEL</td>
al@419 400 <td><span data-icon="$ENC_ICON">$ENC_SIMPLE</span></td>
al@419 401 <td>$status</td>
al@419 402 </tr>
al@419 403 EOT
al@419 404 done
al@419 405 fi
al@419 406 cat <<EOT
al@303 407 </tbody>
al@419 408 </table>
al@419 409 EOT
al@419 410 exit 0
al@419 411 ;;
al@419 412
al@419 413
al@419 414 *\ wifi\ *)
al@419 415 # Wireless connections settings
al@419 416 xhtml_header
al@419 417
al@419 418 . /etc/network.conf
al@419 419 cat <<EOT
al@443 420 <h2>$(_ 'Wireless connection')</h2>
al@419 421 EOT
al@419 422
al@419 423 start_disabled=''; stop_disabled=''
al@419 424 if iwconfig 2>/dev/null | grep -q 'Tx-Power=off'; then
al@419 425 stop_disabled='disabled'
al@419 426 else
al@419 427 start_disabled='disabled'
al@419 428 fi
al@419 429
pascal@435 430 [ -w /etc/network.conf ] && cat <<EOT
pascal@435 431 <form>
pascal@435 432 <input type="hidden" name="wifi"/>
al@443 433 <button name="start_wifi" data-icon="start" $start_disabled>$(_ 'Start')</button><!--
al@443 434 --><button name="stop" data-icon="stop" $stop_disabled >$(_ 'Stop' )</button><!--
al@443 435 --><button type="submit" data-icon="refresh" $stop_disabled >$(_ 'Scan' )</button>
pankso@107 436 </form>
al@419 437 EOT
al@419 438
pascal@435 439 [ -w /etc/network.conf ] &&
al@419 440 if [ -n "$start_disabled" ]; then
al@419 441 cat <<EOT
al@419 442 <section id="wifiList">
al@443 443 <div style="text-align: center;"><span id="ajaxStatus"></span>$(_ 'Scanning wireless interface...')</div>
al@312 444 </section>
pankso@107 445
al@419 446 <script type="text/javascript">
pascal@441 447 ajax('network.cgi?wifi_list', '1', 'wifiList');
al@419 448 $(parse_wpa_conf)
al@419 449 </script>
al@419 450 EOT
al@419 451
al@463 452 # Escape html characters in the WIFI_KEY
al@463 453 WIFI_KEY_ESCAPED="$(echo -n "$WIFI_KEY" | sed 's|&|\&amp;|g; s|<|\&lt;|g; s|>|\&gt;|g; s|"|\&quot;|g')"
al@419 454
al@419 455 cat <<EOT
al@312 456 <section>
al@443 457 <header>$(_ 'Connection')</header>
al@419 458 <div>
al@463 459 <form method="post" action="?wifi" id="connection">
al@420 460 <input type="hidden" name="connect_wifi"/>
al@420 461 <input type="hidden" name="bssid" id="bssid"/>
al@419 462 <table>
al@443 463 <tr><td>$(_ 'Network SSID')</td>
al@419 464 <td><input type="text" name="essid" value="$WIFI_ESSID" id="essid"/></td>
al@419 465 </tr>
al@303 466
al@443 467 <tr><td>$(_ 'Security')</td>
al@419 468 <td><select name="keyType" id="keyType">
al@443 469 <option value="NONE">$(_ 'None')</option>
al@419 470 <option value="WEP" >WEP</option>
al@419 471 <option value="WPA" >WPA/WPA2 PSK</option>
al@419 472 <option value="EAP" >802.1x EAP</option>
al@419 473 </select>
al@419 474 </td>
al@419 475 </tr>
al@419 476
al@419 477 <tr class="eap">
al@443 478 <td><div>$(_ 'EAP method')</div></td>
al@419 479 <td><div><select name="eap" id="eap">
al@419 480 <option value="PEAP">PEAP</option>
al@419 481 <option value="TLS" >TLS</option>
al@419 482 <option value="TTLS">TTLS</option>
al@419 483 <option value="PWD" >PWD</option>
al@419 484 </select>
al@419 485 </div></td>
al@419 486 </tr>
al@419 487
al@419 488 <tr class="eap1">
al@443 489 <td><div>$(_ 'Phase 2 authentication')</div></td>
al@419 490 <td><div><select name="phase2" id="phase2">
al@443 491 <option value="none" >$(_ 'None')</option>
al@419 492 <option value="pap" >PAP</option>
al@419 493 <option value="mschap" >MSCHAP</option>
al@419 494 <option value="mschapv2">MSCHAPV2</option>
al@419 495 <option value="gtc" >GTC</option>
al@419 496 </select>
al@419 497 </div></td>
al@419 498 </tr>
al@419 499
al@419 500 <tr class="eap1">
al@443 501 <td><div>$(_ 'CA certificate')</div></td>
al@419 502 <td><div><input type="text" name="caCert" id="caCert"></div></td>
al@419 503 </tr>
al@419 504
al@419 505 <tr class="eap1">
al@443 506 <td><div>$(_ 'User certificate')</div></td>
al@419 507 <td><div><input type="text" name="clientCert" id="clientCert"></div></td>
al@419 508 </tr>
al@419 509
al@419 510 <tr class="eap">
al@443 511 <td><div>$(_ 'Identity')</div></td>
al@419 512 <td><div><input type="text" name="identity" id="identity"></div></td>
al@419 513 </tr>
al@419 514
al@419 515 <tr class="eap1">
al@443 516 <td><div>$(_ 'Anonymous identity')</div></td>
al@419 517 <td><div><input type="text" name="anonymousIdentity" id="anonymousIdentity"></div></td>
al@419 518 </tr>
al@419 519
al@419 520 <tr class="wep wpa eap">
al@443 521 <td><div>$(_ 'Password')</div></td>
al@419 522 <td><div>
al@463 523 <input type="password" name="password" value="$WIFI_KEY_ESCAPED" id="password"/>
al@443 524 <span data-img="view" title="$(_ 'Show password')"
al@419 525 onmousedown="document.getElementById('password').type='text'; return false"
al@419 526 onmouseup="document.getElementById('password').type='password'"
al@419 527 onmouseout="document.getElementById('password').type='password'"
al@419 528 ></span>
al@419 529 </div></td>
al@419 530 </tr>
al@419 531
al@419 532 <script type="text/javascript">
al@419 533 function wifiSettingsChange() {
al@419 534 document.getElementById('connection').className =
al@419 535 document.getElementById('keyType').value.toLowerCase() + ' ' +
al@419 536 document.getElementById('eap').value.toLowerCase();
al@419 537 }
al@419 538 document.getElementById('keyType').onchange = wifiSettingsChange;
al@419 539 document.getElementById('eap').onchange = wifiSettingsChange;
al@419 540
al@419 541 document.getElementById('keyType').value = "$WIFI_KEY_TYPE"; wifiSettingsChange();
al@419 542 </script>
al@419 543
al@419 544 <style type="text/css">
al@419 545 #connection input[type="text"], #connection input[type="password"] { width: 14rem; }
al@419 546 #connection select { width: 14.4rem; }
al@419 547
al@419 548 #connection td { padding: 0; margin: 0; }
al@419 549 #connection [class] div {
al@419 550 max-height: 0; overflow: hidden; padding: 0; margin: 0;
al@419 551 -webkit-transition: all 0.5s ease-in-out;
al@419 552 -moz-transition: all 0.5s ease-in-out;
al@419 553 transition: all 0.5s ease-in-out;
al@419 554 }
al@419 555 .wep .wep div, .wpa .wpa div, .eap .eap div,
al@419 556 .eap.peap .eap1 div, .eap.tls .eap1 div, .eap.ttls .eap1 div {
al@419 557 max-height: 2em !important;
al@419 558 }
al@419 559 </style>
al@419 560
al@419 561 </table>
al@419 562 </form>
al@419 563 </div>
al@419 564 <footer>
al@443 565 <button form="connection" type="submit" name="wifi" data-icon="ok">$(_ 'Configure')</button>
al@419 566 </footer>
al@419 567 </section>
al@419 568 EOT
al@419 569 fi
al@419 570
al@419 571 cat <<EOT
al@419 572 <section>
al@419 573 <header>
al@443 574 $(_ 'Configuration file')
pascal@435 575 EOT
pascal@435 576 [ -w /etc/network.conf ] && cat <<EOT
al@419 577 <form action="index.cgi">
al@419 578 <input type="hidden" name="file" value="/etc/network.conf"/>
al@443 579 <button name="action" value="edit" data-icon="edit">$(_ 'Edit')</button>
al@419 580 </form>
pascal@435 581 EOT
pascal@435 582 cat <<EOT
al@419 583 </header>
al@443 584 <div>$(_ "These values are the wifi settings in the main /etc/network.conf configuration file")</div>
al@463 585 <pre>$(grep ^WIFI /etc/network.conf | sed 's|WIFI_KEY=.*|WIFI_KEY="********"|' | syntax_highlighter conf)</pre>
al@419 586 </section>
al@419 587
al@419 588
al@419 589 <section>
al@443 590 <header>$(_ 'Output of iwconfig')</header>
al@419 591 <pre>$(iwconfig)</pre>
al@312 592 </section>
pankso@41 593 EOT
pankso@41 594 ;;
pankso@238 595
al@303 596
pankso@41 597 *)
pankso@41 598 # Main Network page starting with a summary
pankso@41 599 xhtml_header
al@419 600
al@419 601 stop_disabled=''; start_disabled=''
al@419 602 if cat /sys/class/net/*/operstate | fgrep -q up; then
al@419 603 start_disabled='disabled'
al@419 604 else
al@419 605 stop_disabled='disabled'
al@419 606 fi
al@419 607
al@439 608 if [ ! -w /etc/network.conf ]; then
al@439 609 start_disabled='disabled'; stop_disabled='disabled'
al@439 610 fi
al@439 611
al@419 612 cat <<EOT
al@443 613 <h2>$(_ 'Networking')</h2>
al@303 614
al@443 615 <p>$(_ 'Manage network connections and services')</p>
al@303 616
al@419 617 <form action="index.cgi" id="indexform"></form>
al@439 618
al@419 619 <form id="mainform"><!--
al@443 620 --><button name="start" data-icon="start" $start_disabled>$(_ 'Start' )</button><!--
al@443 621 --><button name="stop" data-icon="stop" $stop_disabled >$(_ 'Stop' )</button><!--
al@443 622 --><button name="restart" data-icon="restart" $stop_disabled >$(_ 'Restart')</button>
al@419 623 </form>
al@439 624
al@419 625 <div class="float-right"><!--
al@443 626 -->$(_ 'Configuration:')<!--
al@419 627 --><button form="indexform" name="file" value="/etc/network.conf" data-icon="conf">network.conf</button><!--
al@419 628 --><button form="mainform" name="eth" data-icon="eth">Ethernet</button><!--
al@419 629 --><button form="mainform" name="wifi" data-icon="wifi">Wireless</button>
pankso@38 630 </div>
pankso@38 631
al@419 632
al@419 633 <section>
al@443 634 <header>$(_ 'Network interfaces')</header>
al@419 635 $(list_network_interfaces)
al@312 636 </section>
pankso@38 637
al@419 638
al@312 639 <section>
al@443 640 <header id="hosts">$(_ 'Hosts')</header>
al@419 641 <pre>$(cat /etc/hosts)</pre>
pascal@435 642 EOT
pascal@435 643 [ -w /etc/hosts ] && cat <<EOT
al@419 644 <footer>
al@419 645 <form action="index.cgi">
al@419 646 <input type="hidden" name="file" value="/etc/hosts"/>
al@443 647 <button name="action" value="edit" data-icon="edit">$(_ 'Edit')</button>
al@419 648 </form>
al@419 649 </footer>
pascal@435 650 EOT
pascal@435 651 cat <<EOT
al@312 652 </section>
pankso@108 653
al@419 654
al@312 655 <section>
al@443 656 <header>$(_ 'Hostname')</header>
al@419 657 <footer>
pascal@435 658 EOT
pascal@435 659 if [ -w /etc/hostname ]; then
pascal@435 660 cat <<EOT
al@419 661 <form>
al@419 662 <!-- was: name="hostname"; please don't use 'name' in name: unwanted webkit styling -->
al@419 663 <input type="text" name="host" value="$(cat /etc/hostname)"/><!--
al@443 664 --><button type="submit" data-icon="ok">$(_ 'Change')</button>
al@419 665 </form>
pascal@435 666 EOT
pascal@435 667 else
pascal@435 668 cat /etc/hostname
pascal@435 669 fi
pascal@435 670 cat <<EOT
al@419 671 </footer>
al@312 672 </section>
pankso@108 673
al@419 674
al@312 675 <section>
al@443 676 <header id="ifconfig">$(_ 'Output of ifconfig')</header>
al@419 677 <pre>$(ifconfig)</pre>
al@312 678 </section>
pascal@68 679
al@419 680
al@312 681 <section>
al@443 682 <header id="routing">$(_ 'Routing table')</header>
al@419 683 <pre>$(route -n)</pre>
al@312 684 </section>
pascal@131 685
al@419 686
al@312 687 <section>
al@443 688 <header id="dns">$(_ 'Domain name resolution')</header>
al@419 689 <pre>$(cat /etc/resolv.conf)</pre>
al@312 690 </section>
al@303 691
al@419 692
al@312 693 <section>
al@443 694 <header id="arp">$(_ 'ARP table')</header>
al@419 695 <pre>$(arp)</pre>
al@312 696 </section>
al@303 697
al@419 698
al@312 699 <section>
al@443 700 <header id="connections">$(_ 'IP Connections')</header>
al@419 701 <pre>$(netstat -anp 2>/dev/null | sed -e '/UNIX domain sockets/,$d' \
al@419 702 -e 's#\([0-9]*\)/#<a href="boot.cgi?daemons=pid=\1">\1</a>/#')</pre>
al@312 703 </section>
pankso@38 704 EOT
pankso@38 705 ;;
pankso@38 706 esac
pankso@38 707
pankso@38 708 xhtml_footer
pankso@38 709 exit 0