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

??+i{ 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 JM0$kj9lV#WHx>W@ literal 0 HcmV?d00001 diff --git a/MikroGig/20260506/20260506044013-Config.rsc b/MikroGig/20260506/20260506044013-Config.rsc new file mode 100644 index 0000000..93ce579 --- /dev/null +++ b/MikroGig/20260506/20260506044013-Config.rsc @@ -0,0 +1,2613 @@ +# 2026-05-06 04:40: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/Moscow +/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/20260506044013-Diff-Config.rsc b/MikroGig/history/20260506/20260506044013-Diff-Config.rsc new file mode 100644 index 0000000..d36d25a --- /dev/null +++ b/MikroGig/history/20260506/20260506044013-Diff-Config.rsc @@ -0,0 +1,4 @@ +86c86 +< set time-zone-name=Europe/Moscow +--- +> set time-zone-name=Europe/Amsterdam -- 2.52.0