From be7de15206c20dad769deac55c27e3785a9f31ee Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 26 May 2026 05:00:37 +0300 Subject: [PATCH] Backup for MikroGig created successfully at May 26 05:00:37. --- .../20260526/20260526050033-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260526/20260526050033-Config.rsc | 2667 +++++++++++++++++ .../20260526/20260526050033-Diff-Config.rsc | 8 + 3 files changed, 2675 insertions(+) create mode 100644 MikroGig/20260526/20260526050033-Binary.backup create mode 100644 MikroGig/20260526/20260526050033-Config.rsc create mode 100644 MikroGig/history/20260526/20260526050033-Diff-Config.rsc diff --git a/MikroGig/20260526/20260526050033-Binary.backup b/MikroGig/20260526/20260526050033-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..0e2b0c27a54681557ed914a11138b330d1d6b73b GIT binary patch literal 164162 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

kqYiR~QzBo8J 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

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