aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INITIAL-COMMANDS.md2
-rw-r--r--README.md2
-rw-r--r--check-certificates.rsc25
-rw-r--r--doc/mod/notification-telegram.d/getchatid.avifbin0 -> 3896 bytes
-rw-r--r--doc/mod/notification-telegram.md24
-rw-r--r--global-functions.rsc2
-rw-r--r--mod/notification-telegram.rsc40
-rw-r--r--news-and-changes.rsc1
8 files changed, 75 insertions, 21 deletions
diff --git a/INITIAL-COMMANDS.md b/INITIAL-COMMANDS.md
index 424ef32..8b64d28 100644
--- a/INITIAL-COMMANDS.md
+++ b/INITIAL-COMMANDS.md
@@ -19,7 +19,7 @@ Run the complete base installation:
{
/tool/fetch "https://git.eworm.de/cgit/routeros-scripts/plain/certs/ISRG-Root-X2.pem" dst-path="isrg-root-x2.pem" as-value;
:delay 1s;
- /certificate/import file-name=isrg-root-x2.pem passphrase="";
+ /certificate/import file-name="isrg-root-x2.pem" passphrase="";
:if ([ :len [ /certificate/find where fingerprint="69729b8e15a86efc177a57afb7171dfc64add28c2fca8cf1507e34453ccb1470" ] ] != 1) do={
:error "Something is wrong with your certificates!";
};
diff --git a/README.md b/README.md
index a76d50f..fae6986 100644
--- a/README.md
+++ b/README.md
@@ -87,7 +87,7 @@ file to your MikroTik device.
Then we import the certificate.
- /certificate/import file-name=isrg-root-x2.pem passphrase="";
+ /certificate/import file-name="isrg-root-x2.pem" passphrase="";
Do not worry that the command is not shown - that happens because it contains
a sensitive property, the passphrase.
diff --git a/check-certificates.rsc b/check-certificates.rsc
index 0907395..be8e4df 100644
--- a/check-certificates.rsc
+++ b/check-certificates.rsc
@@ -48,21 +48,26 @@
:global UrlEncode;
:global WaitForFile;
- :local Return false;
+ :foreach Type in={ "p12"; "pem" } do={
+ :local CertFileName ([ $UrlEncode $FetchName ] . "." . $Type);
+ $LogPrint debug $ScriptName ("Trying type '" . $Type . "' for '" . $CertName . \
+ "' (file '" . $CertFileName . "')...");
- :foreach Type in={ ".pem"; ".p12" } do={
- :local CertFileName ([ $UrlEncode $FetchName ] . $Type);
:do {
/tool/fetch check-certificate=yes-without-crl http-header-field=({ [ $FetchUserAgentStr $ScriptName ] }) \
($CertRenewUrl . $CertFileName) dst-path=$CertFileName as-value;
$WaitForFile $CertFileName;
:local DecryptionFailed true;
- :foreach PassPhrase in=$CertRenewPass do={
- :local Result [ /certificate/import file-name=$CertFileName passphrase=$PassPhrase as-value ];
- :if ($Result->"decryption-failures" = 0) do={
- :set DecryptionFailed false;
- }
+ :foreach I,PassPhrase in=$CertRenewPass do={
+ :do {
+ $LogPrint debug $ScriptName ("Trying " . $I . ". passphrase... ");
+ :local Result [ /certificate/import file-name=$CertFileName passphrase=$PassPhrase as-value ];
+ :if ($Result->"decryption-failures" = 0) do={
+ $LogPrint debug $ScriptName ("Success!");
+ :set DecryptionFailed false;
+ }
+ } on-error={ }
}
$RmFile $CertFileName;
@@ -77,13 +82,13 @@
$CertificateNameByCN [ /certificate/get $CertInChain common-name ];
}
- :set Return true;
+ :return true;
} on-error={
$LogPrint debug $ScriptName ("Could not download certificate file '" . $CertFileName . "'.");
}
}
- :return $Return;
+ :return false;
}
:local FormatInfo do={
diff --git a/doc/mod/notification-telegram.d/getchatid.avif b/doc/mod/notification-telegram.d/getchatid.avif
new file mode 100644
index 0000000..7792969
--- /dev/null
+++ b/doc/mod/notification-telegram.d/getchatid.avif
Binary files differ
diff --git a/doc/mod/notification-telegram.md b/doc/mod/notification-telegram.md
index 8043716..2d00116 100644
--- a/doc/mod/notification-telegram.md
+++ b/doc/mod/notification-telegram.md
@@ -38,14 +38,21 @@ create your own bot:
![create new bot](notification-telegram.d/newbot.avif)
-Now open a chat with your bot and start it by clicking the `START` button.
+Set that token from *BotFather* (use your own!) to `TelegramTokenId`, for
+now just temporarily:
-Open just another chat with [GetIDs Bot](https://t.me/getidsbot), again start
-with the `START` button. It will send you some information, including the
-`id`, just below `You`.
+ :set TelegramTokenId "5214364459:AAHLwf1o7ybbKDo6pY24Kd2bZ5rjCakDXTc";
+
+Now open a chat with your bot and start it by clicking the `START` button,
+then send your first message. Any text will do. On your device run
+`$GetTelegramChatId` to retrieve the chat id:
+
+ $GetTelegramChatId;
+
+![get chat id](notification-telegram.d/getchatid.avif)
Finally edit `global-config-overlay`, add `TelegramTokenId` with the token
-from *BotFather* and `TelegramChatId` with your id from *GetIDs Bot*. Then
+from *BotFather* and `TelegramChatId` with your retrieved chat id. Then
reload the configuration.
> ℹ️ **Info**: Copy relevant configuration from
@@ -54,9 +61,10 @@ reload the configuration.
### Notifications to a group
-Sending notifications to a group is possible as well. Add your bot and the
-*GetIDs Bot* to a group, then use the group's id (which starts with a dash)
-for `TelegramChatId`. Then remove *GetIDs Bot* from group.
+Sending notifications to a group is possible as well. Add your bot to a group
+and make it an admin (required for read access!) and send a message and run
+`$GetTelegramChatId` again. Then use that chat id (which starts with a dash)
+for `TelegramChatId`.
Groups can enable the `Topics` feature. Use `TelegramThreadId` to send to a
specific topic in a group.
diff --git a/global-functions.rsc b/global-functions.rsc
index b3166dc..43cd7f0 100644
--- a/global-functions.rsc
+++ b/global-functions.rsc
@@ -15,7 +15,7 @@
# Git commit id & info, expected configuration version
:global CommitId "unknown";
:global CommitInfo "unknown";
-:global ExpectedConfigVersion 134;
+:global ExpectedConfigVersion 135;
# global variables not to be changed by user
:global GlobalFunctionsReady false;
diff --git a/mod/notification-telegram.rsc b/mod/notification-telegram.rsc
index d04893f..68e913f 100644
--- a/mod/notification-telegram.rsc
+++ b/mod/notification-telegram.rsc
@@ -10,6 +10,7 @@
# https://rsc.eworm.de/doc/mod/notification-telegram.md
:global FlushTelegramQueue;
+:global GetTelegramChatId;
:global NotificationFunctions;
:global PurgeTelegramQueue;
:global SendTelegram;
@@ -58,6 +59,45 @@
:global ExitError; $ExitError false $0;
} }
+# get the chat id
+:set GetTelegramChatId do={ :do {
+ :global TelegramTokenId;
+
+ :global CertificateAvailable;
+ :global LogPrint;
+
+ :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={
+ $LogPrint warning $0 ("Downloading required certificate failed.");
+ :return false;
+ }
+
+ :local Data;
+ :do {
+ :set Data ([ /tool/fetch check-certificate=yes-without-crl output=user \
+ ("https://api.telegram.org/bot" . $TelegramTokenId . "/getUpdates?offset=0" . \
+ "&allowed_updates=%5B%22message%22%5D") as-value ]->"data");
+ } on-error={
+ $LogPrint warning $0 ("Fetching data failed!");
+ :return false;
+ }
+
+ :local JSON [ :deserialize from=json value=$Data ];
+ :local Count [ :len ($JSON->"result") ];
+
+ :if ($Count = 0) do={
+ $LogPrint info $0 ("No message received.");
+ :return false;
+ }
+
+ :local Message ($JSON->"result"->($Count - 1)->"message");
+ $LogPrint info $0 ("The chat id is: " . ($Message->"chat"->"id"));
+ :if (($Message->"is_topic_message") = true) do={
+ $LogPrint info $0 ("The thread id is: " . ($Message->"message_thread_id"));
+ }
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
+
# send notification via telegram - expects one array argument
:set ($NotificationFunctions->"telegram") do={
:local Notification $1;
diff --git a/news-and-changes.rsc b/news-and-changes.rsc
index a735ff7..459326f 100644
--- a/news-and-changes.rsc
+++ b/news-and-changes.rsc
@@ -59,6 +59,7 @@
132="Split off plugins from 'check-health', so the script works on all devices to monitor CPU and RAM. The supported plugins for sensors in hardware are installed automatically.";
133="Updated the default configuration for 'fw-addr-lists', deprecated lists were removed, a collective list was added.";
134="Enhanced 'mod/notification-telegram' and 'telegram-chat' to support topics in groups.";
+ 135="Introduced helper function '\$GetTelegramChatId' for 'mod/notification-telegram' which helps retrieve information.";
};
# Migration steps to be applied on script updates