Compare commits

...

68 commits

Author SHA1 Message Date
Christian Hesse
d7f9f3eade contrib/static-html: split off from Makefile 2025-11-17 13:20:05 +01:00
Christian Hesse
17e7deee16 contrib/html: simplify handling of relative paths 2025-11-17 13:09:58 +01:00
Christian Hesse
626f41427a general/clipboard: add a visual feedback 2025-11-17 12:28:59 +01:00
Christian Hesse
959d4c1eb2 general/style: add a "📋 Copy!" hint to code blocks 2025-11-17 12:28:59 +01:00
Christian Hesse
d44ea0d566 contrib/html: support click on code block to copy to clipboard 2025-11-17 12:28:59 +01:00
Christian Hesse
7b55ae482e global-functions: add and fix global scheduler automatically...
... and also adjust README and INITIAL-COMMANDS.
2025-11-17 12:28:59 +01:00
Christian Hesse
450fe6ab9b contrib/commitinfo: support updating the commit info 2025-11-17 12:28:59 +01:00
Christian Hesse
34c8b7bd80 global-functions: $FetchUserAgentStr: add commit info in user agent string 2025-11-17 12:28:59 +01:00
Christian Hesse
bebfd40f27 Merge branch 'rsc-eworm-de' into next 2025-11-17 12:28:59 +01:00
Christian Hesse
8692119e6a Merge branch 'contrib-template' into next 2025-11-17 12:28:59 +01:00
Christian Hesse
6fb11ff6fc doc/mod/scriptrunonce: get script from rsc.eworm.de 2025-11-17 12:28:59 +01:00
Christian Hesse
e66e213e83 contrib/logo-color: drop width & height properties for images 2025-11-17 12:28:59 +01:00
Christian Hesse
8f21763a73 contrib/template-wifi: split off from Makefile 2025-11-17 12:28:59 +01:00
Christian Hesse
49a7804d10 INITIAL-COMMANDS: install from rsc.eworm.de 2025-11-17 12:28:59 +01:00
Christian Hesse
6f25f4e78b contrib/logo-color: place screenshots below each other...
... not side by side.
2025-11-17 12:28:59 +01:00
Christian Hesse
3ad21c8f92 contrib/template-local: split off from Makefile 2025-11-17 12:28:59 +01:00
Christian Hesse
aae002e4d9 README: install from rsc.eworm.de 2025-11-17 12:28:59 +01:00
Christian Hesse
53966a376f general/style: make the blockquote darker 2025-11-17 12:28:59 +01:00
Christian Hesse
1f72b6d2cf contrib/template-capsman: split off from Makefile 2025-11-17 12:28:59 +01:00
Christian Hesse
f39b9271a2 fw-addr-lists.d/allow: use rsc.eworm.de in the list 2025-11-17 12:28:59 +01:00
Christian Hesse
68862ca59c Merge branch 'contrib-html-head-foot' into next 2025-11-17 12:28:59 +01:00
Christian Hesse
5e72f79ded fw-addr-lists.d/{allow,block}: use short url rsc.eworm.de 2025-11-17 12:28:59 +01:00
Christian Hesse
97722cb8ec Makefile: clean up and add phony targets 2025-11-17 12:28:59 +01:00
Christian Hesse
b608f12edc contrib/html: add a footer 2025-11-17 12:28:59 +01:00
Christian Hesse
4624f787a1 Merge branch 'contrib-html' into next 2025-11-17 12:28:59 +01:00
Christian Hesse
8af3c2db16 contrib/notification: add a head with eworm, QR code and caption 2025-11-17 12:28:59 +01:00
Christian Hesse
558a6de6d8 README: add a sub-section for code hosting 2025-11-17 12:28:59 +01:00
Christian Hesse
406f4492fd contrib/Makefile: hide the hint on broken site 2025-11-17 12:28:59 +01:00
Christian Hesse
0f2e843fe3 contrib/logo-color: add a head with eworm, QR code and caption 2025-11-17 12:28:59 +01:00
Christian Hesse
c2abc8cc22 README: add the upstream url verbatim 2025-11-17 12:28:59 +01:00
Christian Hesse
0822d457f5 contrib/notification: hint on possibly broken site 2025-11-17 12:28:59 +01:00
Christian Hesse
66d3dba986 contrib/html: add a head with eworm, QR code and caption 2025-11-17 12:28:59 +01:00
Christian Hesse
bcfd75a3ce README: move the QR code 2025-11-17 12:28:59 +01:00
Christian Hesse
56da7da9af contrib/logo-color: hint on possibly broken site 2025-11-17 12:28:59 +01:00
Christian Hesse
c2543d0c11 Merge branch 'builtin-trust-store' into next 2025-11-17 12:28:59 +01:00
Christian Hesse
6cd9eb3eb6 contrib/html: hide the hint on broken link 2025-11-17 12:28:59 +01:00
Christian Hesse
98136a380b mod/notification-email: remove schedule with find...
... as a race condition could occur and the scheduler is already gone.
2025-11-17 12:28:59 +01:00
Christian Hesse
1d0662921b doc/mod/notification-matrix: define certificate use 2025-11-17 12:28:59 +01:00
Christian Hesse
c9b2b8b29f doc/mod/notification-telegram: hint on possibly broken link 2025-11-17 12:28:59 +01:00
Christian Hesse
31fa66b561 CERTIFICATES: define certificate use 2025-11-17 12:28:59 +01:00
Christian Hesse
2816e95f13 contrib: introduce Makefile...
... and update references in links.
2025-11-17 12:28:59 +01:00
Christian Hesse
9f8efb8b7c update-tunnelbroker: define certificate use 2025-11-17 12:28:59 +01:00
Christian Hesse
cd637649ac contrib/logo-color: use relative reference in link
... without extra path elements.

This may break, depending on site.
2025-11-17 12:28:59 +01:00
Christian Hesse
863073a772 telegram-chat: define certificate use 2025-11-17 12:28:59 +01:00
Christian Hesse
d8b7e978c2 doc/mod/notification-telegram: use relative reference in link
This may break, depending on site.
2025-11-17 12:28:59 +01:00
Christian Hesse
5e3db518ff netwatch-dns: define certificate use 2025-11-17 12:28:59 +01:00
Christian Hesse
2fe48380ef contrib/notification: format the values italic 2025-11-17 12:28:59 +01:00
Christian Hesse
5556b4bb67 mod/notification-telegram: define certificate use 2025-11-17 12:28:59 +01:00
Christian Hesse
1d9d90cd40 contrib/notification: update date format 2025-11-17 12:28:59 +01:00
Christian Hesse
f5a3742ae2 mod/notification-ntfy: define certificate use 2025-11-17 12:28:59 +01:00
Christian Hesse
21f16fded8 contrib/{logo-color,notification}: add navigation structure 2025-11-17 12:28:59 +01:00
Christian Hesse
fd6730e244 fw-addr-lists: define certificate use 2025-11-17 12:28:59 +01:00
Christian Hesse
5890cdda02 contrib/*: unify html code 2025-11-17 12:28:59 +01:00
Christian Hesse
15df46818a check-certificates: define certificate use 2025-11-17 12:28:59 +01:00
Christian Hesse
ed5a2712ad contrib/html: drop ampersand, comma, dash & tick from id/anchor 2025-11-17 12:28:59 +01:00
Christian Hesse
b83c08fdd0 global-functions: $ScriptInstallUpdate: define certificate use 2025-11-17 12:28:59 +01:00
Christian Hesse
c2a863da2b contrib/html: properly handle anchors 2025-11-17 12:28:59 +01:00
Christian Hesse
569a53babc global-functions: $GetMacVendor: define certificate use 2025-11-17 12:28:59 +01:00
Christian Hesse
dc879b6798 contrib/html: link the logo with relative path 2025-11-17 12:28:59 +01:00
Christian Hesse
884c51a850 global-functions: $DownloadPackage: define certificate use 2025-11-17 12:28:59 +01:00
Christian Hesse
843f6b41f6 contrib/html: increase default line height 2025-11-17 12:28:59 +01:00
Christian Hesse
36f4fcaac9 global-functions: $CertificateAvailable: support new builtin-trust-store...
... which was introduced with RouterOS 7.21beta7.
2025-11-17 12:28:59 +01:00
Christian Hesse
ed3d42e84f contrib/html: add a margin on left and right...
... for windows in landscape (wider than high). Also make the
notification float right for landscape only.
2025-11-17 12:28:59 +01:00
Christian Hesse
a04f96e6ed INITIAL-COMMANDS: support new builtin-trust-store...
... which was introduced with RouterOS 7.21beta7.
2025-11-17 12:28:59 +01:00
Christian Hesse
213d320545 contrib/html: include stylesheet via link 2025-11-17 12:28:59 +01:00
Christian Hesse
1ec3c0ed7c README: support new builtin-trust-store...
... which was introduced with RouterOS 7.21beta7.
2025-11-17 12:28:59 +01:00
Christian Hesse
b0888aba7c contrib/{logo-color,notification}: use a single style 2025-11-17 12:28:59 +01:00
Christian Hesse
79b49ab2ab contrib/html: add empty lines...
... for easier rebasing.
2025-11-17 12:28:59 +01:00
38 changed files with 366 additions and 155 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;
@ -42,9 +45,6 @@ Run the complete base installation:
}; };
:put "Loading configuration and functions..."; :put "Loading configuration and functions...";
/system/script { run global-config; run global-functions; }; /system/script { run global-config; run global-functions; };
:put "Scheduling to load configuration and functions...";
/system/scheduler/remove [ find where name="global-scripts" ];
/system/scheduler/add name="global-scripts" start-time=startup on-event="/system/script { run global-config; run global-functions; }";
:if ([ :len [ /certificate/find where fingerprint=$CertFingerprint ] ] > 0) do={ :if ([ :len [ /certificate/find where fingerprint=$CertFingerprint ] ] > 0) do={
:put "Renaming certificate by its common-name..."; :put "Renaming certificate by its common-name...";
:global CertificateNameByCN; :global CertificateNameByCN;

View file

@ -2,38 +2,44 @@
# 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 DATE ?= $(shell date --rfc-email)
VERSION ?= $(shell git symbolic-ref --short HEAD 2>/dev/null)/$(shell git rev-list --count HEAD 2>/dev/null)/$(shell git rev-parse --short=8 HEAD 2>/dev/null)
export DATE VERSION
%.html: %.md contrib/html.sh contrib/html.sh.d/head.html .PHONY: all checksums commitinfo docs rsc clean
all: checksums docs rsc
checksums: checksums.json
checksums.json: contrib/checksums.sh $(ALL_RSC)
contrib/checksums.sh > $@
commitinfo: global-functions.rsc
contrib/commitinfo.sh $< > $<~
mv $<~ $<
docs: $(HTML)
%.html: %.md general/style.css contrib/html.sh contrib/html.sh.d/head.html contrib/html.sh.d/foot.html
contrib/html.sh $< > $@ contrib/html.sh $< > $@
%.capsman.rsc: %.template.rsc Makefile rsc: $(GEN_RSC)
sed -e '/\/interface\/wifi\//d' -e '/\/interface\/wireless\//d' -e 's|%TEMPL%|.capsman|' \
-e '/^# NOT \/caps-man\/ #$$/,/^# NOT \/caps-man\/ #$$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< $< > $@
%.local.rsc: %.template.rsc Makefile %.capsman.rsc: %.template.rsc contrib/template-capsman.sh
sed -e '/\/caps-man\//d' -e '/\/interface\/wifi\//d' -e 's|%TEMPL%|.local|' \ contrib/template-capsman.sh $< > $@
-e '/^# NOT \/interface\/wireless\/ #$$/,/^# NOT \/interface\/wireless\/ #$$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< $< > $@
%.wifi.rsc: %.template.rsc Makefile %.local.rsc: %.template.rsc contrib/template-local.sh
sed -e '/\/caps-man\//d' -e '/\/interface\/wireless\//d' -e 's|%TEMPL%|.wifi|' \ contrib/template-local.sh $< > $@
-e '/^# NOT \/interface\/wifi\/ #$$/,/^# NOT \/interface\/wifi\/ #$$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< $< > $@
checksums.json: contrib/checksums.sh *.rsc */*.rsc %.wifi.rsc: %.template.rsc contrib/template-wifi.sh
contrib/checksums.sh > $@ contrib/template-wifi.sh $< > $@
clean: clean:
rm -f $(HTML) checksums.json rm -f $(HTML) checksums.json

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -79,12 +79,15 @@ download the certificates.
> 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,16 +125,16 @@ 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)
And finally load configuration and functions and add the scheduler. And finally run configuration and functions. This will also add the
scheduler for loading at system startup automatically.
/system/script { run global-config; run global-functions; }; /system/script { run global-config; run global-functions; };
/system/scheduler/add name="global-scripts" start-time=startup on-event="/system/script { run global-config; run global-functions; }";
![screenshot: run and schedule scripts](README.d/05-run-and-schedule-scripts.avif) ![screenshot: run scripts](README.d/05-run-scripts.avif)
> 💡️ **Hint**: You see complaints regarding syntax errors? Most likely the > 💡️ **Hint**: You see complaints regarding syntax errors? Most likely the
> RouterOS on your device is too old. Check for updates! > RouterOS on your device is too old. Check for updates!
@ -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!");
} }

10
contrib/Makefile Normal file
View file

@ -0,0 +1,10 @@
# Makefile
HTML := $(wildcard *.html)
.PHONY: all docs
all: docs
docs: static-html.sh $(HTML)
./static-html.sh $(HTML)

6
contrib/commitinfo.sh Executable file
View file

@ -0,0 +1,6 @@
#!/bin/sh
sed \
-e "/^:global CommitId/c :global CommitId \"${COMMITID:-unknown}\";" \
-e "/^:global CommitInfo/c :global CommitInfo \"${COMMITINFO:-unknown}\";" \
< "${1}"

View file

@ -2,8 +2,22 @@
set -e set -e
sed "s|__TITLE__|$(head -n1 "${1}")|" < "${0}.d/head.html" RELTO="$(dirname "${1}")"
sed \
-e "s|__TITLE__|$(head -n1 "${1}")|" \
-e "s|__GENERAL__|$(realpath --relative-to="${RELTO}" general/)|" \
-e "s|__ROOT__|$(realpath --relative-to="${RELTO}" ./)|" \
< "${0}.d/head.html"
markdown -f toc,idanchor "${1}" | sed \ markdown -f toc,idanchor "${1}" | sed \
-e 's/href="\([-_\./[:alnum:]]*\)\.md"/href="\1.html"/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">|' \
printf '</body></html>' -e '/<h[1234] /s|-2[7cd]-||g' -e '/<h[1234] /s|--26-amp-3b-||g' \
-e '/^<pre>/s|pre|pre onclick="CopyToClipboard(this)"|g' \
-e '/The above link may be broken on code hosting sites/s|blockquote|blockquote style="display: none;"|'
sed \
-e "s|__DATE__|${DATE:-$(date --rfc-email)}|" \
-e "s|__VERSION__|${VERSION:-unknown}|" \
< "${0}.d/foot.html"

View file

@ -0,0 +1,4 @@
<p class="foot">RouterOS Scripts documentation generated on <i>__DATE__</i> for <i>__VERSION__</i></p>
</body></html>

View file

@ -1,15 +1,16 @@
<!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>
<style> <link rel="stylesheet" type="text/css" href="__GENERAL__/style.css">
body { font-family: sans-serif; } <link rel="icon" type="image/png" href="__ROOT__/logo.png">
h2 { border-bottom: 1px solid #ccc; color: #000; } <script type="text/javascript" src="__GENERAL__/clipboard.js"></script>
a { text-decoration: none; }
a:hover { text-decoration: underline; }
blockquote { border-left: 4px solid #ccc; padding: 0 10px; color: #777; }
code { margin: 0 2px; padding: 2px 5px; border: 1px solid #ccc; background-color: #f8f8f8; border-radius: 3px; }
pre { background-color: #f8f8f8; border: 1px solid #ccc; overflow: auto; padding: 6px 10px; border-radius: 3px; }
pre code { margin: 0; padding: 0; border: 0; }
</style>
<link rel="icon" href="/logo.png" type="image/png">
</head><body> </head><body>
<table><tr>
<td><img src="__GENERAL__/eworm-meadow.avif" alt="eworm on meadow" /></td>
<td><img src="__GENERAL__/qr-code.png" alt="QR code: rsc.eworm.de" /></td>
<td class="head"><span class="top">RouterOS Scripts</span><br />
<span class="bottom">a collection of scripts for MikroTik RouterOS</span></td>
</tr></table>
<hr />

View file

@ -1,5 +0,0 @@
body {
font-family: fira-sans, sans-serif;
font-size: 10pt;
background-color: transparent;
}

View file

@ -1,14 +1,27 @@
<!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"> <link rel="stylesheet" type="text/css" href="../general/style.css">
<title>RouterOS-Scripts Logo Color Changer</title> <link rel="icon" type="image/png" href="../logo.png">
<link rel="stylesheet" type="text/css" href="logo-color.d/style.css">
<script src="logo-color.d/script.js"></script> <script src="logo-color.d/script.js"></script>
</head> </head><body>
<body>
<h1>RouterOS-Scripts Logo Color Changer</h1> <table><tr>
<td><img src="../general/eworm-meadow.avif" alt="eworm on meadow" /></td>
<td><img src="../general/qr-code.png" alt="QR code: rsc.eworm.de" /></td>
<td class="head"><span class="top">RouterOS Scripts</span><br />
<span class="bottom">a collection of scripts for MikroTik RouterOS</span></td>
</tr></table>
<hr />
<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 +37,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" 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" 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" 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,36 +0,0 @@
body {
font-family: fira-sans, sans-serif;
font-size: 10pt;
background-color: transparent;
}
div.notification {
position: relative;
float: right;
width: 600px;
border: 3px outset #6c5d53;
/* border-radius: 5px; */
padding: 10px;
background-color: #e6e6e6;
}
div.content {
padding-left: 60px;
}
img.logo {
float: left;
border-radius: 50%;
}
p.heading {
margin: 0px;
font-weight: bold;
text-decoration: underline;
}
p.hint {
display: none;
}
pre {
font-family: fira-mono, monospace;
white-space: pre-wrap;
}
span.link {
color: #863600;
}

View file

@ -1,14 +1,27 @@
<!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"> <link rel="stylesheet" type="text/css" href="../general/style.css">
<title>RouterOS-Scripts Notification Generator</title> <link rel="icon" type="image/png" href="../logo.png">
<link rel="stylesheet" type="text/css" href="notification.d/style.css">
<script src="notification.d/script.js"></script> <script src="notification.d/script.js"></script>
</head> </head><body>
<body>
<h1>RouterOS-Scripts Notification Generator</h1> <table><tr>
<td><img src="../general/eworm-meadow.avif" alt="eworm on meadow" /></td>
<td><img src="../general/qr-code.png" alt="QR code: rsc.eworm.de" /></td>
<td class="head"><span class="top">RouterOS Scripts</span><br />
<span class="bottom">a collection of scripts for MikroTik RouterOS</span></td>
</tr></table>
<hr />
<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 +29,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 +38,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>

8
contrib/static-html.sh Executable file
View file

@ -0,0 +1,8 @@
#!/bin/sh
set -e
sed -i \
-e '/href=/s|\.md|\.html|' \
-e '/blockquote/s|/\* display \*/|display: none;|' \
"${@}"

11
contrib/template-capsman.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
set -e
sed \
-e '/\/interface\/wifi\//d' \
-e '/\/interface\/wireless\//d' \
-e 's|%TEMPL%|.capsman|' \
-e '/^# NOT \/caps-man\/ #$/,/^# NOT \/caps-man\/ #$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< "${1}"

11
contrib/template-local.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
set -e
sed \
-e '/\/caps-man\//d' \
-e '/\/interface\/wifi\//d' \
-e 's|%TEMPL%|.local|' \
-e '/^# NOT \/interface\/wireless\/ #$/,/^# NOT \/interface\/wireless\/ #$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< "${1}"

11
contrib/template-wifi.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
set -e
sed \
-e '/\/caps-man\//d' \
-e '/\/interface\/wireless\//d' \
-e 's|%TEMPL%|.wifi|' \
-e '/^# NOT \/interface\/wifi\/ #$/,/^# NOT \/interface\/wifi\/ #$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< "${1}"

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.");
} }

8
general/clipboard.js Normal file
View file

@ -0,0 +1,8 @@
/* copy code to clipboard */
function CopyToClipboard(pre) {
pre.style.filter = 'invert(1)';
navigator.clipboard.writeText(pre.firstElementChild.innerHTML);
setTimeout(function() {
pre.style.filter = 'invert(0)';
}, 100);
}

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

101
general/style.css Normal file
View file

@ -0,0 +1,101 @@
/* stylesheet for RouterOS Scripts */
body {
background-color: transparent;
font-family: fira-sans, sans-serif;
font-size: 10pt;
line-height: 1.6;
}
h2 {
border-bottom: 1px solid #ccc;
color: #000;
}
a {
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
blockquote {
border-left: 4px solid #ccc;
padding: 0 10px;
color: #555;
}
code {
margin: 0 2px;
padding: 2px 5px;
border: 1px solid #ccc;
background-color: #f8f8f8;
border-radius: 3px;
}
div.notification {
position: relative;
float: none;
width: 600px;
border: 3px outset #6c5d53;
/* border-radius: 5px; */
padding: 10px;
background-color: #e6e6e6;
}
div.content {
padding-left: 60px;
}
img.logo {
float: left;
border-radius: 50%;
}
p.foot {
color: #777;
text-align: center;
}
p.heading {
margin: 0px;
font-weight: bold;
text-decoration: underline;
}
p.hint {
display: none;
}
pre {
font-family: fira-mono, monospace;
white-space: pre-wrap;
background-color: #f8f8f8;
border: 1px solid #ccc;
overflow: auto;
padding: 6px 10px;
border-radius: 3px;
}
pre code {
margin: 0;
padding: 0;
border: 0;
}
pre::before {
content: "📋 Copy!";
float: right;
border: 1px solid #ccc;
border-radius: 3px;
}
span.link {
color: #863600;
}
td.head {
line-height: 1.2;
padding: 0 2em;
}
td.head .top {
font-size: 250%;
font-weight: bold;
}
td.head .bottom {
font-size: 125%;
color: #555;
}
@media only screen and (orientation: landscape) {
body {
margin-left: 10vw;
margin-right: 10vw;
}
div.notification {
float: right;
}
}

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;
} }
@ -532,10 +539,16 @@
:set FetchUserAgentStr do={ :set FetchUserAgentStr do={
:local Caller [ :tostr $1 ]; :local Caller [ :tostr $1 ];
:global CommitId;
:global CommitInfo;
:global IfThenElse;
:local Resource [ /system/resource/get ]; :local Resource [ /system/resource/get ];
:return ("User-Agent: Mikrotik/" . $Resource->"version" . " " . \ :return ("User-Agent: Mikrotik/" . $Resource->"version" . " " . $Resource->"architecture-name" . \
$Resource->"architecture-name" . " " . $Caller . "/Fetch (https://rsc.eworm.de/)"); " " . $Caller . "/Fetch (https://rsc.eworm.de/" . [ $IfThenElse ($CommitId != "unknown") \
("; " . $CommitInfo . "/" . [ :pick $CommitId 0 8 ]) ] . ")");
} }
# check for existence of file, optionally with type # check for existence of file, optionally with type
@ -633,7 +646,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 +1254,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 +1305,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.");
} }
} }
@ -1887,6 +1900,15 @@
} }
} }
# add (and fix) global scripts scheduler
:local OnEvent "/system/script { run global-config; run global-functions; }";
:if ([ :len [ /system/scheduler/find where name="global-scripts" ] ] = 0) do={
/system/scheduler/add name="global-scripts" start-time=startup;
}
:if ([ /system/scheduler/get "global-scripts" on-event ] != $OnEvent) do={
/system/scheduler/set "global-scripts" on-event=$OnEvent;
}
# Log success # Log success
:local Resource [ /system/resource/get ]; :local Resource [ /system/resource/get ];
$LogPrintOnce info $ScriptName ("Loaded on " . $Resource->"board-name" . \ $LogPrintOnce info $ScriptName ("Loaded on " . $Resource->"board-name" . \

View file

@ -132,7 +132,7 @@
} }
:if ($AllDone = true && $QueueLen = [ :len $EmailQueue ]) do={ :if ($AllDone = true && $QueueLen = [ :len $EmailQueue ]) do={
/system/scheduler/remove $Scheduler; /system/scheduler/remove [ find where name="_FlushEmailQueue" ];
:set EmailQueue; :set EmailQueue;
:return true; :return true;
} }

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;