-
Notifications
You must be signed in to change notification settings - Fork 87
/
set_configs.sh
executable file
·63 lines (55 loc) · 1.64 KB
/
set_configs.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
#!/bin/sh
YI_HACK_PREFIX="/tmp/sd/yi-hack-v5"
sedencode(){
# echo -e "$(sed 's/\\/\\\\\\/g;s/\&/\\\&/g;s/\//\\\//g;')"
echo "$(sed 's/\\/\\\\/g;s/\&/\\\&/g;s/\//\\\//g;')"
}
removedoublequotes(){
echo "$(sed 's/^"//g;s/"$//g')"
}
get_conf_type()
{
CONF="$(echo $QUERY_STRING | cut -d'=' -f1)"
VAL="$(echo $QUERY_STRING | cut -d'=' -f2)"
if [ $CONF == "conf" ] ; then
echo $VAL
fi
}
CONF_TYPE="$(get_conf_type)"
CONF_FILE=""
if [ "$CONF_TYPE" == "mqtt" ] ; then
CONF_FILE="$YI_HACK_PREFIX/etc/mqttv4.conf"
else
CONF_FILE="$YI_HACK_PREFIX/etc/$CONF_TYPE.conf"
fi
read -r POST_DATA
ROWS=$(echo "$POST_DATA" | jq -r '. | keys[] as $k | "\($k)=\(.[$k])"')
for ROW in $ROWS; do
KEY=$(echo $ROW | cut -d'=' -f1)
VALUE=$(echo $ROW | cut -d'=' -f2)
if [ "$KEY" == "HOSTNAME" ] ; then
if [ -z $VALUE ] ; then
# Use 2 last MAC address numbers to set a different hostname
MAC=$(cat /sys/class/net/wlan0/address|cut -d ':' -f 5,6|sed 's/://g')
if [ "$MAC" != "" ]; then
hostname yi-$MAC
else
hostname yi-hack
fi
hostname > $YI_HACK_PREFIX/etc/hostname
else
hostname $VALUE
echo "$VALUE" > $YI_HACK_PREFIX/etc/hostname
fi
elif [ "$KEY" == "TIMEZONE" ] ; then
echo $VALUE > $YI_HACK_PREFIX/etc/TZ
else
VALUE=$(echo "$VALUE" | sedencode)
sed -i "s/^\(${KEY}\s*=\s*\).*$/\1${VALUE}/" $CONF_FILE
fi
done
# Yeah, it's pretty ugly.
printf "Content-type: application/json\r\n\r\n"
printf "{\n"
printf "\"%s\":\"%s\"\\n" "error" "false"
printf "}"