From f8abc9d985cf2d8a3a7c6abad05e42afd648eaf5 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 6 May 2026 13:00:18 +0300 Subject: [PATCH] Backup for MikroGig created successfully at May 06 13:00:18. --- .../20260506/20260506130013-Binary.backup | Bin 0 -> 155340 bytes MikroGig/20260506/20260506130013-Config.rsc | 2613 +++++++++++++++++ .../20260506/20260506130013-Diff-Config.rsc | 4 + 3 files changed, 2617 insertions(+) create mode 100644 MikroGig/20260506/20260506130013-Binary.backup create mode 100644 MikroGig/20260506/20260506130013-Config.rsc create mode 100644 MikroGig/history/20260506/20260506130013-Diff-Config.rsc diff --git a/MikroGig/20260506/20260506130013-Binary.backup b/MikroGig/20260506/20260506130013-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..569398549ecf686c691cbc094fc64c2518018791 GIT binary patch literal 155340 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

x@MLsV(&gIq(BibY^p=cZ+>1BkQL*=3yI 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

eG=YMBmqW!5 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 T^FNu|HU$-btIUYKtM4wW0n(3V literal 0 HcmV?d00001 diff --git a/MikroGig/20260506/20260506130013-Config.rsc b/MikroGig/20260506/20260506130013-Config.rsc new file mode 100644 index 0000000..95a89c8 --- /dev/null +++ b/MikroGig/20260506/20260506130013-Config.rsc @@ -0,0 +1,2613 @@ +# 2026-05-06 12:00:13 by RouterOS 7.21.4 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=bridge1 +/interface wireless +# managed by CAPsMAN +set [ find default-name=wlan1 ] ssid=MikroTik +# managed by CAPsMAN +set [ find default-name=wlan2 ] ssid=MikroTik +/interface list +add name=WAN +add name=LAN +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge port +add bridge=bridge1 interface=ether1 +add bridge=bridge1 interface=ether2 +add bridge=bridge1 interface=ether3 +add bridge=bridge1 interface=ether4 +add bridge=bridge1 interface=ether5 +add bridge=bridge1 interface=wlan2 +add bridge=bridge1 interface=wlan1 +/interface list member +add interface=ether1 list=WAN +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +/interface wireless cap +# +set bridge=bridge1 enabled=yes interfaces=wlan2,wlan1 +/ip address +add address=10.30.30.86/24 interface=ether2 network=10.30.30.0 +/ip dns +set servers=10.30.30.81 +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no dst-address=0.0.0.0/0 gateway=10.30.30.81 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Amsterdam +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=10.30.30.81 +add address=10.30.30.10 +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system package update +set channel=long-term +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system script +add dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n\r\ + \n :local UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\r\ + \n };\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\"; \"mod/AM-\ + Certs-By-Ident\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add dont-require-permissions=no name=AM-GlobalConfig owner=AM-GlobalConfig \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global Identity [ /system identity get name ];\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix (a);\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass (a); #{\ + \n# \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n#};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass (a); # {\ + \n# \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n#};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add dont-require-permissions=no name=AM-GlobalFunc owner=AM-GlobalFunc \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\ + \n# RouterOS script: AM-GglobalFunc\ + \n# Script comment: Global functions\ + \n# Copyright (c) 2005-2026 Vados \ + \n#\ + \n#\ + \n# requires RouterOS, version=7.19\ + \n# requires device-mode, fetch, scheduler\ + \n:local ExitOK false;\ + \n:local ScriptName [ :jobname ];\ + \n#:global checkRunJob \$SriptName;\ + \n#:global fixCRLF;\ + \n#:if (\$fixCRLF != false) do={\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\ + \n#}\ + \n:global GlobalFuncReady false;\ + \n\ + \n# Git commit id & info, expected configuration version\ + \n:global CommitId \"main/625/14252114\";\ + \n:global CommitTAG \"unknown\";\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 02:45:03 05.05.2026.\";\ + \n\ + \n# The variables are received right here.\ + \n:global GlobalConfVersion 140;\ + \n\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\ + \n\ + \n:global Identity [/system/identity/get name];\ + \n:global IdentityShort [:pick \$Identity 0 18];\ + \n\ + \n:global devBoardName [/system/resource/get board-name];\ + \n:global devMode [/system/device-mode/get mode];\ + \n:global devCurArch [/system/resource/get architecture-name];\ + \n:global devCurVersion [/system/resource/get version];\ + \n\ + \n# Variables defined in AM-GlobalConfig.rsc\ + \n:global TerminalColorOutput;\ + \n:global CommentsInScripts;\ + \n:global DetectIpAddrDefault;\ + \n:global DetectIpAddrFallback;\ + \n:global updateChannel;\ + \n:global Domain;\ + \n:global EmailGeneralTo;\ + \n:global BackupAndUpdateMode;\ + \n\ + \n# Single functions, without nested functions.\ + \n:global MiniDateTimeStamp;\ + \n:global MicroDateTimeStamp;\ + \n\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\ + \n:global LogPrint;\ + \n\ + \n# DeviceInfo and Updates\ + \n:global IsCheckUpdates;\ + \n:global WaitCheckUpdates;\ + \n:global GetPubIp;\ + \n\ + \n:global GetArrDeviceInfo;\ + \n:global WaitArrDeviceInfo;\ + \n\ + \n:global devModel;\ + \n:global devRunningMode;\ + \n\ + \n:global devRbRevision;\ + \n:global devRbSerialNumber;\ + \n:global devRbVerAvail;\ + \n\ + \n:global runningChannelVersion;\ + \n:global runningChannel;\ + \n:global runningVersion;\ + \n\ + \n:global devBuildTime;\ + \n:global ROsVerAvail;\ + \n:global PkgUpdStatus;\ + \n:global currentUpdateChannel;\ + \n\ + \n:global ScriptInstallUpdate;\ + \n\ + \n:global DeviceInfo;\ + \n\ + \n:global OldMode;\ + \n\ + \n:global ParseKeyValueStore;\ + \n:global RandomDelay;\ + \n:global GetRandomNumber;\ + \n:global EscapeForRegEx;\ + \n:global CharacterMultiply;\ + \n:global CharacterReplace;\ + \n:global CleanFilePath;\ + \n:global CleanName;\ + \n\ + \n:global CommitBrief;\ + \n\ + \n:global EitherOr;\ + \n:global FormatLine;\ + \n:global GetRandom20CharAlNum;\ + \n:global GetRandom20CharHex;\ + \n:global GetRandomNumber;\ + \n:global Grep;\ + \n:global IfThenElse;\ + \n:global MAX;\ + \n:global MIN;\ + \n:global HumanReadableNum;\ + \n\ + \n:global IsFullyConnected;\ + \n:global IsDNSResolving;\ + \n:global IsTimeSync;\ + \n:global IsTimeSyncCached;\ + \n:global IsTimeSyncResetNtp;\ + \n\ + \n:global WaitDNSResolving;\ + \n:global WaitFullyConnected;\ + \n:global WaitTimeSync;\ + \n:global MkDir;\ + \n:global RmDir;\ + \n:global RmFile;\ + \n:global FileGet;\ + \n:global Unix2Dos;\ + \n:global UrlEncode;\ + \n:global WaitForFile;\ + \n:global ScriptLock;\ + \n:global SendTelegram;\ + \n:global NotificationFunctions;\ + \n:global SendNotification;\ + \n:global SendNotification2;\ + \n:global SymbolForNotification;\ + \n:global SymbolByUnicodeName;\ + \n:global ValidateSyntax;\ + \n:global CheckSumsVerify;\ + \n:global GlobalConfChanges;\ + \n:global GlobalConfMigration;\ + \n:global VersionToNum;\ + \n:global RequiredRouterOS;\ + \n:global ExitError;\ + \n:global ExitOnError;\ + \n\ + \n:global FetchHugeFiles;\ + \n:global FetchUserAgentStr;\ + \n:global FileExists;\ + \n:global CertificateAvailable;\ + \n:global CertificateDownload;\ + \n:global CertificateNameByCN;\ + \n:global CharacterMultiply;\ + \n\ + \n:global InspectVar;\ + \n:global InspectVarRet;\ + \n:global ParseCustom;\ + \n\ + \n:set IsCheckUpdates do={\ + \n :local isInfo [:tobool \$1];\ + \n :global updateChannel;\ + \n :global PkgUpdStatus;\ + \n :global currentUpdateChannel;\ + \n :global ROsVerAvail;\ + \n :global arrDeviceInfo;\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \ + \n :local CurrentChannel [ /system/package/update/get channel ];\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\ + \n }\ + \n :local Update [ /system/package/update/get ];\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\ + \n :set currentUpdateChannel \$Channel;\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\ + \n :local StatusPkg \"undefined\";\ + \n :log info (\$0 . \" Checking for updates...\");\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\ + \n delay=300ms max=5 on-error={};\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\ + \n }\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\ + \n :return true;\ + \n } else={\ + \n :return \$PkgUpdStatus;\ + \n }\ + \n}\ + \n\ + \n:set WaitCheckUpdates do={\ + \n :global IsCheckUpdates;\ + \n :global PkgUpdStatus;\ + \n :global currentUpdateChannel;\ + \n :global ROsVerAvail;\ + \n :global arrDeviceInfo;\ + \n :local Status \"\";\ + \n :local Update;\ + \n :local WaitCount 0;\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\ + \n :return false;\ + \n }\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\ + \n :delay 1s;\ + \n :set WaitCount (\$WaitCount + 1);\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\ + \n }\ + \n :set Update [ /system/package/update/get ];\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\ + \n :set PkgUpdStatus true;\ + \n } else={\ + \n :set PkgUpdStatus false;\ + \n }\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\ + \n }\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set WaitArrDeviceInfo do={\ + \n :global GetArrDeviceInfo;\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\ + \n :delay 1s;\ + \n }\ + \n}\ + \n\ + \n:set GetArrDeviceInfo do={\ + \n :global LogPrint;\ + \n :global arrDeviceInfo;\ + \n :global devBoardName;\ + \n :global devModel;\ + \n :global devRunning;\ + \n :global devCurArch;\ + \n :global devRbRevision;\ + \n :global devRbSerialNumber;\ + \n :global devBuildTime;\ + \n :global runningChannelVersion;\ + \n :global runningChannel;\ + \n :global runningVersion;\ + \n :global currentUpdateChannel;\ + \n :global ROsVerAvail;\ + \n\ + \n :local DeviceInfo;\ + \n :local Resource [/system/resource/get];\ + \n :local Update [ /system/package/update/get ];\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\ + \n :local RouterBoard;\ + \n :local IsRouterBoard false;\ + \n :local RunningMode \"\";\ + \n\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\ + \n :set runningChannelVersion \$VersionString;\ + \n :set runningVersion \$VersionString;\ + \n :set runningChannel \"\";\ + \n\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\ + \n }\ + \n }\ + \n\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\ + \n :do {\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\ + \n# :set RouterBoard [ /system/routerboard/get ];\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\ + \n :set IsRouterBoard true;\ + \n }\ + \n } on-error={}\ + \n }\ + \n\ + \n :do {\ + \n :set RunningMode [ /system/device-mode/get mode ];\ + \n } on-error={\ + \n :do {\ + \n :set RunningMode [ /system/device-mode/get running ];\ + \n } on-error={\ + \n :set RunningMode \"\";\ + \n }\ + \n }\ + \n :set devRunning \$RunningMode;\ + \n\ + \n :if (\$IsRouterBoard = true) do={\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\ + \n } else={\ + \n :set devModel \$devBoardName;\ + \n :set devRbRevision \"\";\ + \n :set devRbSerialNumber \"\";\ + \n }\ + \n\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\ + \n\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\ + \n\ + \n :set arrDeviceInfo \$DeviceInfo;\ + \n :return \$DeviceInfo;\ + \n}\ + \n\ + \n:set DeviceInfo do={\ + \n :global GetArrDeviceInfo;\ + \n :global GlobalConfVersion;\ + \n :global Identity;\ + \n :global IfThenElse;\ + \n :global FormatLine;\ + \n :global CommitBrief;\ + \n\ + \n :local License [/system/license/get];\ + \n :local Snmp [ /snmp/get ];\ + \n :local Info [ \$GetArrDeviceInfo ];\ + \n\ + \n :if ([ :typeof \$Info ] != \"array\") do={\ + \n :return false;\ + \n }\ + \n\ + \n :return ( \\\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\ + \n \"Hardware:\\n\" . \\\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\ + \n \"RouterOS:\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\ + \n \"RouterOS-Scripts:\\n\" . \\\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\ + \n}\ + \n\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\ + \n\ + \n:set GetRandom20CharAlNum do={\ + \n :global EitherOr;\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\ + \n}\ + \n\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\ + \n\ + \n:global checkRunJob;\ + \n:set checkRunJob do={\ + \n :local Script [ :tostr \$1 ];\ + \n :global ScriptLock; \ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \ + \n}\ + \n\ + \n:set InspectVar do={\ + \n :global InspectVarRet;\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\ + \n}\ + \n\ + \n:set CommitBrief do={\ + \n :global CommitId;\ + \n :global CommitInfo;\ + \n :if (\$CommitId = \"unknown\") do={\ + \n :return \"unknown\";\ + \n }\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\ + \n}\ + \n\ + \n:set InspectVarRet do={\ + \n :local Input \$1;\ + \n :local Level (0 + [ :tonum \$2 ]);\ + \n :global CharacterReplace;\ + \n :global IfThenElse;\ + \n :global InspectVarRet;\ + \n :local IndentReturn do={\ + \n :local Prefix [ :tostr \$1 ];\ + \n :local Value [ :tostr \$2 ];\ + \n :local Level [ :tonum \$3 ];\ + \n :global CharacterMultiply;\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\ + \n }\ + \n :local TypeOf [ :typeof \$Input ];\ + \n :local Len [ :len \$Input ];\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\ + \n :if (\$TypeOf = \"array\") do={\ + \n :foreach Key,Value in=\$Input do={\ + \n :set \$Return (\$Return . \"\\n\" . \\\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\ + \n }\ + \n } else={\ + \n :if (\$TypeOf = \"str\") do={\ + \n :set \$Return (\$Return . \"\\n\" . \\\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\ + \n }\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\ + \n }\ + \n }\ + \n :if (\$TypeOf != \"nothing\") do={\ + \n :set \$Return (\$Return . \"\\n\" . \\\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\ + \n }\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set GetPubIp do={\ + \n :global DetectIpAddrDefault;\ + \n :global DetectIpAddrFallback;\ + \n\ + \n :local PubIpAddr false;\ + \n :local Url \$DetectIpAddrDefault;\ + \n :local JobName [ :jobname ];\ + \n\ + \n :do {\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\ + \n } on-error={\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\ + \n :set Url \$DetectIpAddrFallBack;\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\ + \n };\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\ + \n :return \$PubIpAddr;\ + \n}\ + \n\ + \n:set FormatLine do={\ + \n :local Key [ :tostr \$1 ];\ + \n :local Value [ :tostr \$2 ];\ + \n :local Indent [ :tonum \$3 ];\ + \n :local Spaces;\ + \n :local Return \"\";\ + \n :global CharacterMultiply;\ + \n :global EitherOr;\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set ParseCustom do={\ + \n :local Str [ :tostr \$1 ];\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\ + \n :local End [ :tostr \$3 ];\ + \n :local Num [ :tonum \$4 ];\ + \n :local Return;\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\ + \n :set End [:find \$rest \$End];\ + \n :set Return [:pick \$rest 0 \$End];\ + \n }\ + \n:return \$Return;\ + \n}\ + \n\ + \n:set LogPrint do={\ + \n :local Severity [ :tostr \$1 ];\ + \n :local Name [ :tostr \$2 ];\ + \n :local Message [ :tostr \$3 ];\ + \n :global PrintDebug;\ + \n :global PrintDebugOverride;\ + \n :global EitherOr;\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\ + \n :local PrintSeverity do={\ + \n :global TerminalColorOutput;\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\ + \n}\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\ + \n}\ + \n\ + \n:set CertificateAvailable do={\ + \n :local CommonName [ :tostr \$1 ];\ + \n :local UseFor [ :tostr \$2 ];\ + \n\ + \n :global CertificateDownload;\ + \n :global ParseKeyValueStore;\ + \n\ + \n :if ([ :len \$UseFor ] = 0) do={\ + \n :log warning (\$0 . \"The intended use is undefined!\");\ + \n :set UseFor \"undefined\";\ + \n }\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\ + \n [ /certificate/settings/get crl-download ] = true && \\\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\ + \n \"is configured to download certificate CRLs to system!\");\ + \n }\ + \n :if ([ :len \$CommonName ] = 0) do={\ + \n :log warning (\$0 . \"No CommonName given!\");\ + \n :return false;\ + \n }\ + \n :local CertSettings [ /certificate/settings/get ];\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\ + \n :return true;\ + \n }\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\ + \n :return false;\ + \n }\ + \n }\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\ + \n :return true;\ + \n }\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\ + \n :return false;\ + \n }\ + \n }\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set CertificateDownload do={\ + \n :local CommonName [ :tostr \$1 ];\ + \n :global ScriptUpdatesBaseUrl;\ + \n :global ScriptUpdatesUrlSuffix;\ + \n :global CertificateNameByCN;\ + \n :global CleanName;\ + \n :global FetchUserAgentStr;\ + \n :global RmFile;\ + \n :global WaitForFile;\ + \n\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \n \"CommonName '\" . \$CommonName . \"'.\");\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\ + \n :do {\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\ + \n dst-path=\$FileName as-value;\ + \n \$WaitForFile \$FileName;\ + \n } on-error={\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\ + \n \"' from repository! Trying fallback to mkcert.org...\");\ + \n :do {\ + \n :local CertSettings [ /certificate/settings/get ];\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \n :return false;\ + \n }\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\ + \n dst-path=\$FileName as-value;\ + \n \$WaitForFile \$FileName;\ + \n :if ([ /file/get \$FileName size ] = 0) do={\ + \n \$RmFile \$FileName;\ + \n :error false;\ + \n }\ + \n } on-error={\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\ + \n :return false;\ + \n }\ + \n }\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\ + \n :delay 1s;\ + \n \$RmFile \$FileName;\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\ + \n :return false;\ + \n }\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set CertificateNameByCN do={\ + \n :local Match [ :tostr \$1 ];\ + \n :global CleanName;\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\ + \n :if ([ :len \$Cert ] = 0) do={\ + \n :log warning (\$0 .\" No matching certificate found.\");\ + \n :return false;\ + \n }\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\ + \n :return true;\ + \n}\ + \n\ + \n:set CharacterMultiply do={\ + \n :local Str [ :tostr \$1 ];\ + \n :local Num [ :tonum \$2 ];\ + \n :if (\$Num = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set FileExists do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :local Type [ :tostr \$2 ];\ + \n :global FileGet;\ + \n :local FileVal [ \$FileGet \$FileName ];\ + \n :if (\$FileVal = false) do={ :return false; }\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\ + \n :return false;\ + \n}\ + \n\ + \n:set Grep do={\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\ + \n :local Pattern [ :tostr \$2 ];\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\ + \n :do {\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\ + \n } while=([ :len \$Input ] > 0);\ + \n :return [];\ + \n}\ + \n\ + \n:set HumanReadableNum do={\ + \n :local Input [ :tonum \$1 ];\ + \n :local Base [ :tonum \$2 ];\ + \n :global EitherOr;\ + \n :global IfThenElse;\ + \n :local Prefix \"kMGTPE\";\ + \n :local Pow 1;\ + \n :set Base [ \$EitherOr \$Base 1024 ];\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\ + \n :if (\$Input < \$Base) do={:return \$Input}\ + \n :for I from=0 to=[ :len \$Prefix ] do={\ + \n :set Pow (\$Pow * \$Base);\ + \n :if (\$Input / \$Base < \$Pow) do={\ + \n :set Prefix [ :pick \$Prefix \$I ];\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\ + \n :local Tmp2 (\$Tmp1 / 100);\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\ + \n :return (\$Tmp2 . \".\" . \\\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\ + \n \$Prefix . \$Bin);\ + \n }\ + \n }\ + \n}\ + \n\ + \n:set CleanFilePath do={\ + \n :local Path [ :tostr \$1 ];\ + \n :global CharacterReplace;\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\ + \n :return \$Path;\ + \n}\ + \n\ + \n:set CleanName do={\ + \n :local Input [ :tostr \$1 ];\ + \n :local Return \"\";\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\ + \n :local Char [ :pick \$Input \$I ];\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \ + \n };\ + \n :set Return (\$Return . \$Char)};\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set RandomDelay do={\ + \n :local Time [ :tonum \$1 ];\ + \n :local Unit [ :tostr \$2 ];\ + \n :global EitherOr;\ + \n :global GetRandomNumber;\ + \n :global MAX;\ + \n :if (\$Time = 0) do={:return false}\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\ + \n}\ + \n\ + \n:set EscapeForRegEx do={\ + \n :local Input [ :tostr \$1 ];\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\ + \n :local Char [ :pick \$Input \$I ];\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\ + \n :set Return (\$Return . \$Char);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set ExitError do={\ + \n :local ExitOK [ :tostr \$1 ];\ + \n :local Name [ :tostr \$2 ];\ + \n :local Error [ :tostr \$3 ];\ + \n :global IfThenElse;\ + \n :if (\$ExitOK = \"false\") do={\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\ + \n }\ + \n}\ + \n\ + \n:set ExitOnError do={\ + \n :local Name [ :tostr \$1 ];\ + \n :local Error [ :tostr \$2 ];\ + \n :global IfThenElse;\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\ + \n}\ + \n\ + \n:set MiniDateTimeStamp do={\ + \n :local mikro [ :tobool \$1 ];\ + \n /system/clock;\ + \n :local vdate [get date];\ + \n :local vtime [get time];\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\ + \n :local M [:tonum \$MM];\ + \n :if (\$vdate ~ \".../../....\") do={\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\ + \n :if (\$M>12) do={:set M (\$M - 12)}\ + \n :set MM [:pick (100 + \$M) 1 3];\ + \n }\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\ + \n :local HH [:pick \$vtime 0 2];\ + \n :local mm [:pick \$vtime 3 5];\ + \n :local ss [:pick \$vtime 6 8];\ + \n :local Return;\ + \n :if (\$mikro = true) do={\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\ + \n } else={\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set WaitForFile do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :local WaitTime [ :totime \$2 ];\ + \n :global CleanFilePath;\ + \n :global EitherOr;\ + \n :global MAX;\ + \n :set FileName [ \$CleanFilePath \$FileName ];\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\ + \n :do {\ + \n :retry {\ + \n /file/get \$FileName;\ + \n :return true;\ + \n } delay=\$Delay max=10;\ + \n } on-error={ }\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\ + \n :do {\ + \n /file/get \$FileName;\ + \n :return true;\ + \n } on-error={ }\ + \n :delay \$Delay;\ + \n :set Delay (\$Delay * 3 / 2);\ + \n }\ + \n :return false;\ + \n}\ + \n\ + \n:set FileGet do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :global WaitForFile;\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\ + \n :return false;\ + \n }\ + \n :local FileVal false;\ + \n :do {\ + \n :set FileVal [ /file/get \$FileName ];\ + \n } on-error={ }\ + \n :return \$FileVal;\ + \n}\ + \n\ + \n:set RmDir do={\ + \n :local DirName [ :tostr \$1 ];\ + \n :global FileGet;\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\ + \n :local DirVal [ \$FileGet \$DirName ];\ + \n :if (\$DirVal = false) do={\ + \n :log debug (\$0 . \" ... which does not exist.\");\ + \n :return true;\ + \n };\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\ + \n :return false;\ + \n };\ + \n :onerror Err {\ + \n /file/remove \$DirName;\ + \n } do={\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\ + \n :return false;\ + \n };\ + \n :return true;\ + \n}\ + \n\ + \n:set RmFile do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :global FileGet;\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\ + \n :local FileVal [ \$FileGet \$FileName ];\ + \n :if (\$FileVal = false) do={\ + \n :log debug (\$0 . \" ... which does not exist.\");\ + \n :return true;\ + \n }\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \n :return false;\ + \n }\ + \n :onerror Err {\ + \n /file/remove \$FileName;\ + \n } do={\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set MkDir do={\ + \n :local Path [ :tostr \$1 ];\ + \n :global CleanFilePath;\ + \n :global FileGet;\ + \n :global RmDir;\ + \n :global WaitForFile;\ + \n\ + \n :local MkTmpfs do={\ + \n :global WaitForFile;\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\ + \n :if ([ :len \$TmpFs ] = 1) do={\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\ + \n /disk/enable \$TmpFs;\ + \n }\ + \n :return true;\ + \n }\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\ + \n \$RmDir \"tmpfs\";\ + \n :onerror Err {\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\ + \n \$WaitForFile \"tmpfs\";\ + \n } do={\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\ + \n :return false;\ + \n }\ + \n :return true;\ + \n }\ + \n :set Path [ \$CleanFilePath \$Path ];\ + \n :if (\$Path = \"\") do={\ + \n :return true;\ + \n }\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\ + \n :local PathVal [ \$FileGet \$Path ];\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\ + \n :log debug (\$0 . \" ... which already exists.\");\ + \n :return true;\ + \n }\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\ + \n :if ([ \$MkTmpfs ] = false) do={\ + \n :return false;\ + \n }\ + \n }\ + \n :onerror Err {\ + \n /file/add type=\"directory\" name=\$Path;\ + \n \$WaitForFile \$Path;\ + \n } do={\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\ + \n :return \$2;\ + \n}\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\ + \n :return \$2;\ + \n}\ + \n\ + \n:set CharacterMultiply do={\ + \n :local Str [ :tostr \$1 ];\ + \n :local Num [ :tonum \$2 ];\ + \n :if (\$Num = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set CharacterReplace do={\ + \n :local String [ :tostr \$1 ];\ + \n :local ReplaceFrom [ :tostr \$2 ];\ + \n :local ReplaceWith [ :tostr \$3 ];\ + \n :local Return \"\";\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\ + \n }\ + \n :return (\$Return . \$String);\ + \n}\ + \n\ + \n:set IfThenElse do={\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\ + \n :return \$3;\ + \n}\ + \n\ + \n:set EitherOr do={\ + \n :global IfThenElse;\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\ + \n# this works for boolean values, literal ones with parentheses\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\ + \n}\ + \n\ + \n:set ParseKeyValueStore do={\ + \n :local Source \$1;\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\ + \n :do {\ + \n :return [ :deserialize from=json \$Source ];\ + \n } on-error={ }\ + \n } \ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\ + \n :local Result ({});\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\ + \n :if (\$Value=\"true\") do={:set Value true}\ + \n :if (\$Value=\"false\") do={:set Value false}\ + \n :set (\$Result->\$Key) \$Value;\ + \n } else={:set (\$Result->\$KeyValue) true}\ + \n }\ + \n :return \$Result;\ + \n}\ + \n:set RequiredRouterOS do={\ + \n :local Caller [ :tostr \$1 ];\ + \n :local Required [ :tostr \$2 ];\ + \n :local Warn [ :tostr \$3 ];\ + \n :global IfThenElse;\ + \n :global VersionToNum;\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\ + \n :return false;\ + \n }\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\ + \n :if (\$Warn = \"true\") do={\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\ + \n }\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set ValidateSyntax do={\ + \n :local Code [ :tostr \$1 ];\ + \n :global LogPrint;\ + \n :onerror Err {\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\ + \n } do={\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set VersionToNum do={\ + \n :local Input [ :tostr \$1 ];\ + \n :local Multi 0x1000000;\ + \n :local Return 0;\ + \n :global CharacterReplace;\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \n }\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\ + \n :local Num [ :tonum \$Value ];\ + \n :if (\$Multi = 0x100) do={\ + \n :if ([ :typeof \$Num ] = \"num\") do={\ + \n :set Return (\$Return + 0xff00);\ + \n :set Multi (\$Multi / 0x100);\ + \n } else={\ + \n :if (\$Value = \"zero\") do={ }\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\ + \n }\ + \n }\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\ + \n :set Multi (\$Multi / 0x100);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set ScriptLock do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local WaitMax [ :totime \$2 ];\ + \n :global GetRandom20CharAlNum;\ + \n :global IfThenElse;\ + \n :global ScriptLockOrder;\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\ + \n :set ScriptLockOrder ({});\ + \n }\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\ + \n :set (\$ScriptLockOrder->\$Script) ({});\ + \n }\ + \n :local JobCount do={\ + \n :local Script [ :tostr \$1 ];\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \n }\ + \n :local TicketCount do={\ + \n :local Script [ :tostr \$1 ];\ + \n :global ScriptLockOrder;\ + \n :local Count 0;\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\ + \n }\ + \n :return \$Count;\ + \n }\ + \n :local IsFirstTicket do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local Check [ :tostr \$2 ];\ + \n :global ScriptLockOrder;\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :if (\$Ticket = \$Check) do={:return true}\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\ + \n }\ + \n :return false;\ + \n }\ + \n :local AddTicket do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local Add [ :tostr \$2 ];\ + \n :global ScriptLockOrder;\ + \n :while (true) do={\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\ + \n :delay 10ms;\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\ + \n }\ + \n }\ + \n :local RemoveTicket do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local Remove [ :tostr \$2 ];\ + \n :global ScriptLockOrder;\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\ + \n :delay 10ms;\ + \n }\ + \n }\ + \n }\ + \n :local CleanupTickets do={\ + \n :local Script [ :tostr \$1 ];\ + \n :global ScriptLockOrder;\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\ + \n }\ + \n :set (\$ScriptLockOrder->\$Script) ({});\ + \n }\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\ + \n :error false;\ + \n }\ + \n :if ([ \$JobCount \$Script ] = 0) do={\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\ + \n :error false;\ + \n }\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\ + \n :set (\$ScriptLockOrder->\$Script) ({});\ + \n /system/script/job/remove [ find where script=\$Script ];\ + \n }\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\ + \n \$AddTicket \$Script \$MyTicket;\ + \n :local WaitInterval (\$WaitMax / 20);\ + \n :local WaitTime \$WaitMax;\ + \n :while (\$WaitTime > 0 && \\\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\ + \n :delay \$WaitInterval;\ + \n }\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\ + \n \$RemoveTicket \$Script \$MyTicket;\ + \n \$CleanupTickets \$Script;\ + \n :return true;\ + \n }\ + \n \$RemoveTicket \$Script \$MyTicket;\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\ + \n :return false;\ + \n}\ + \n\ + \n:set SendNotification do={ :onerror Err {\ + \n :global SendNotification2;\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\ + \n}\ + \n\ + \n:set SendNotification2 do={\ + \n :local Notification \$1;\ + \n :global NotificationFunctions;\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\ + \n }\ + \n}\ + \n\ + \n:set SymbolByUnicodeName do={\ + \n :local Name [ :tostr \$1 ];\ + \n :global EitherOr;\ + \n :global SymbolsExtra;\ + \n :local Symbols ({\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\ + \n \"cloud\"=\"\\E2\\98\\81\";\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\ + \n \"gear\"=\"\\E2\\9A\\99\";\ + \n \"heart\"=\"\\E2\\99\\A5\";\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\ + \n \"information\"=\"\\E2\\84\\B9\";\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\ + \n \"scissors\"=\"\\E2\\9C\\82\";\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\ + \n \"star\"=\"\\E2\\AD\\90\";\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\ + \n }, \$SymbolsExtra);\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\ + \n :local Special {\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\ + \n :return \"\";\ + \n }\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\ + \n}\ + \n\ + \n:set SymbolForNotification do={\ + \n :global NotificationsWithSymbols;\ + \n :global SymbolByUnicodeName;\ + \n :global IfThenElse;\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\ + \n :local Return \"\";\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\ + \n :return (\$Return . \" \");\ + \n}\ + \n\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\ + \n:set UrlEncode do={\ + \n :local Input [ :tostr \$1 ];\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\ + \n :local Char [ :pick \$Input \$I ];\ + \n :local Replace [ :find \$Chars \$Char ];\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\ + \n :set Return (\$Return . \$Char);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set IsDNSResolving do={\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\ + \n :return true;\ + \n}\ + \n\ + \n:set IsFullyConnected do={\ + \n :global IsDNSResolving;\ + \n :global IsTimeSync;\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\ + \n :return true;\ + \n}\ + \n\ + \n:set IsTimeSync do={\ + \n :global IsTimeSyncCached;\ + \n :global IsTimeSyncResetNtp;\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\ + \n :set IsTimeSyncCached true;\ + \n :return true;\ + \n }\ + \n :local Uptime [ /system/resource/get uptime ];\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\ + \n :set IsTimeSyncResetNtp \$Uptime;\ + \n }\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\ + \n :set IsTimeSyncResetNtp \$Uptime;\ + \n /system/ntp/client/set enabled=no;\ + \n :delay 20ms;\ + \n /system/ntp/client/set enabled=yes;\ + \n :return false;\ + \n }\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\ + \n :return true;\ + \n }\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\ + \n :set IsTimeSyncCached true;\ + \n :return true;\ + \n }\ + \n :return false;\ + \n }\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \n :return true;\ + \n}\ + \n\ + \n:set FetchHugeFiles do={\ + \n :local ScriptName [ :tostr \$1 ];\ + \n :local Url [ :tostr \$2 ];\ + \n :local CheckCert [ :tostr \$3 ];\ + \n\ + \n :global CleanName;\ + \n :global FetchUserAgentStr;\ + \n :global GetRandom20CharAlNum;\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global MkDir;\ + \n :global RmDir;\ + \n :global RmFile;\ + \n :global WaitForFile;\ + \n\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\ + \n\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\ + \n :if ([ \$MkDir \$DirName ] = false) do={\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\ + \n :return false;\ + \n }\ + \n\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\ + \n :onerror Err {\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\ + \n } do={\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\ + \n \$RmFile \$FileName;\ + \n }\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\ + \n \$RmDir \$DirName;\ + \n :return false;\ + \n }\ + \n\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\ + \n :return false;\ + \n }\ + \n\ + \n :local FileSize [ /file/get \$FileName size ];\ + \n :local Return \"\";\ + \n :local VarSize 0;\ + \n :while (\$VarSize != \$FileSize) do={\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\ + \n :set FileSize [ /file/get \$FileName size ];\ + \n :set VarSize [ :len \$Return ];\ + \n :if (\$VarSize > \$FileSize) do={\ + \n :delay 100ms;\ + \n }\ + \n }\ + \n \$RmDir \$DirName;\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set FetchUserAgentStr do={\ + \n :local Caller [ :tostr \$1 ];\ + \n :global GlobalScriptsUrl;\ + \n :global CommitBrief;\ + \n :global IfThenElse;\ + \n :local Resource [ /system/resource/get ];\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\ + \n}\ + \n\ + \n:set ScriptInstallUpdate do={ :onerror Err {\ + \n :local Scripts [ :toarray \$1 ];\ + \n :local NewComment [ :tostr \$2 ];\ + \n :global InitSetup;\ + \n\ + \n :global CommitId;\ + \n :global ScriptUpdatesCRLF;\ + \n :global GlobalConfVersion;\ + \n :global Identity;\ + \n :global CertificateAvailable;\ + \n :global CheckSumsVerify;\ + \n :global GlobalScriptsUrl;\ + \n :global SumsDirAndFileName;\ + \n :global GlobalScriptsUrlSuffix;\ + \n :global EitherOr;\ + \n :global FetchUserAgentStr;\ + \n :global Grep;\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global ParseKeyValueStore;\ + \n :global RequiredRouterOS;\ + \n :global SendNotification2;\ + \n :global SymbolForNotification;\ + \n :global ValidateSyntax;\ + \n :global CommentsInScripts;\ + \n\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\ + \n }\ + \n\ + \n :foreach Script in=\$Scripts do={\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\ + \n }\ + \n }\ + \n\ + \n :local CommitIdBefore \$CommitId;\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\ + \n :local ReloadGlobal false;\ + \n :local DeviceMode [ /system/device-mode/get ];\ + \n\ + \n :if (\$CheckSumsVerify = true) do={\ + \n :local CheckSums ({});\ + \n :do {\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\ + \n }\ + \n\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\ + \n :local ScriptVal [ /system/script/get \$Script ];\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\ + \n :local SourceNew;\ + \n\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\ + \n }\ + \n }\ + \n :do {\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\ + \n :error true;\ + \n }\ + \n :if (\$CheckSumsVerify = true) do={\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\ + \n :error true;\ + \n }\ + \n }\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\ + \n }\ + \n }\ + \n :onerror Err {\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\ + \n :if (\$Result->\"status\" = \"finished\") do={\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\ + \n } \ + \n } do={\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\ + \n :error false;\ + \n }\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\ + \n /system/script/remove \$Script;\ + \n :error false;\ + \n }\ + \n :if (\$CheckSumsVerify = true) do={\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\ + \n [ :len \$CheckSum ] = 0) do={\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\ + \n }\ + \n }\ + \n :error false;\ + \n }\ + \n\ + \n :if ([ :len \$SourceNew ] = 0) do={\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\ + \n :error false;\ + \n }\ + \n\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\ + \n if (\$ScriptUpdatesCRLF = false) do={\ + \n :put [ :tolf \$SourceNew ];\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\ + \n }\ + \n :error false;\ + \n }\ + \n }\ + \n\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\ + \n :error false;\ + \n }\ + \n\ + \n :if (\$CommentsInScripts = true) do={\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\ + \n :if ([ :len \$CommentLine ] = 0) do={\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\ + \n :error false;\ + \n } else={\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\ + \n } else={\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\ + \n :error false;\ + \n }\ + \n } \ + \n }\ + \n\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\ + \n :error false;\ + \n }\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\ + \n :local MissingDM ({});\ + \n :foreach Feature,Value in=\$RequiredDM do={\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\ + \n :set MissingDM (\$MissingDM, \$Feature);\ + \n }\ + \n }\ + \n :if ([ :len \$MissingDM ] > 0) do={\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\ + \n :error false;\ + \n }\ + \n\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\ + \n :error false;\ + \n }\ + \n \ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\ + \n\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\ + \n :set ReloadGlobal true;\ + \n }\ + \n } on-error={ }\ + \n }\ + \n :if (\$ReloadGlobal = true) do={\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\ + \n :onerror Err {\ + \n :global InitSetup (a);\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\ + \n }\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\ + \n \". Installed an older version\?\");\ + \n }\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\ + \n :global GlobalConfChanges;\ + \n :global GlobalConfMigration;\ + \n :local ChangeLogCode;\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\ + \n :onerror Err {\ + \n [ :parse \$ChangeLogCode ];\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\ + \n }\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\ + \n :do {\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\ + \n :error false;\ + \n }\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\ + \n :error false}\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\ + \n :onerror Err {\ + \n [ :parse \$Migration ];\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\ + \n } on-error={ }\ + \n }\ + \n }\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\ + \n \$LogPrint info \$0 (\$NotificationMessage);\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\ + \n }\ + \n } else={\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\ + \n\ + \n }\ + \n\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\ + \n }\ + \n} do={\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\ + \n} }\ + \n\ + \n# load modules\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\ + \n :local ScriptVal [ /system/script/get \$Script ];\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\ + \n }\ + \n } else={\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\ + \n }\ + \n}\ + \n\ + \n# Add and fix global scheduler\ + \n:put \"Add or/and fix Global scheduler...\";\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\ + \n:local Comment \"Every Day Set Global Environment Variables\";\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\ + \n}\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\ + \n}\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\ + \n}\ + \n# Add Update Script scheduler\ + \n:put \"Add or/and fix Update Script scheduler\";\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \n:set Comment \"Every Day Check For Update Scripts\";\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\ + \n}\ + \n\ + \n:onerror Err {\ + \n :global GlobalConfReady;\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\ + \n\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\ + \n # signal we are ready\ + \n:set GlobalFuncReady true;\ + \n:set ExitOK true;\ + \n\ + \n:log info (\$0 . \"Global configs ready!\");\ + \n} do={\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\ + \n}\ + \n" +add dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=admin \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\ + \n# RouterOS script: AM-Certs-By-Ident\ + \n# Script comment: Download custom Certificates By Routers Identity \ + \n# Copyright (c) 2005-2026 Vados \ + \n#\ + \n#\ + \n# requires RouterOS, version=7.19\ + \n# requires device-mode, fetch\ + \n#\ + \n# :local ScriptName [ :jobname ];\ + \n#\ + \n# CloudFlare\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\ + \n# Quad9\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\ + \n\ + \n:global GlobalScriptsUrl;\ + \n:local UrlSuffix [/system/identity/get name];\ + \n:local UrlDir \"certs/\";\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\ + \n\ + \n:log error \$CertUrl;\ + \n\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\ + \n\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\ + \n\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\ + \n\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\ + \n\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\ + \n\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\ + \n\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\ + \n\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\ + \n\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\ + \n\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\ + \n\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\ + \n\ + \n:set CertName \"GTS-Root-R4.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\ + \n\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\ + \n\ + \n:set CertName \"ISRG-Root-X1.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\ + \n\ + \n:set CertName \"Root-YE.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\ + \n\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\ + \n\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\ + \n\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n#:set CertName \"GTS-Root-RX.pem\";\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n#internet\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n#:set CertName \"ISRG-Root-X2.pem\";\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n\ + \n\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n:global GlobalScriptsUrl;\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n" +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com diff --git a/MikroGig/history/20260506/20260506130013-Diff-Config.rsc b/MikroGig/history/20260506/20260506130013-Diff-Config.rsc new file mode 100644 index 0000000..838fb73 --- /dev/null +++ b/MikroGig/history/20260506/20260506130013-Diff-Config.rsc @@ -0,0 +1,4 @@ +86c86 +< set time-zone-name=Europe/Amsterdam +--- +> set time-zone-name=Europe/Moscow -- 2.52.0