1717# Extract configuration using jq or manual parsing
1818WEBHOOK_URL=$( echo " $API_CONFIG " | jq -r ' .webhook_url' 2> /dev/null)
1919HEADERS=$( echo " $API_CONFIG " | jq -r ' .headers' 2> /dev/null)
20+ FORMAT=$( echo " $API_CONFIG " | jq -r ' .format' 2> /dev/null)
21+ REQUEST_METHOD=$( echo " $API_CONFIG " | jq -r ' .request_method' 2> /dev/null)
2022
2123# Fallback to manual parsing if jq fails
2224if [ -z " $WEBHOOK_URL " ] || [ " $WEBHOOK_URL " = " null" ]; then
@@ -32,68 +34,28 @@ if [ -z "$WEBHOOK_URL" ]; then
3234 exit 1
3335fi
3436
35- # Prepare JSON payload using jq if available
36- if command -v jq > /dev/null 2>&1 ; then
37- JSON_PAYLOAD=$( jq -n \
38- --arg type " sms" \
39- --arg title " QModem SMS: ($SMS_SENDER )" \
40- --arg timestamp " $SMS_TIME " \
41- --arg sender " $SMS_SENDER " \
42- --arg content " $SMS_CONTENT " \
43- ' {
44- type: $type,
45- title: $title,
46- timestamp: $timestamp,
47- sender: $sender,
48- content: $content
49- }' )
37+ # Prepare payload based on format
38+ if [ -z " $FORMAT " ] || [ " $FORMAT " = " null" ]; then
39+ payload=" $SMS_SENDER /$SMS_CONTENT ($SMS_TIME )"
5040else
51- # Fallback JSON generation
52- JSON_PAYLOAD=" {
53- \" type\" : \" sms\" ,
54- \" title\" : \" QModem SMS: ($SMS_SENDER )\" ,
55- \" timestamp\" : \" $SMS_TIME \" ,
56- \" sender\" : \" $SMS_SENDER \" ,
57- \" content\" : \" $SMS_CONTENT \"
58- }"
41+ payload=$( echo " $FORMAT " | sed " s/{SENDER}/$SMS_SENDER /g; s/{TIME}/$SMS_TIME /g; s/{CONTENT}/$SMS_CONTENT /g" )
5942fi
60-
61- # Try curl first, then wget
62- if command -v curl > /dev/null 2>&1 ; then
63- CURL_CMD=" curl -X POST \" $WEBHOOK_URL \" "
64- CURL_CMD=" $CURL_CMD -H \" Content-Type: application/json\" "
65-
66- # Add custom headers if provided
67- if [ -n " $HEADERS " ]; then
68- CURL_CMD=" $CURL_CMD -H \" $HEADERS \" "
69- fi
70-
71- CURL_CMD=" $CURL_CMD -d '$JSON_PAYLOAD '"
72- CURL_CMD=" $CURL_CMD --connect-timeout 10 --max-time 30"
73-
74- eval " $CURL_CMD "
75- elif command -v wget > /dev/null 2>&1 ; then
76- # Create temporary file for POST data
77- TEMP_FILE=$( mktemp)
78- echo " $JSON_PAYLOAD " > " $TEMP_FILE "
79-
80- WGET_CMD=" wget -O-"
81- WGET_CMD=" $WGET_CMD --header=\" Content-Type: application/json\" "
82-
83- # Add custom headers if provided
84- if [ -n " $HEADERS " ]; then
85- WGET_CMD=" $WGET_CMD --header=\" $HEADERS \" "
86- fi
87-
88- WGET_CMD=" $WGET_CMD --post-file=\" $TEMP_FILE \" "
89- WGET_CMD=" $WGET_CMD --timeout=30"
90- WGET_CMD=" $WGET_CMD \" $WEBHOOK_URL \" "
91-
92- eval " $WGET_CMD "
93- rm -f " $TEMP_FILE "
43+ # Prepare curl command
44+ if [ -z " $REQUEST_METHOD " ] || [ " $REQUEST_METHOD " = " null" ]; then
45+ REQUEST_METHOD=" GET"
46+ fi
47+ CURL_CMD=" curl -s -X $REQUEST_METHOD "
48+ [ -n " $HEADERS " ] && CURL_CMD=" $CURL_CMD -H \" $HEADERS \" "
49+ if [ " $REQUEST_METHOD " = " POST" ]; then
50+ CURL_CMD=" $CURL_CMD -d \" $payload \" "
9451else
95- echo " Error: Neither curl nor wget available"
96- exit 1
52+ # replay space and special characters in payload for URL
53+ payload=$( echo " $payload " | sed ' s/ /%20/g;s/!/%21/g;s/"/%22/g;s/#/%23/g;s/\$/%24/g;s/&/%26/g;s/' \' ' /%27/g;s/(/%28/g;s/)/%29/g;s/*/%2A/g;s/+/%2B/g;s/,/%2C/g;s/;/%3B/g;s/=/%3D/g;s/?/%3F/g;s/@/%40/g;s/\[/%5B/g;s/\\/%5C/g;s/\]/%5D/g;s/\^/%5E/g;s/_/%5F/g;s/`/%60/g;s/{/%7B/g;s/|/%7C/g;s/}/%7D/g;s/~/%7E/g' )
54+ WEBHOOK_URL=" $WEBHOOK_URL /$payload "
9755fi
56+ CURL_CMD=" $CURL_CMD \" $WEBHOOK_URL \" "
57+ # Execute curl command
58+ echo " Executing curl command: $CURL_CMD "
59+ eval $CURL_CMD
9860
9961exit $?
0 commit comments