-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathudm_wlan_fw_control_ha_os.sh
129 lines (113 loc) · 3.62 KB
/
udm_wlan_fw_control_ha_os.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/bin/bash
unifi_username=$2
unifi_password=$3
unifi_controller=$4
id=$5
cookie=$(mktemp)
headers=$(mktemp)
curl_cmd="curl -s -S --cookie ${cookie} --cookie-jar ${cookie} --insecure "
unifi_login() {
# authenticate against unifi controller
# Mute response by adding > /dev/null
${curl_cmd} -H "Content-Type: application/json" -D ${headers} -d "{\"password\":\"$unifi_password\",\"username\":\"$unifi_username\"}" $unifi_controller/api/auth/login > /dev/null
# UDM/P ?v1.11.0 - header returns 'x-csrf-token', which requires a case-insensitive awk
csrf="$(awk -v IGNORECASE=1 -v FS=': ' '/^X-CSRF-Token/' "${headers}" | tr -d '\r')"
}
unifi_logout() {
# logout
${curl_cmd} $unifi_controller/logout > /dev/null
}
enable_wifi() {
# enables guest wifi network
# Mute response by adding > /dev/null
${curl_cmd} "$unifi_controller"'/proxy/network/api/s/default/rest/wlanconf/'"$id" -X PUT -d '{"_id":"'"$id"'","enabled":true}' -H "${csrf}" --compressed > /dev/null
}
disable_wifi() {
# disables guest wifi network
# Mute response by adding > /dev/null
${curl_cmd} "$unifi_controller"'/proxy/network/api/s/default/rest/wlanconf/'"$id" -X PUT -d '{"_id":"'"$id"'","enabled":false}' -H "${csrf}" --compressed > /dev/null
}
check_status_wifi() {
# checks wifi network status
# Mute response by adding > /dev/null
response=$(${curl_cmd} "$unifi_controller"'/proxy/network/api/s/default/rest/wlanconf/'"$id" -H "${csrf}" --compressed) > /dev/null
status=$(echo $response | jq ".data[0].enabled")
if [ "$status" == "true" ]; then
echo ENABLED
unifi_logout
exit 0
elif [ "$status" == "false" ]; then
echo DISABLED
unifi_logout
exit 1
else
exit -1
fi
}
enable_fwrule() {
# enables a firewall rule
# Mute response by adding > /dev/null
${curl_cmd} "$unifi_controller"'/proxy/network/api/s/default/rest/firewallrule/'"$id" -X PUT -d '{"_id":"'"$id"'","enabled":true}' -H "${csrf}" --compressed > /dev/null
}
disable_fwrule() {
# disables a firewall rule
# Mute response by adding > /dev/null
${curl_cmd} "$unifi_controller"'/proxy/network/api/s/default/rest/firewallrule/'"$id" -X PUT -d '{"_id":"'"$id"'","enabled":false}' -H "${csrf}" --compressed > /dev/null
}
check_status_fwrule() {
# checks firewall rule status
# Mute response by adding > /dev/null
response=$(${curl_cmd} "$unifi_controller"'/proxy/network/api/s/default/rest/firewallrule/'"$id" -H "${csrf}" --compressed) > /dev/null
status=$(echo $response | jq ".data[0].enabled")
if [ "$status" == "true" ]; then
echo ENABLED
unifi_logout
exit 0
elif [ "$status" == "false" ]; then
echo DISABLED
unifi_logout
exit 1
else
exit -1
fi
}
if [[ $# < 6 ]]; then
echo "Must include command line parameters [wifi or fwrule] [username] [password] [UDM address eg https://10.0.0.1] [WIFI_ID or FWRULE_ID] [enable|disable|status]."
exit -1
fi
unifi_login
case $1 in
wifi)
case $6 in
"enable")
echo "Enabling WiFi"
enable_wifi ;;
"disable")
echo "Disabling WiFi"
disable_wifi ;;
"status")
echo "Checking WiFi status"
check_status_wifi ;;
*)
echo $1 "; last parameter must be enable, disable or status"
unifi_logout
exit -1 ;;
esac ;;
fwrule)
case $6 in
"enable")
echo "Enabling firewall rule"
enable_fwrule ;;
"disable")
echo "Disabling firewall rule"
disable_fwrule ;;
"status")
echo "Checking firewall rule status"
check_status_fwrule ;;
*)
echo $1 "; last parameter must be enable, disable or status"
unifi_logout
exit -1 ;;
esac ;;
esac
unifi_logout