Avancé
Ce chapitre traite des sujets pour utilisateurs avancés qui contournent l’interface web normale plutôt que de la traverser : accès direct à la base de données et SQL, et scripts de nettoyage de base de données en ligne de commande. La plupart des utilisateurs n’auront jamais besoin de ce chapitre.
Connexion directe à la base de données SMSEagle
La base de données de SMSEagle s’exécute sur PostgreSQL. Vous pouvez y accéder directement pour lire ou écrire des messages SMS via des requêtes SQL, au lieu de passer par l’interface web ou l’API.
L’accès à la base de données pour les applications externes est désactivé par défaut. Activez-le sous Settings > Global settings > Application > Access to DB for external applications.
Une fois activé, connectez-vous à la base de données à partir d’une application externe en utilisant :
Host : l’adresse IP de l’appareil
Database name :
smseagleUser :
smseagleuserPassword :
postgreeagle
Injection d’un SMS court via SQL
Un message texte court (jusqu’à 160 caractères) :
INSERT INTO outbox (
DestinationNumber,
TextDecoded,
CreatorID,
Coding,
Class,
SenderID
) VALUES (
'1234567',
'This is a SQL test message',
'Program',
'Default_No_Compression',
-1,
'smseagle1'
);
INSERT INTO user_outbox (
id_outbox,
id_user
) SELECT CURRVAL(pg_get_serial_sequence('outbox','ID')), 1;
Le message ci-dessus appartient à l’utilisateur avec id_user 1 (l’utilisateur admin par défaut) - les valeurs id_user des autres utilisateurs se trouvent dans la table public."user". Le champ SenderID identifie quel modem envoie le message : smseagle1 pour le modem 1, smseagle2 pour le modem 2.
Injection d’un SMS long via SQL
Les messages multipart ont également besoin d’un en-tête UDH, stocké sous forme de chaîne hexadécimale dans le champ UDH. À moins que vous n’ayez une raison spécifique de le faire manuellement, utilisez l’API à la place (voir API and Developer Integration).
Pour un message texte long, l’UDH commence par 050003, suivi d’un octet utilisé comme référence de message (n’importe quelle valeur hexadécimale, mais différente pour chaque message - D3 ci-dessous), un octet pour le nombre total de parties (02 ci-dessous, unique par message envoyé au même numéro), et un octet pour le numéro de la partie actuelle (01 pour la première partie, 02 pour la deuxième, et ainsi de suite).
Un message long en deux parties ressemble à ceci :
INSERT INTO outbox (
"DestinationNumber",
"CreatorID",
"MultiPart",
"UDH",
"TextDecoded",
"Coding",
"Class",
"SenderID"
) VALUES (
'1234567',
'Program',
'true',
'050003D30201',
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, qui',
'Default_No_Compression',
-1,
'smseagle1'
)
INSERT INTO outbox_multipart (
"ID",
"SequencePosition",
"UDH",
"TextDecoded",
"Coding",
"Class"
) SELECT
CURRVAL(pg_get_serial_sequence('outbox','ID')),
2,
'050003D30202',
's nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
'Default_No_Compression',
-1;
INSERT INTO user_outbox (
id_outbox,
id_user
) SELECT
CURRVAL(pg_get_serial_sequence('outbox','ID')),
1;
L’ajout d’un UDH laisse moins de place pour le texte - l’exemple ci-dessus permet seulement 153 caractères par partie de message.
Scripts de nettoyage de base de données
Quelques scripts sont disponibles pour supprimer des messages SMS de la base de données via la CLI Linux, situés à /mnt/nand-user/scripts/ :
Script |
Utilisation |
Objectif |
|---|---|---|
|
|
Supprimer les SMS de la Inbox et SentItems plus anciens que la date donnée |
|
|
Supprimer les SMS de la Inbox et SentItems plus anciens que 7 jours |
|
|
Nettoie Inbox, SentItems et Outbox - conçu pour s’exécuter périodiquement via cron |
|
|
Supprimer les SMS d’un dossier choisi |
Ajouter un script à cron : créer un fichier sous /etc/cron.d/ (par exemple db_cleaner) avec un contenu tel que :
0 0 1 * * root /mnt/nand-user/scripts/db_delete_allfolders
Cet exemple exécute le script de nettoyage le 1er de chaque mois.
Envoi des journaux vers un serveur externe
SMSEagle écrit ses journaux via rsyslog. Pour envoyer une copie vers un serveur syslog central, ajoutez une règle de forwarding via SSH. Il n’existe pas de paramètre pour cela dans l’interface web.
Connectez-vous à l’appareil via SSH en tant que
root.Créez le fichier
/etc/rsyslog.d/005-remote.confavec cette règle, en remplaçant l’adresse, le port et le protocole par ceux de votre serveur :*.* action(type="omfwd" target="192.0.2.250" port="514" protocol="udp" action.resumeRetryCount="10" queue.type="linkedList" queue.size="10000")target- adresse IP ou nom d’hôte du serveur syslog.port- port sur lequel le serveur écoute, généralement514.protocol-udpoutcp.Les paramètres de file d’attente conservent jusqu’à 10000 messages sur l’appareil tandis que le serveur est inaccessible, et les envoient une fois qu’il est de retour.
Vérifiez la configuration, puis redémarrez rsyslog :
rsyslogd -N1 systemctl restart rsyslog
Gardez le nom du fichier. Les propres journaux de SMSEagle (Application, API, Message, et les services de courrier électronique, appel, Signal et WhatsApp) sont écrits par des règles dans
/etc/rsyslog.d/010-*.confà018-*.conf, et chacune de ces règles arrête le traitement ultérieur de ses messages. Une règle de forwarding placée après elles, par exemple à la fin de/etc/rsyslog.conf, ne transfère que les journaux système. Le préfixe005-fait que rsyslog lit la règle de forwarding en premier, de sorte que chaque message est transféré.
Pour chiffrer le trafic des journaux avec TLS, consultez le guide rsyslog Encrypting Syslog Traffic with TLS.