op-packages/smscontrol/files/smshandler
github-actions[bot] b86d032e91 🤞 Sync 2026-04-23 06:19:46
2026-04-23 06:19:46 +08:00

93 lines
3.2 KiB
Bash
Executable File

#!/bin/ash
DIR="/var/spool/smscontrol"
ENABLED=$(uci get smscontrol.common.enabled)
if [ "$ENABLED" -eq "1" ]; then
case "$1" in
RECEIVED)
PASS=$(uci get smscontrol.common.pass)
[ -z "$PASS" ] && exit
PASSLENGTH=$(echo $PASS | wc -c)
MESSAGE=$(cat "$2")
FROM=$(echo "${MESSAGE}"|grep -e '^From\:'|cut -d' ' -f2)
DATE=$(echo "${MESSAGE}"|grep -e '^Received\:'|cut -d' ' -f2,3)
BODY=$(echo "${MESSAGE}"|sed -e '1,/^$/d')
if [[ "$(uci -q get smscontrol.common.smscontrol_log)" = "1" ]]; then
CFG=$(uci add smscontrol_log event)
uci set smscontrol_log.$CFG.date="${DATE}"
uci set smscontrol_log.$CFG.type=SMS
uci set smscontrol_log.$CFG.from="${FROM}"
uci set smscontrol_log.$CFG.message="${BODY}"
uci commit smscontrol_log
fi
[ "$PASS;" != "${BODY::$PASSLENGTH}" ] && exit
ADMINPHONES=$(uci get smscontrol.common.whitelist)
COUNTPHONES=$(echo $ADMINPHONES | wc -w)
COUNT="0"
while [ "$COUNT" -ne "$COUNTPHONES" ]; do
COUNT=$(($COUNT + 1))
ADMPH=$(echo $ADMINPHONES | awk -v var=$COUNT -F ' ' '{print $var}')
if [ "$ADMPH" -eq "$FROM" ]; then
BODY=${BODY:$PASSLENGTH}
if [ "${BODY::4}" != "CLI\$" ]; then
$DIR/commands "$BODY" "$FROM" &
break
else
BODY=${BODY:4}
$DIR/cli "$BODY" "$FROM" &
break
fi
fi
done
;;
USSD)
;;
CALL)
MESSAGE=$(cat "$2")
FROM=$(echo "${MESSAGE}"|grep -e '^From\:'|cut -d' ' -f2)
if [[ "$(uci -q get smscontrol.common.smscontrol_log)" = "1" ]]; then
CFG=$(uci add smscontrol_log event)
DATE=$(date +"%y-%m-%d %H:%M:%S")
uci set smscontrol_log.$CFG.date="${DATE}"
uci set smscontrol_log.$CFG.type=CALL
uci set smscontrol_log.$CFG.from="${FROM}"
uci commit smscontrol_log
fi
ADMINPHONES=$(uci get smscontrol.common.whitelist)
COUNTPHONES=$(echo $ADMINPHONES | wc -w)
COUNT="0"
while [ "$COUNT" -ne "$COUNTPHONES" ]; do
COUNT=$(($COUNT + 1))
ADMPH=$(echo $ADMINPHONES | awk -v var=$COUNT -F ' ' '{print $var}')
if [ "$ADMPH" -eq "$FROM" ]; then
$DIR/calls "$FROM" &
break
fi
done
;;
SENT)
if [[ "$(uci -q get smscontrol.common.smscontrol_log)" = "1" ]]; then
MESSAGE=$(cat "$2")
TO=$(echo "${MESSAGE}"|grep -e '^To\:'|cut -d' ' -f2)
BODY=$(echo "${MESSAGE}"|sed -e '1,/^$/d')
CFG=$(uci add smscontrol_log event)
DATE=$(date +"%y-%m-%d %H:%M:%S")
uci set smscontrol_log.$CFG.date="${DATE}"
uci set smscontrol_log.$CFG.type=SMS
uci set smscontrol_log.$CFG.to="${TO}"
uci set smscontrol_log.$CFG.message="${BODY}"
uci commit smscontrol_log
fi
;;
*)
;;
esac
fi