Compare commits

...

48 commits

Author SHA1 Message Date
Christian Hesse
c63826c99f doc/mod/scriptrunonce: get script from rsc.eworm.de 2025-11-12 00:25:18 +01:00
Christian Hesse
046c3811af INITIAL-COMMANDS: install from rsc.eworm.de 2025-11-12 00:23:37 +01:00
Christian Hesse
543c4424e7 README: install from rsc.eworm.de 2025-11-12 00:23:02 +01:00
Christian Hesse
e2fea6eb1e contrib/Makefile: hide the hint on broken site 2025-11-12 00:11:16 +01:00
Christian Hesse
515edeaf44 contrib/notification: hint on possibly broken site 2025-11-12 00:11:16 +01:00
Christian Hesse
25e6780f2a contrib/logo-color: hint on possibly broken site 2025-11-12 00:11:16 +01:00
Christian Hesse
f273392d7d contrib/html: hide the hint on broken link 2025-11-12 00:01:55 +01:00
Christian Hesse
6be669632b doc/mod/notification-telegram: hint on possibly broken link 2025-11-11 23:59:56 +01:00
Christian Hesse
3b94878e0d README: add a sub-section for code hosting 2025-11-11 23:59:56 +01:00
Christian Hesse
e938ea8f0b README: add the url verbatim 2025-11-11 23:59:56 +01:00
Christian Hesse
9b34f60b89 general/style: make the blockquote darker 2025-11-11 23:59:56 +01:00
Christian Hesse
a94c72493a contrib/notification: add a head with eworm, QR code and caption 2025-11-11 23:59:56 +01:00
Christian Hesse
64b651b6d7 contrib/logo-color: add a head with eworm, QR code and caption 2025-11-11 23:59:56 +01:00
Christian Hesse
c9da2423aa contrib/html: add a head with eworm, QR code and caption 2025-11-11 23:59:56 +01:00
Christian Hesse
237e04c25d README: move the QR code 2025-11-11 23:59:56 +01:00
Christian Hesse
4b92dcd3ed Merge branch 'builtin-trust-store' into next 2025-11-11 23:59:56 +01:00
Christian Hesse
3fa0690b9d README: add a line break before command 2025-11-11 23:59:56 +01:00
Christian Hesse
41c349a04c doc/mod/notification-matrix: define certificate use 2025-11-11 23:59:56 +01:00
Christian Hesse
254a89886d fw-addr-lists.d/allow: use rsc.eworm.de in the list 2025-11-11 23:59:56 +01:00
Christian Hesse
5f1b17a644 CERTIFICATES: define certificate use 2025-11-11 23:59:56 +01:00
Christian Hesse
a8528bc02d fw-addr-lists.d/{allow,block}: use short url rsc.eworm.de 2025-11-11 23:59:56 +01:00
Christian Hesse
c273770f7d update-tunnelbroker: define certificate use 2025-11-11 23:59:56 +01:00
Christian Hesse
edb8ad9a2e Makefile: clean up and add phony targets 2025-11-11 23:59:56 +01:00
Christian Hesse
31a2bbbb4c telegram-chat: define certificate use 2025-11-11 23:59:56 +01:00
Christian Hesse
c0e4f411c2 global-functions: $ScriptInstallUpdate: extra actions on 'not found' only 2025-11-11 23:59:56 +01:00
Christian Hesse
6c2bf181fc netwatch-dns: define certificate use 2025-11-11 23:59:56 +01:00
Christian Hesse
e3cf008ec1 global-functions: $ScriptInstallUpdate: either or...
... but not both.
2025-11-11 23:59:56 +01:00
Christian Hesse
0cbc8dca74 mod/notification-telegram: define certificate use 2025-11-11 23:59:56 +01:00
Christian Hesse
1bdca31985 global-functions: $ScriptInstallUpdate: give hint on ignore
Fixes: https://github.com/eworm-de/routeros-scripts/issues/112
2025-11-11 23:59:56 +01:00
Christian Hesse
24aadcf02d mod/notification-ntfy: define certificate use 2025-11-11 23:59:56 +01:00
Christian Hesse
40a581e013 contrib/checksums.sh: output to stdout...
... and let the Makefile redirect.
2025-11-11 23:59:56 +01:00
Christian Hesse
85f3e1a5f4 fw-addr-lists: define certificate use 2025-11-11 23:59:56 +01:00
Christian Hesse
df970f3366 Merge branch 'contrib' into next 2025-11-11 23:59:56 +01:00
Christian Hesse
45ab635ba1 check-certificates: define certificate use 2025-11-11 23:59:56 +01:00
Christian Hesse
4ec1833ef8 contrib: introduce Makefile...
... and update references in links.
2025-11-11 23:59:56 +01:00
Christian Hesse
ee77f7d72d global-functions: $ScriptInstallUpdate: define certificate use 2025-11-11 23:59:56 +01:00
Christian Hesse
2e808141b8 contrib/logo-color: place screenshots below each other...
... not side by side.
2025-11-11 23:59:56 +01:00
Christian Hesse
ab29a3fb82 global-functions: $GetMacVendor: define certificate use 2025-11-11 23:59:56 +01:00
Christian Hesse
06d1bab537 contrib/logo-color: use relative reference in link
... without extra path elements.

This may break, depending on site.
2025-11-11 23:59:56 +01:00
Christian Hesse
e69605ac4d global-functions: $DownloadPackage: define certificate use 2025-11-11 23:59:56 +01:00
Christian Hesse
954c8e299f doc/mod/notification-telegram: use relative reference in link
This may break, depending on site.
2025-11-11 23:59:56 +01:00
Christian Hesse
959f0a257f global-functions: $CertificateAvailable: support new builtin-trust-store...
... which was introduced with RouterOS 7.21beta7.
2025-11-11 23:59:56 +01:00
Christian Hesse
a7de16b584 contrib/notification: format the values italic 2025-11-11 23:59:56 +01:00
Christian Hesse
7f2cdf67cb INITIAL-COMMANDS: support new builtin-trust-store...
... which was introduced with RouterOS 7.21beta7.
2025-11-11 23:59:56 +01:00
Christian Hesse
4b5333d971 contrib/notification: update date format 2025-11-11 23:59:56 +01:00
Christian Hesse
67551e58d8 README: support new builtin-trust-store...
... which was introduced with RouterOS 7.21beta7.
2025-11-11 23:59:56 +01:00
Christian Hesse
ee6c66327a contrib/{logo-color,notification}: add navigation structure 2025-11-11 23:59:56 +01:00
Christian Hesse
0a37b6c008 contrib/*: unify html code 2025-11-11 23:59:56 +01:00
26 changed files with 187 additions and 77 deletions

View file

@ -61,7 +61,7 @@ Import a certificate by CommonName
Running the function `$CertificateAvailable` with that name as parameter Running the function `$CertificateAvailable` with that name as parameter
makes sure the certificate is available in the device's store: makes sure the certificate is available in the device's store:
$CertificateAvailable "ISRG Root X2"; $CertificateAvailable "ISRG Root X2" "fetch";
If the certificate is actually available already nothing happens, and there If the certificate is actually available already nothing happens, and there
is no output. Otherwise the certificate is downloaded and imported. is no output. Otherwise the certificate is downloaded and imported.

View file

@ -17,13 +17,16 @@ Initial commands
Run the complete base installation: Run the complete base installation:
{ {
:local BaseUrl "https://git.eworm.de/cgit/routeros-scripts/plain/"; :local BaseUrl "https://rsc.eworm.de/main/";
:local CertCommonName "ISRG Root X2"; :local CertCommonName "ISRG Root X2";
:local CertFileName "ISRG-Root-X2.pem"; :local CertFileName "ISRG-Root-X2.pem";
:local CertFingerprint "69729b8e15a86efc177a57afb7171dfc64add28c2fca8cf1507e34453ccb1470"; :local CertFingerprint "69729b8e15a86efc177a57afb7171dfc64add28c2fca8cf1507e34453ccb1470";
:if (!(([ /certificate/settings/get ]->"builtin-trust-anchors") = "trusted" && \ :local CertSettings [ /certificate/settings/get ];
[[ :parse (":return [ :len [ /certificate/builtin/find where common-name=\"" . $CertCommonName . "\" ] ]") ]] > 0)) do={ :if (!((($CertSettings->"builtin-trust-anchors") = "trusted" || \
($CertSettings->"builtin-trust-store") ~ "fetch" || \
($CertSettings->"builtin-trust-store") = "all") && \
[[ :parse (":return [ :len [ /certificate/builtin/find where common-name=\"" . $CertCommonName . "\" ] ]") ]] > 0)) do={
:put "Importing certificate..."; :put "Importing certificate...";
/tool/fetch ($BaseUrl . "certs/" . $CertFileName) dst-path=$CertFileName as-value; /tool/fetch ($BaseUrl . "certs/" . $CertFileName) dst-path=$CertFileName as-value;
:delay 1s; :delay 1s;

View file

@ -2,18 +2,28 @@
# template scripts -> final scripts # template scripts -> final scripts
# markdown files -> html files # markdown files -> html files
CAPSMAN = $(wildcard *.capsman.rsc) ALL_RSC := $(wildcard *.rsc */*.rsc)
LOCAL = $(wildcard *.local.rsc) GEN_RSC := $(wildcard *.capsman.rsc *.local.rsc *.wifi.rsc)
WIFI = $(wildcard *.wifi.rsc)
MARKDOWN = $(wildcard *.md doc/*.md doc/mod/*.md) MARKDOWN := $(wildcard *.md doc/*.md doc/mod/*.md)
HTML = $(MARKDOWN:.md=.html) HTML := $(MARKDOWN:.md=.html)
all: $(CAPSMAN) $(LOCAL) $(WIFI) $(HTML) checksums.json .PHONY: all checksums docs rsc clean
all: checksums docs rsc
checksums: checksums.json
checksums.json: contrib/checksums.sh $(ALL_RSC)
contrib/checksums.sh > $@
docs: $(HTML)
%.html: %.md general/style.css contrib/html.sh contrib/html.sh.d/head.html %.html: %.md general/style.css contrib/html.sh contrib/html.sh.d/head.html
contrib/html.sh $< > $@ contrib/html.sh $< > $@
rsc: $(GEN_RSC)
%.capsman.rsc: %.template.rsc Makefile %.capsman.rsc: %.template.rsc Makefile
sed -e '/\/interface\/wifi\//d' -e '/\/interface\/wireless\//d' -e 's|%TEMPL%|.capsman|' \ sed -e '/\/interface\/wifi\//d' -e '/\/interface\/wireless\//d' -e 's|%TEMPL%|.capsman|' \
-e '/^# NOT \/caps-man\/ #$$/,/^# NOT \/caps-man\/ #$$/d' \ -e '/^# NOT \/caps-man\/ #$$/,/^# NOT \/caps-man\/ #$$/d' \
@ -32,8 +42,5 @@ all: $(CAPSMAN) $(LOCAL) $(WIFI) $(HTML) checksums.json
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \ -e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< $< > $@ < $< > $@
checksums.json: contrib/checksums.sh *.rsc */*.rsc
contrib/checksums.sh
clean: clean:
rm -f $(HTML) checksums.json rm -f $(HTML) checksums.json

View file

@ -77,14 +77,17 @@ download the certificates.
> 💡️ **Hint**: RouterOS 7.19 comes with a builtin certificate store. You > 💡️ **Hint**: RouterOS 7.19 comes with a builtin certificate store. You
> can skip the steps regarding certificate download and import and jump > can skip the steps regarding certificate download and import and jump
> to [installation of scripts](#installation-of-scripts) if you set the > to [installation of scripts](#installation-of-scripts) if you set the
> trust for these builtin trust anchors: > trust for these builtin trust anchors:
> `/certificate/settings/set builtin-trust-anchors=trusted;` > `/certificate/settings/set builtin-trust-anchors=trusted;`
> With RouterOS 7.21 the functionality was changed. Set this at minimum,
> but make sure not to drop other targets:
> `/certificate/settings/set builtin-trust-store=fetch;`
If you intend to download the scripts from a If you intend to download the scripts from a
different location (for example from github.com) install the corresponding different location (for example from github.com) install the corresponding
certificate chain. certificate chain.
/tool/fetch "https://git.eworm.de/cgit/routeros-scripts/plain/certs/ISRG-Root-X2.pem" dst-path="isrg-root-x2.pem"; /tool/fetch "https://rsc.eworm.de/main/certs/ISRG-Root-X2.pem" dst-path="isrg-root-x2.pem";
![screenshot: download certs](README.d/01-download-certs.avif) ![screenshot: download certs](README.d/01-download-certs.avif)
@ -122,7 +125,7 @@ date and time is set correctly!
Now let's download the main scripts and add them in configuration on the fly. Now let's download the main scripts and add them in configuration on the fly.
:foreach Script in={ "global-config"; "global-config-overlay"; "global-functions" } do={ /system/script/add name=$Script owner=$Script source=([ /tool/fetch check-certificate=yes-without-crl ("https://git.eworm.de/cgit/routeros-scripts/plain/" . $Script . ".rsc") output=user as-value]->"data"); }; :foreach Script in={ "global-config"; "global-config-overlay"; "global-functions" } do={ /system/script/add name=$Script owner=$Script source=([ /tool/fetch check-certificate=yes-without-crl ("https://rsc.eworm.de/main/" . $Script . ".rsc") output=user as-value]->"data"); };
![screenshot: import scripts](README.d/04-import-scripts.avif) ![screenshot: import scripts](README.d/04-import-scripts.avif)
@ -173,7 +176,7 @@ This last step is required when ever you make changes to your configuration.
> **Info**: It is recommended to edit the configuration using the command > **Info**: It is recommended to edit the configuration using the command
> line interface. If using Winbox on Windows OS, the line endings may be > line interface. If using Winbox on Windows OS, the line endings may be
> missing. To fix this run: > missing. To fix this run:
> `/system/script/set source=[ :tocrlf [ get global-config-overlay source ] ] global-config-overlay;` > `/system/script/set source=[ :tocrlf [ get global-config-overlay source ] ] global-config-overlay;`
Updating scripts Updating scripts
@ -401,14 +404,15 @@ immediately remove the link in question.
Upstream Upstream
-------- --------
[![upstream](README.d/upstream.png)](https://rsc.eworm.de/) [rsc.eworm.de](https://rsc.eworm.de/)
URL: [![upstream](general/qr-code.png)](https://rsc.eworm.de/)
[GitHub.com](https://github.com/eworm-de/routeros-scripts#routeros-scripts)
Mirror: ### Code hosting
[eworm.de](https://git.eworm.de/cgit/routeros-scripts/about/)
[GitLab.com](https://gitlab.com/eworm-de/routeros-scripts#routeros-scripts) * [eworm.de](https://git.eworm.de/cgit/routeros-scripts/about/)
* [GitHub.com](https://github.com/eworm-de/routeros-scripts#routeros-scripts)
* [GitLab.com](https://gitlab.com/eworm-de/routeros-scripts#routeros-scripts)
--- ---
[⬆️ Go back to top](#top) [⬆️ Go back to top](#top)

View file

@ -189,7 +189,7 @@
fingerprint!=[ :tostr ($CertVal->"fingerprint") ] expires-after>$CertRenewTime ]; fingerprint!=[ :tostr ($CertVal->"fingerprint") ] expires-after>$CertRenewTime ];
:local CertNewVal [ /certificate/get $CertNew ]; :local CertNewVal [ /certificate/get $CertNew ];
:if ([ $CertificateAvailable ([ $ParseKeyValueStore ($CertNewVal->"issuer") ]->"CN") ] = false) do={ :if ([ $CertificateAvailable ([ $ParseKeyValueStore ($CertNewVal->"issuer") ]->"CN") "fetch" ] = false) do={
$LogPrint warning $ScriptName ("The certificate chain is not available!"); $LogPrint warning $ScriptName ("The certificate chain is not available!");
} }

12
contrib/Makefile Normal file
View file

@ -0,0 +1,12 @@
# Makefile
HTML := $(wildcard *.html)
.PHONY: all docs
all: docs
docs: $(HTML)
sed -i -e '/href=/s|\.md|\.html|' \
-e '/blockquote/s|/\*! display \*/|display: none;|' \
$(HTML)

View file

@ -6,4 +6,4 @@ set -e
md5sum $(find -name '*.rsc' | sort) | \ md5sum $(find -name '*.rsc' | sort) | \
sed -e "s| \./||" -e 's|.rsc$||' | \ sed -e "s| \./||" -e 's|.rsc$||' | \
jq --raw-input --null-input '[ inputs | split (" ") | { (.[1]): (.[0]) }] | add' > 'checksums.json' jq --raw-input --null-input '[ inputs | split (" ") | { (.[1]): (.[0]) }] | add'

View file

@ -7,9 +7,12 @@ sed \
-e "s|__TITLE__|$(head -n1 "${1}")|" \ -e "s|__TITLE__|$(head -n1 "${1}")|" \
-e "s|__STYLE__|$(realpath --relative-to="${RELTO}" general/style.css)|" \ -e "s|__STYLE__|$(realpath --relative-to="${RELTO}" general/style.css)|" \
-e "s|__LOGO__|$(realpath --relative-to="${RELTO}" logo.png)|" \ -e "s|__LOGO__|$(realpath --relative-to="${RELTO}" logo.png)|" \
-e "s|__EWORM__|$(realpath --relative-to="${RELTO}" general/eworm-meadow.avif)|" \
-e "s|__QR_CODE__|$(realpath --relative-to="${RELTO}" general/qr-code.png)|" \
< "${0}.d/head.html" < "${0}.d/head.html"
markdown -f toc,idanchor "${1}" | sed \ markdown -f toc,idanchor "${1}" | sed \
-e 's/href="\([-_\./[:alnum:]]*\)\.md\(#[-[:alnum:]]*\)\?"/href="\1.html\2"/g' \ -e 's/href="\([-_\./[:alnum:]]*\)\.md\(#[-[:alnum:]]*\)\?"/href="\1.html\2"/g' \
-e '/<h[1234] /s| id="\(.*\)">| id="\L\1">|' \ -e '/<h[1234] /s| id="\(.*\)">| id="\L\1">|' \
-e '/<h[1234] /s|-2c-||g' -e '/<h[1234] /s|--26-amp-3b-||g' -e '/<h[1234] /s|-2c-||g' -e '/<h[1234] /s|--26-amp-3b-||g' \
-e '/The above link may be broken on code hosting sites/s|blockquote|blockquote style="display: none;"|'
printf '</body></html>' printf '</body></html>'

View file

@ -1,6 +1,17 @@
<!DOCTYPE html><html lang="en"> <!DOCTYPE html><html lang="en">
<head><title>RouterOS Scripts :: __TITLE__</title> <head><meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>RouterOS Scripts :: __TITLE__</title>
<link rel="stylesheet" type="text/css" href="__STYLE__"> <link rel="stylesheet" type="text/css" href="__STYLE__">
<link rel="icon" type="image/png" href="__LOGO__"> <link rel="icon" type="image/png" href="__LOGO__">
</head><body> </head><body>
<table>
<tr>
<td rowspan=2><img src="__EWORM__" alt="eworm on meadow" /></td>
<td rowspan=2><img src="__QR_CODE__" alt="QR code: rsc.eworm.de" /></td>
<td class="head-top">RouterOS Scripts</td>
</tr>
<tr>
<td class="head-bottom">a collection of scripts for MikroTik RouterOS</td>
</tr>
</table>
<hr />

View file

@ -1,14 +1,30 @@
<!DOCTYPE html> <!DOCTYPE html><html lang="en">
<html lang="en"> <head><meta http-equiv="content-type" content="text/html; charset=UTF-8">
<head> <title>RouterOS Scripts :: Logo Color Changer</title>
<meta charset="UTF-8">
<title>RouterOS-Scripts Logo Color Changer</title>
<link rel="stylesheet" type="text/css" href="../general/style.css"> <link rel="stylesheet" type="text/css" href="../general/style.css">
<link rel="icon" type="image/png" href="../logo.png">
<script src="logo-color.d/script.js"></script> <script src="logo-color.d/script.js"></script>
</head> </head><body>
<body> <table>
<tr>
<td rowspan=2><img src="../general/eworm-meadow.avif" alt="eworm on meadow" /></td>
<td rowspan=2><img src="../general/qr-code.png" alt="QR code: rsc.eworm.de" /></td>
<td class="head-top">RouterOS Scripts</td>
</tr>
<tr>
<td class="head-bottom">a collection of scripts for MikroTik RouterOS</td>
</tr>
</table>
<hr />
<h1>RouterOS-Scripts Logo Color Changer</h1> <h1>Logo Color Changer</h1>
<p><a href="../README.md">⬅️ Go back to main README</a></p>
<blockquote style="/*! display */"><p>💡️ <strong>Hint</strong>: This site or links
on it may be broken on code hosting sites. Use
<a href="https://rsc.eworm.de/main/contrib/logo-color.html">Logo Color Changer</a>
instead.</p></blockquote>
<p>You want the logo for your own notifications? But you joined the <p>You want the logo for your own notifications? But you joined the
<a href="https://t.me/routeros_scripts">Telegram Group</a> and want <a href="https://t.me/routeros_scripts">Telegram Group</a> and want
@ -24,17 +40,20 @@ something that differentiates? Color it!</p>
<p>Then right-click, click "<i>Take Screenshot</i>" and finally select the <p>Then right-click, click "<i>Take Screenshot</i>" and finally select the
logo and download it.</p> logo and download it.</p>
<p><img src="logo-color.d/browser-01.avif" width=533 height=482 alt="Screenshot Browser 01"> <p><img src="logo-color.d/browser-01.avif" width=533 height=482 alt="Screenshot Browser 01"></p>
<img src="logo-color.d/browser-02.avif" width=533 height=482 alt="Screenshot Browser 02"> <p><img src="logo-color.d/browser-02.avif" width=533 height=482 alt="Screenshot Browser 02"></p>
<img src="logo-color.d/browser-03.avif" width=533 height=482 alt="Screenshot Browser 03"></p> <p><img src="logo-color.d/browser-03.avif" width=533 height=482 alt="Screenshot Browser 03"></p>
<p>(This example is with <p>(This example is with
<a href="https://www.mozilla.org/de/firefox/new/">Firefox</a>. The workflow <a href="https://www.mozilla.org/de/firefox/new/">Firefox</a>. The workflow
for other browsers may differ.)</p> for other browsers may differ.)</p>
<p>See how to <p>See how to
<a href="../../about/doc/mod/notification-telegram.md#set-a-profile-photo">Set <a href="../doc/mod/notification-telegram.md#set-a-profile-photo">Set
a profile photo</a> for your Telegram bot.</p> a profile photo</a> for your Telegram bot.</p>
</body> <hr />
</html>
<p><a href="../README.md">⬅️ Go back to main README</a><br/>
<a href="#top">⬆️ Go back to top</a></p>
</body></html>

View file

@ -1,14 +1,30 @@
<!DOCTYPE html> <!DOCTYPE html><html lang="en">
<html lang="en"> <head><meta http-equiv="content-type" content="text/html; charset=UTF-8">
<head> <title>RouterOS Scripts :: Notification Generator</title>
<meta charset="UTF-8">
<title>RouterOS-Scripts Notification Generator</title>
<link rel="stylesheet" type="text/css" href="../general/style.css"> <link rel="stylesheet" type="text/css" href="../general/style.css">
<link rel="icon" type="image/png" href="../logo.png">
<script src="notification.d/script.js"></script> <script src="notification.d/script.js"></script>
</head> </head><body>
<body> <table>
<tr>
<td rowspan=2><img src="../general/eworm-meadow.avif" alt="eworm on meadow" /></td>
<td rowspan=2><img src="../general/qr-code.png" alt="QR code: rsc.eworm.de" /></td>
<td class="head-top">RouterOS Scripts</td>
</tr>
<tr>
<td class="head-bottom">a collection of scripts for MikroTik RouterOS</td>
</tr>
</table>
<hr />
<h1>RouterOS-Scripts Notification Generator</h1> <h1>Notification Generator</h1>
<p><a href="../README.md">⬅️ Go back to main README</a></p>
<blockquote style="/*! display */"><p>💡️ <strong>Hint</strong>: This site or links
on it may be broken on code hosting sites. Use
<a href="https://rsc.eworm.de/main/contrib/notification.html">Notification Generator</a>
instead.</p></blockquote>
<div class="notification"> <div class="notification">
<img src="../logo.svg" alt="logo" class="logo" width=48 height=48> <img src="../logo.svg" alt="logo" class="logo" width=48 height=48>
@ -16,8 +32,8 @@
<p id="heading" class="heading">[<span id="hostname">MikroTik</span>] <span id="subject"> Subject</span></p> <p id="heading" class="heading">[<span id="hostname">MikroTik</span>] <span id="subject"> Subject</span></p>
<pre id="message">Message</pre> <pre id="message">Message</pre>
<p id="link" class="hint">🔗 <span id="link-text" class="link">https://eworm.de/</span></p> <p id="link" class="hint">🔗 <span id="link-text" class="link">https://eworm.de/</span></p>
<p id="queued" class="hint">⏰ This message was queued since <span id="queued-since">oct/18/2022 18:30:48</span> and may be obsolete.</p> <p id="queued" class="hint">⏰ This message was queued since <i><span id="queued-since">2025-10-29 16:06:18</span></i> and may be obsolete.</p>
<p id="cut" class="hint">✂️ The message was too long and has been truncated, cut off <span id="cut-percent">13</span>%!</p> <p id="cut" class="hint">✂️ The message was too long and has been truncated, cut off <i><span id="cut-percent">13</span>%</i>!</p>
</div> </div>
</div> </div>
@ -25,11 +41,14 @@
<p>Subject: <input type="text" size=50 value=" Subject" onchange="update(this, 'subject')"></p> <p>Subject: <input type="text" size=50 value=" Subject" onchange="update(this, 'subject')"></p>
<p>Message: <textarea id="w3review" name="w3review" rows="4" cols="50" onchange="update(this, 'message')">Message</textarea></p> <p>Message: <textarea id="w3review" name="w3review" rows="4" cols="50" onchange="update(this, 'message')">Message</textarea></p>
<p><input type="checkbox" onclick="visible(this, 'link')"> Show link: <input type="text" value="https://eworm.de/" onchange="update(this, 'link-text')"></p> <p><input type="checkbox" onclick="visible(this, 'link')"> Show link: <input type="text" value="https://eworm.de/" onchange="update(this, 'link-text')"></p>
<p><input type="checkbox" onclick="visible(this, 'queued')"> Queued since <input type="text" value="oct/18/2022 18:30:48" onchange="update(this, 'queued-since')"></p> <p><input type="checkbox" onclick="visible(this, 'queued')"> Queued since <input type="text" value="2025-10-29 16:06:18" onchange="update(this, 'queued-since')"></p>
<p><input type="checkbox" onclick="visible(this, 'cut')"> Cut-off with <input type="number" min=1 max=99 value=13 onchange="update(this, 'cut-percent')"> percent</p> <p><input type="checkbox" onclick="visible(this, 'cut')"> Cut-off with <input type="number" min=1 max=99 value=13 onchange="update(this, 'cut-percent')"> percent</p>
<p>Then right-click, click "<i>Take Screenshot</i>" and finally select the <p>Then right-click, click "<i>Take Screenshot</i>" and finally select the
notification and download it.</p> notification and download it.</p>
</body> <hr />
</html>
<p><a href="../README.md">⬅️ Go back to main README</a><br/>
<a href="#top">⬆️ Go back to top</a></p>
</body></html>

View file

@ -49,7 +49,7 @@ your server in device's certificate store.
The example below is for `matrix.org`, which uses a trust chain from *Google The example below is for `matrix.org`, which uses a trust chain from *Google
Trust Services*. Run this to import the required certificate: Trust Services*. Run this to import the required certificate:
$CertificateAvailable "GTS Root R4"; $CertificateAvailable "GTS Root R4" "fetch";
Replace the CA certificate name with what ever is needed for your server. Replace the CA certificate name with what ever is needed for your server.
You may want to find the You may want to find the

View file

@ -106,10 +106,13 @@ chat with [BotFather ↗️](https://t.me/BotFather) and set it there.
![set profile photo](notification-telegram.d/setuserpic.avif) ![set profile photo](notification-telegram.d/setuserpic.avif)
Have a look at my Have a look at my [Logo Color Changer](../../contrib/logo-color.html)
[RouterOS-Scripts Logo Color Changer](https://git.eworm.de/cgit/routeros-scripts/plain/contrib/logo-color.html)
to create a colored version of this scripts' logo. to create a colored version of this scripts' logo.
> 💡️ **Hint**: The above link may be broken on code hosting sites.
> Use [Logo Color Changer](https://rsc.eworm.de/main/contrib/logo-color.html)
> instead.
See also See also
-------- --------

View file

@ -48,7 +48,7 @@ Usage and invocation
The function `$ScriptRunOnce` expects an URL (or name if The function `$ScriptRunOnce` expects an URL (or name if
`ScriptRunOnceBaseUrl` is given) pointing to a script as parameter. `ScriptRunOnceBaseUrl` is given) pointing to a script as parameter.
$ScriptRunOnce https://git.eworm.de/cgit/routeros-scripts/plain/doc/mod/scriptrunonce.d/hello-world.rsc; $ScriptRunOnce https://rsc.eworm.de/main/doc/mod/scriptrunonce.d/hello-world.rsc;
![ScriptRunOnce](scriptrunonce.d/scriptrunonce.avif) ![ScriptRunOnce](scriptrunonce.d/scriptrunonce.avif)

View file

@ -1,3 +1,3 @@
# an ip address list for use with fw-addr-lists script # an ip address list for use with fw-addr-lists script
# https://git.eworm.de/cgit/routeros-scripts/about/doc/fw-addr-lists.md # https://rsc.eworm.de/doc/fw-addr-lists.md
git.eworm.de rsc.eworm.de

View file

@ -1,5 +1,5 @@
# an ip address list for use with fw-addr-lists script # an ip address list for use with fw-addr-lists script
# https://git.eworm.de/cgit/routeros-scripts/about/doc/fw-addr-lists.md # https://rsc.eworm.de/doc/fw-addr-lists.md
# example.net # example.net
93.184.216.34 93.184.216.34

View file

@ -74,7 +74,7 @@
:if ([ :len ($List->"cert") ] > 0) do={ :if ([ :len ($List->"cert") ] > 0) do={
:set CheckCertificate true; :set CheckCertificate true;
:if ([ $CertificateAvailable ($List->"cert") ] = false) do={ :if ([ $CertificateAvailable ($List->"cert") "fetch" ] = false) do={
$LogPrint warning $ScriptName ("Downloading required certificate (" . $FwListName . \ $LogPrint warning $ScriptName ("Downloading required certificate (" . $FwListName . \
" / " . $List->"url" . ") failed, trying anyway."); " / " . $List->"url" . ") failed, trying anyway.");
} }

BIN
general/eworm-meadow.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View file

Before

Width:  |  Height:  |  Size: 207 B

After

Width:  |  Height:  |  Size: 207 B

Before After
Before After

View file

@ -18,7 +18,7 @@ a:hover {
blockquote { blockquote {
border-left: 4px solid #ccc; border-left: 4px solid #ccc;
padding: 0 10px; padding: 0 10px;
color: #777; color: #555;
} }
code { code {
margin: 0 2px; margin: 0 2px;
@ -68,6 +68,18 @@ pre code {
span.link { span.link {
color: #863600; color: #863600;
} }
td.head-top {
height: 48px;
vertical-align: bottom;
font-size: 250%;
font-weight: bold;
}
td.head-bottom {
height: 48px;
vertical-align: top;
font-size: 125%;
color: #555;
}
@media only screen and (orientation: landscape) { @media only screen and (orientation: landscape) {
body { body {
margin-left: 10vw; margin-left: 10vw;

View file

@ -106,11 +106,15 @@
# check and download required certificate # check and download required certificate
:set CertificateAvailable do={ :set CertificateAvailable do={
:local CommonName [ :tostr $1 ]; :local CommonName [ :tostr $1 ];
:local UseFor [ :tostr $2 ];
:global CertificateDownload; :global CertificateDownload;
:global EitherOr;
:global LogPrint; :global LogPrint;
:global ParseKeyValueStore; :global ParseKeyValueStore;
:set UseFor [ $EitherOr $UseFor "undefined" ];
:if ([ /system/resource/get free-hdd-space ] < 8388608 && \ :if ([ /system/resource/get free-hdd-space ] < 8388608 && \
[ /certificate/settings/get crl-download ] = true && \ [ /certificate/settings/get crl-download ] = true && \
[ /certificate/settings/get crl-store ] = "system") do={ [ /certificate/settings/get crl-store ] = "system") do={
@ -123,7 +127,10 @@
:return false; :return false;
} }
:if (([ /certificate/settings/get ]->"builtin-trust-anchors") = "trusted" && \ :local CertSettings [ /certificate/settings/get ];
:if ((($CertSettings->"builtin-trust-anchors") = "trusted" || \
($CertSettings->"builtin-trust-store") ~ $UseFor || \
($CertSettings->"builtin-trust-store") = "all") && \
[[ :parse (":return [ :len [ /certificate/builtin/find where common-name=\"" . $CommonName . "\" ] ]") ]] > 0) do={ [[ :parse (":return [ :len [ /certificate/builtin/find where common-name=\"" . $CommonName . "\" ] ]") ]] > 0) do={
:return true; :return true;
} }
@ -397,7 +404,7 @@
:return true; :return true;
} }
:if ([ $CertificateAvailable "ISRG Root X1" ] = false) do={ :if ([ $CertificateAvailable "ISRG Root X1" "fetch" ] = false) do={
$LogPrint error $0 ("Downloading required certificate failed."); $LogPrint error $0 ("Downloading required certificate failed.");
:return false; :return false;
} }
@ -633,7 +640,7 @@
} }
:do { :do {
:if ([ $CertificateAvailable "GTS Root R4" ] = false) do={ :if ([ $CertificateAvailable "GTS Root R4" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading required certificate failed."); $LogPrint warning $0 ("Downloading required certificate failed.");
:error false; :error false;
} }
@ -1241,7 +1248,7 @@
:global SymbolForNotification; :global SymbolForNotification;
:global ValidateSyntax; :global ValidateSyntax;
:if ([ $CertificateAvailable "ISRG Root X2" ] = false) do={ :if ([ $CertificateAvailable "ISRG Root X2" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading certificate failed, trying without."); $LogPrint warning $0 ("Downloading certificate failed, trying without.");
} }
@ -1292,7 +1299,7 @@
} }
:if ([ :len ($ScriptInfo->"certificate") ] > 0) do={ :if ([ :len ($ScriptInfo->"certificate") ] > 0) do={
:if ([ $CertificateAvailable ($ScriptInfo->"certificate") ] = false) do={ :if ([ $CertificateAvailable ($ScriptInfo->"certificate") "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading certificate failed, trying without."); $LogPrint warning $0 ("Downloading certificate failed, trying without.");
} }
} }
@ -1309,9 +1316,19 @@
} }
} do={ } do={
$LogPrint warning $0 ("Failed fetching script '" . $ScriptVal->"name" . "': " . $Err); $LogPrint warning $0 ("Failed fetching script '" . $ScriptVal->"name" . "': " . $Err);
:if ($Err != "Fetch failed with status 404") do={
:error false;
}
:if ($ScriptVal->"source" = "#!rsc by RouterOS\n") do={ :if ($ScriptVal->"source" = "#!rsc by RouterOS\n") do={
$LogPrint warning $0 ("Removing dummy. Typo on installation?"); $LogPrint warning $0 ("Removing dummy. Typo on installation?");
/system/script/remove $Script; /system/script/remove $Script;
:error false;
}
:if ([ :len ($ScriptInfo->"base-url") ] = 0 && [ :len ($ScriptInfo->"url-suffix") ] = 0 && \
[ :len $CheckSum ] = 0) do={
$LogPrintOnce warning $0 \
("Added the script manually? Skip updates with 'ignore=true' in comment.");
} }
:error false; :error false;
} }

View file

@ -109,7 +109,7 @@
:onerror Err { :onerror Err {
:if ($Server = "ntfy.sh") do={ :if ($Server = "ntfy.sh") do={
:if ([ $CertificateAvailable "ISRG Root X1" ] = false) do={ :if ([ $CertificateAvailable "ISRG Root X1" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading required certificate failed."); $LogPrint warning $0 ("Downloading required certificate failed.");
:error false; :error false;
} }

View file

@ -30,7 +30,7 @@
:return false; :return false;
} }
:if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading required certificate failed."); $LogPrint warning $0 ("Downloading required certificate failed.");
:return false; :return false;
} }
@ -72,7 +72,7 @@
:global CertificateAvailable; :global CertificateAvailable;
:global LogPrint; :global LogPrint;
:if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading required certificate failed."); $LogPrint warning $0 ("Downloading required certificate failed.");
:return false; :return false;
} }
@ -197,7 +197,7 @@
"&reply_to_message_id=" . ($Notification->"replyto") . "&message_thread_id=" . $ThreadId . \ "&reply_to_message_id=" . ($Notification->"replyto") . "&message_thread_id=" . $ThreadId . \
"&disable_web_page_preview=true&parse_mode=MarkdownV2"); "&disable_web_page_preview=true&parse_mode=MarkdownV2");
:onerror Err { :onerror Err {
:if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading required certificate failed."); $LogPrint warning $0 ("Downloading required certificate failed.");
:error false; :error false;
} }

View file

@ -112,7 +112,7 @@
:foreach DohServer in=$DohServers do={ :foreach DohServer in=$DohServers do={
:if ([ :len ($DohServer->"doh-cert") ] > 0) do={ :if ([ :len ($DohServer->"doh-cert") ] > 0) do={
:if ([ $CertificateAvailable ($DohServer->"doh-cert") ] = false) do={ :if ([ $CertificateAvailable ($DohServer->"doh-cert") "dns" ] = false) do={
$LogPrint warning $ScriptName ("Downloading certificate failed, trying without."); $LogPrint warning $ScriptName ("Downloading certificate failed, trying without.");
} }
} }

View file

@ -61,7 +61,7 @@
:set TelegramRandomDelay 0; :set TelegramRandomDelay 0;
} }
:if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={
$LogPrint warning $ScriptName ("Downloading required certificate failed."); $LogPrint warning $ScriptName ("Downloading required certificate failed.");
:set ExitOK true; :set ExitOK true;
:error false; :error false;

View file

@ -28,7 +28,7 @@
:error false; :error false;
} }
:if ([ $CertificateAvailable "Starfield Root Certificate Authority - G2" ] = false) do={ :if ([ $CertificateAvailable "Starfield Root Certificate Authority - G2" "fetch" ] = false) do={
$LogPrint error $ScriptName ("Downloading required certificate failed."); $LogPrint error $ScriptName ("Downloading required certificate failed.");
:set ExitOK true; :set ExitOK true;
:error false; :error false;