aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Christian Hesse <mail@eworm.de>2024-04-01 23:21:50 +0200
committerGravatar Christian Hesse <mail@eworm.de>2024-04-02 00:08:44 +0200
commite107247c1684c45d230cd1db3862190f9d0177b6 (patch)
tree6d4af0498b99b7b633ff3102af704eaf24257594
parentc01a424f4f41997d1b8b4a45c2bb033f37470393 (diff)
parent4db91ec16eb482d0989435f40373f455f1665f97 (diff)
Merge branch 'deserialize' into nextrouteros-7.13-3
-rw-r--r--doc/mod/notification-matrix.md2
-rw-r--r--doc/mod/notification-telegram.md2
-rw-r--r--global-functions.rsc61
-rw-r--r--mod/notification-matrix.rsc8
-rw-r--r--mod/notification-telegram.rsc8
-rw-r--r--telegram-chat.rsc13
6 files changed, 16 insertions, 78 deletions
diff --git a/doc/mod/notification-matrix.md b/doc/mod/notification-matrix.md
index c68b0aa..88628e4 100644
--- a/doc/mod/notification-matrix.md
+++ b/doc/mod/notification-matrix.md
@@ -4,7 +4,7 @@ Send notifications via Matrix
[![GitHub stars](https://img.shields.io/github/stars/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=red)](https://github.com/eworm-de/routeros-scripts/stargazers)
[![GitHub forks](https://img.shields.io/github/forks/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=green)](https://github.com/eworm-de/routeros-scripts/network)
[![GitHub watchers](https://img.shields.io/github/watchers/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=blue)](https://github.com/eworm-de/routeros-scripts/watchers)
-[![required RouterOS version](https://img.shields.io/badge/RouterOS-7.12-yellow?style=flat)](https://mikrotik.com/download/changelogs/)
+[![required RouterOS version](https://img.shields.io/badge/RouterOS-7.13-yellow?style=flat)](https://mikrotik.com/download/changelogs/)
[![Telegram group @routeros_scripts](https://img.shields.io/badge/Telegram-%40routeros__scripts-%2326A5E4?logo=telegram&style=flat)](https://t.me/routeros_scripts)
[![donate with PayPal](https://img.shields.io/badge/Like_it%3F-Donate!-orange?logo=githubsponsors&logoColor=orange&style=flat)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A4ZXBD6YS2W8J)
diff --git a/doc/mod/notification-telegram.md b/doc/mod/notification-telegram.md
index cb326f0..159fda9 100644
--- a/doc/mod/notification-telegram.md
+++ b/doc/mod/notification-telegram.md
@@ -4,7 +4,7 @@ Send notifications via Telegram
[![GitHub stars](https://img.shields.io/github/stars/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=red)](https://github.com/eworm-de/routeros-scripts/stargazers)
[![GitHub forks](https://img.shields.io/github/forks/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=green)](https://github.com/eworm-de/routeros-scripts/network)
[![GitHub watchers](https://img.shields.io/github/watchers/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=blue)](https://github.com/eworm-de/routeros-scripts/watchers)
-[![required RouterOS version](https://img.shields.io/badge/RouterOS-7.12-yellow?style=flat)](https://mikrotik.com/download/changelogs/)
+[![required RouterOS version](https://img.shields.io/badge/RouterOS-7.13-yellow?style=flat)](https://mikrotik.com/download/changelogs/)
[![Telegram group @routeros_scripts](https://img.shields.io/badge/Telegram-%40routeros__scripts-%2326A5E4?logo=telegram&style=flat)](https://t.me/routeros_scripts)
[![donate with PayPal](https://img.shields.io/badge/Like_it%3F-Donate!-orange?logo=githubsponsors&logoColor=orange&style=flat)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A4ZXBD6YS2W8J)
diff --git a/global-functions.rsc b/global-functions.rsc
index b2ef3a2..e19ed65 100644
--- a/global-functions.rsc
+++ b/global-functions.rsc
@@ -56,7 +56,6 @@
:global MkDir;
:global NotificationFunctions;
:global ParseDate;
-:global ParseJson;
:global ParseKeyValueStore;
:global PrettyPrint;
:global RandomDelay;
@@ -830,66 +829,6 @@
"day"=[ :tonum [ :pick $Date 8 10 ] ] });
}
-# parse JSON into array
-# Warning: This is not a complete parser!
-:set ParseJson do={
- :local Input [ :tostr $1 ];
-
- :local InLen;
- :local Return ({});
- :local Skip 0;
-
- :if ([ :pick $Input 0 ] = "{") do={
- :set Input [ :pick $Input 1 ([ :len $Input ] - 1) ];
- }
- :set Input [ :toarray $Input ];
- :set InLen [ :len $Input ];
-
- :for I from=0 to=$InLen do={
- :if ($Skip > 0 || $Input->$I = "\n" || $Input->$I = "\r\n") do={
- :if ($Skip > 0) do={
- :set $Skip ($Skip - 1);
- }
- } else={
- :local Done false;
- :local Key ($Input->$I);
- :local Val1 ($Input->($I + 1));
- :local Val2 ($Input->($I + 2));
- :if ($Val1 = ":") do={
- :set Skip 2;
- :set ($Return->$Key) $Val2;
- :set Done true;
- }
- :if ($Done = false && $Val1 = ":[") do={
- :local Last false;
- :set Skip 1;
- :set ($Return->$Key) ({});
- :do {
- :set Skip ($Skip + 1);
- :local ValX ($Input->($I + $Skip));
- :if ([ :pick $ValX ([ :len $ValX ] - 1) ] = "]") do={
- :set Last true;
- :set ValX [ :pick $ValX 0 ([ :len $ValX ] - 1) ];
- }
- :set ($Return->$Key) (($Return->$Key), $ValX);
- } while=($Last = false && $I + $Skip < $InLen);
- :set Done true;
- }
- :if ($Done = false && $Val1 = ":[]") do={
- :set Skip 1;
- :set ($Return->$Key) ({});
- :set Done true;
- }
- :if ($Done = false) do={
- :set Skip 1;
- :set ($Return->$Key) [ :pick $Val1 1 [ :len $Val1 ] ];
- }
- }
- }
-
- :return $Return;
-}
-
# parse key value store
:set ParseKeyValueStore do={
:local Source $1;
diff --git a/mod/notification-matrix.rsc b/mod/notification-matrix.rsc
index aa95841..8234779 100644
--- a/mod/notification-matrix.rsc
+++ b/mod/notification-matrix.rsc
@@ -4,6 +4,8 @@
# Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
+# requires RouterOS, version=7.13
+#
# send notifications via Matrix
# https://git.eworm.de/cgit/routeros-scripts/about/doc/mod/notification-matrix.md
@@ -183,9 +185,7 @@
:local User [ :tostr $1 ];
:local Pass [ :tostr $2 ];
- :global CharacterReplace;
:global LogPrint;
- :global ParseJson;
:global MatrixAccessToken;
:global MatrixHomeServer;
@@ -194,7 +194,7 @@
:do {
:local Data ([ /tool/fetch check-certificate=yes-without-crl output=user \
("https://" . $Domain . "/.well-known/matrix/client") as-value ]->"data");
- :set MatrixHomeServer ([ $ParseJson ([ $ParseJson [ $CharacterReplace $Data " " "" ] ]->"m.homeserver") ]->"base_url");
+ :set MatrixHomeServer ([ :deserialize from=json value=$Data ]->"m.homeserver"->"base_url");
$LogPrint debug $0 ("Home server is: " . $MatrixHomeServer);
} on-error={
$LogPrint error $0 ("Failed getting home server!");
@@ -209,7 +209,7 @@
:local Data ([ /tool/fetch check-certificate=yes-without-crl output=user \
http-method=post http-data=("{\"type\":\"m.login.password\", \"user\":\"" . $User . "\", \"password\":\"" . $Pass . "\"}") \
("https://" . $MatrixHomeServer . "/_matrix/client/r0/login") as-value ]->"data");
- :set MatrixAccessToken ([ $ParseJson $Data ]->"access_token");
+ :set MatrixAccessToken ([ :deserialize from=json value=$Data ]->"access_token");
$LogPrint debug $0 ("Access token is: " . $MatrixAccessToken);
} on-error={
$LogPrint error $0 ("Failed logging in (and getting access token)!");
diff --git a/mod/notification-telegram.rsc b/mod/notification-telegram.rsc
index 506ec80..a43ff10 100644
--- a/mod/notification-telegram.rsc
+++ b/mod/notification-telegram.rsc
@@ -3,6 +3,8 @@
# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
+# requires RouterOS, version=7.13
+#
# send notifications via Telegram
# https://git.eworm.de/cgit/routeros-scripts/about/doc/mod/notification-telegram.md
@@ -19,7 +21,6 @@
:global IsFullyConnected;
:global LogPrint;
- :global ParseJson;
:global UrlEncode;
:if ([ $IsFullyConnected ] = false) do={
@@ -43,7 +44,7 @@
"&reply_to_message_id=" . ($Message->"replyto") . "&disable_web_page_preview=true" . \
"&parse_mode=MarkdownV2&text=" . [ $UrlEncode ($Message->"text") ]) as-value ]->"data");
:set ($TelegramQueue->$Id);
- :set ($TelegramMessageIDs->([ $ParseJson ([ $ParseJson $Data ]->"result") ]->"message_id")) 1;
+ :set ($TelegramMessageIDs->[ :tostr ([ :deserialize from=json value=$Data ]->"result"->"message_id") ]) 1;
} on-error={
$LogPrint debug $0 ("Sending queued Telegram message failed.");
:set AllDone false;
@@ -75,7 +76,6 @@
:global EitherOr;
:global IfThenElse;
:global LogPrint;
- :global ParseJson;
:global SymbolForNotification;
:global UrlEncode;
@@ -144,7 +144,7 @@
http-data=("chat_id=" . $ChatId . "&disable_notification=" . ($Notification->"silent") . \
"&reply_to_message_id=" . ($Notification->"replyto") . "&disable_web_page_preview=true" . \
"&parse_mode=MarkdownV2&text=" . [ $UrlEncode $Text ]) as-value ]->"data");
- :set ($TelegramMessageIDs->([ $ParseJson ([ $ParseJson $Data ]->"result") ]->"message_id")) 1;
+ :set ($TelegramMessageIDs->[ :tostr ([ :deserialize from=json value=$Data ]->"result"->"message_id") ]) 1;
} on-error={
$LogPrint info $0 ("Failed sending telegram notification! Queuing...");
diff --git a/telegram-chat.rsc b/telegram-chat.rsc
index 3d0f397..c1a1cbc 100644
--- a/telegram-chat.rsc
+++ b/telegram-chat.rsc
@@ -34,7 +34,6 @@
:global MAX;
:global MIN;
:global MkDir;
- :global ParseJson;
:global RandomDelay;
:global ScriptLock;
:global SendTelegram2;
@@ -86,18 +85,18 @@
:error false;
}
+ :local JSON [ :deserialize from=json value=$Data ];
:local UpdateID 0;
:local Uptime [ /system/resource/get uptime ];
- :foreach UpdateArray in=([ $ParseJson $Data ]->"result") do={
- :local Update [ $ParseJson $UpdateArray ];
+ :foreach Update in=($JSON->"result") do={
:set UpdateID ($Update->"update_id");
- :local Message [ $ParseJson ($Update->"message") ];
+ :local Message ($Update->"message");
:local IsReply [ :len ($Message->"reply_to_message") ];
- :local IsMyReply ($TelegramMessageIDs->([ $ParseJson ($Message->"reply_to_message") ]->"message_id"));
+ :local IsMyReply ($TelegramMessageIDs->[ :tostr ($Message->"reply_to_message"->"message_id") ]);
:if (($IsMyReply = 1 || $TelegramChatOffset->0 > 0 || $Uptime > 5m) && $UpdateID >= $TelegramChatOffset->2) do={
:local Trusted false;
- :local Chat [ $ParseJson ($Message->"chat") ];
- :local From [ $ParseJson ($Message->"from") ];
+ :local Chat ($Message->"chat");
+ :local From ($Message->"from");
:foreach IdsTrusted in=($TelegramChatId, $TelegramChatIdsTrusted) do={
:if ($From->"id" = $IdsTrusted || $From->"username" = $IdsTrusted) do={