Files
2026-04-10 15:36:36 -07:00

101 lines
4.2 KiB
Bash
Executable File

#!/bin/sh
urldecode() {
echo -e "$(echo "$1" | sed "s/+/ /g; s/%\([0-9A-Fa-f][0-9A-Fa-f]\)/\\\\x\1/g")"
}
if [ "$REQUEST_METHOD" = "POST" ]; then
read -n "$CONTENT_LENGTH" POST_DATA 2>/dev/null
action=$(echo "$POST_DATA" | tr "&" "\n" | grep "^action=" | cut -d= -f2-)
new_ssid=$(echo "$POST_DATA" | tr "&" "\n" | grep "^ssid=" | cut -d= -f2-)
new_key=$(echo "$POST_DATA" | tr "&" "\n" | grep "^key=" | cut -d= -f2-)
new_ssid=$(urldecode "$new_ssid")
new_key=$(urldecode "$new_key")
case "$action" in
toggle)
disabled=$(uci get wireless.radio0.disabled 2>/dev/null || echo 0)
if [ "$disabled" = "1" ]; then
uci set wireless.radio0.disabled="0"
uci commit wireless
wifi up &
else
uci set wireless.radio0.disabled="1"
uci commit wireless
wifi down &
fi
;;
update)
[ -n "$new_ssid" ] && uci set wireless.default_radio0.ssid="$new_ssid"
[ -n "$new_key" ] && [ ${#new_key} -ge 8 ] && uci set wireless.default_radio0.key="$new_key"
uci commit wireless
wifi reload &
;;
esac
fi
disabled=$(uci get wireless.radio0.disabled 2>/dev/null || echo 0)
ssid=$(uci get wireless.default_radio0.ssid 2>/dev/null)
[ "$disabled" = "1" ] && wstatus="Disabled" && wcolor="#dc2626" && toggle_lbl="Enable WiFi" \
|| wstatus="Enabled" && wcolor="#16a34a" && toggle_lbl="Disable WiFi"
echo "Content-Type: text/html"
echo ""
cat << HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>WiFi Control</title>
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:#f1f5f9;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.card{background:#fff;border-radius:12px;box-shadow:0 4px 6px rgba(0,0,0,.1);padding:32px;width:100%;max-width:400px}
h1{font-size:1.3rem;color:#0f172a;margin-bottom:20px}
.status{display:flex;align-items:center;gap:10px;background:#f8fafc;border-radius:8px;padding:12px 16px;margin-bottom:20px}
.dot{width:10px;height:10px;border-radius:50%;background:${wcolor};flex-shrink:0}
.slabel{font-size:.8rem;color:#64748b}
.sval{font-weight:700;color:${wcolor}}
.ssid{font-size:.85rem;color:#475569;margin-top:2px}
.btn{width:100%;padding:11px;border:none;border-radius:8px;font-size:.9rem;font-weight:600;cursor:pointer}
.btn-toggle{background:#0f172a;color:#fff;margin-bottom:20px}
.btn-toggle:hover{background:#1e293b}
.divider{border:none;border-top:1px solid #e2e8f0;margin-bottom:20px}
label{display:block;font-size:.75rem;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.05em;margin-bottom:5px}
input{width:100%;padding:9px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:.9rem;margin-bottom:14px;outline:none}
input:focus{border-color:#0284c7;box-shadow:0 0 0 2px rgba(2,132,199,.15)}
.btn-save{background:#0284c7;color:#fff}
.btn-save:hover{background:#0369a1}
.note{font-size:.75rem;color:#94a3b8;margin-top:12px;text-align:center}
</style>
</head>
<body>
<div class="card">
<h1>WiFi Control</h1>
<div class="status">
<div class="dot"></div>
<div>
<div class="slabel">Status: <span class="sval">${wstatus}</span></div>
<div class="ssid">SSID: ${ssid}</div>
</div>
</div>
<form method="POST">
<input type="hidden" name="action" value="toggle">
<button class="btn btn-toggle">${toggle_lbl}</button>
</form>
<hr class="divider">
<form method="POST">
<input type="hidden" name="action" value="update">
<label>SSID</label>
<input type="text" name="ssid" value="${ssid}" placeholder="Network name">
<label>Password <span style="font-weight:400;text-transform:none">(min 8 chars — blank = no change)</span></label>
<input type="password" name="key" placeholder="••••••••">
<button class="btn btn-save">Save &amp; Apply</button>
</form>
<p class="note">Changes apply within ~5 seconds</p>
</div>
</body>
</html>
HTML