-
Notifications
You must be signed in to change notification settings - Fork 20
/
send-notification.sh
172 lines (140 loc) · 4.11 KB
/
send-notification.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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#!/bin/sh
#
# Script d'envoi de notification SMS via l'API Free Mobile
# https://github.com/C-Duv/freemobile-smsapi-client
#
# Auteur: DUVERGIER Claude (http://claude.duvergier.fr)
#
# Nécessite: sh et wget
#
# Possible usages: see usage_help()
set -eu
readonly PROGNAME=$(basename $0)
readonly PROGDIR=$(readlink -m $(dirname $0))
usage_error () {
echo "ERROR: ${1}" >&2
echo ""
usage_help
exit 1
}
usage_help () {
echo "Possible usages:"
echo "* ${PROGNAME} [options] [message]"
echo "* echo \"All your base are belong to us\" | ${PROGNAME} [options]"
echo ""
echo "Options:"
echo "* -c file specify configuration file"
echo "* -h display this help"
}
CONFIG_FILE=""
while getopts "c:h" option; do
case "$option" in
c) CONFIG_FILE=${OPTARG} ;;
:) usage_error "Invalid arguments" ;;
h) usage_help ; exit 0 ;;
esac
done
shift $((OPTIND-1))
##
## Configuration système
##
# Caractère de fin de ligne
# (http://en.wikipedia.org/wiki/Percent-encoding#Character_data)
NEWLINE_CHAR="%0D" # Valeurs possibles : %0A, %0D et %0D%0A
# URL d'accès à l'API
SMSAPI_BASEURL="https://smsapi.free-mobile.fr"
# Action d'envoi de notification
SMSAPI_SEND_ACTION="sendmsg"
##
## Configuration utilisateur
##
# Login utilisateur / identifiant Free Mobile (celui utilisé pour accéder à
# l'Espace Abonné)
USER_LOGIN="1234567890"
# Clé d'identification (générée et fournie par Free Mobile via l'Espace Abonné,
# "Mes Options" : https://mobile.free.fr/moncompte/index.php?page=options)
API_KEY="s0me5eCre74p1K3y"
# Texte qui sera ajouté AVANT chaque message envoyé
MESSAGE_HEADER="Notification :
"
# Texte qui sera ajouté APRÈS chaque message envoyé
MESSAGE_FOOTER="
--
Le serveur de la maison"
##
## Fichier de configuration
##
if [ -n "${CONFIG_FILE}" ]; then
if [ -e "${CONFIG_FILE}" ]; then
. "${CONFIG_FILE}"
else
echo "ERROR: Configuration file \"${CONFIG_FILE}\" does not exists." >&2
exit 2
fi
else
if [ -e "${PROGDIR}/.freemobile-smsapi" ]; then
. "${PROGDIR}/.freemobile-smsapi"
elif [ -e "${HOME}/.freemobile-smsapi" ]; then
. "${HOME}/.freemobile-smsapi"
fi
fi
##
## Vérifications des paramètres requis
##
if [ -z "${USER_LOGIN}" ] \
|| [ -z "${API_KEY}" ] \
|| [ -z "${SMSAPI_BASEURL}" ] \
|| [ -z "${SMSAPI_SEND_ACTION}" ] \
; then
echo "ERROR: Either USER_LOGIN, API_KEY, SMSAPI_BASEURL or " \
"SMSAPI_SEND_ACTION is not set" >&2
exit 2
fi
##
## Traitement du message
##
MESSAGE_TO_SEND=""
if [ $# -ge 1 ] && [ "${1}" ]; then # Message en tant qu'argument de la ligne de commande
MESSAGE_TO_SEND="${1}"
else # Message lu de STDIN
while read line
do
MESSAGE_TO_SEND="${MESSAGE_TO_SEND}${line}\n"
done
MESSAGE_TO_SEND=${MESSAGE_TO_SEND%"\n"} # Retire le dernier saut de ligne
fi
# Assemble header, message et footer
FINAL_MESSAGE_TO_SEND="${MESSAGE_HEADER}${MESSAGE_TO_SEND}${MESSAGE_FOOTER}"
##
## Appel à l'API (envoi)
##
# echo "Will send the following to ${USER_LOGIN}:" #DEBUG
# echo "${FINAL_MESSAGE_TO_SEND}" #DEBUG
# Particularités de l'appel de curl et la/les options associées :
# * Renvoi le code réponse HTTP uniquement :
# --write-out "%{http_code}" --silent --output /dev/null
#
HTTP_STATUS_CODE=$(\
curl \
--write-out "%{http_code}" \
--silent \
--output /dev/null \
--get "${SMSAPI_BASEURL}/${SMSAPI_SEND_ACTION}" \
--data "user=${USER_LOGIN}" \
--data "pass=${API_KEY}" \
--data-urlencode "msg=${FINAL_MESSAGE_TO_SEND}" \
)
# Codes réponse HTTP possibles
# 200 : Le SMS a été envoyé sur votre mobile.
# 400 : Un des paramètres obligatoires est manquant.
# 402 : Trop de SMS ont été envoyés en trop peu de temps.
# 403 : Le service n'est pas activé sur l'espace abonné, ou login / clé
# incorrect.
# 500 : Erreur côté serveur. Veuillez réessayez ultérieurement.
if [ "${HTTP_STATUS_CODE}" -eq 200 ]; then
# echo "API responded with 200: exiting with 0" #DEBUG
exit 0
else
echo "Error: API responded with ${HTTP_STATUS_CODE}"
exit 1
fi