From b245162d50378f620b7a06cb22f466e0248e4ee4 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 31 May 2026 05:00:34 +0300 Subject: [PATCH] Backup for MikroGig created successfully at May 31 05:00:34. --- .../20260531/20260531050030-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260531/20260531050030-Config.rsc | 2667 +++++++++++++++++ .../20260531/20260531050030-Diff-Config.rsc | 8 + 3 files changed, 2675 insertions(+) create mode 100644 MikroGig/20260531/20260531050030-Binary.backup create mode 100644 MikroGig/20260531/20260531050030-Config.rsc create mode 100644 MikroGig/history/20260531/20260531050030-Diff-Config.rsc diff --git a/MikroGig/20260531/20260531050030-Binary.backup b/MikroGig/20260531/20260531050030-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..d29f240cb1e5e60f4233b5b8fe5661bd97b1113a GIT binary patch literal 164162 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%0DbLOu>%)j2wUJ=Bu!+Xg9rQypb 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�c)!qunP*op}^RQ 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%0Abb7N-0Y-N>8BG!WNm| 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≺x#I;i6X&qCbDZ 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±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 GhckF27WE4N literal 0 HcmV?d00001 diff --git a/MikroGig/20260531/20260531050030-Config.rsc b/MikroGig/20260531/20260531050030-Config.rsc new file mode 100644 index 0000000..adad466 --- /dev/null +++ b/MikroGig/20260531/20260531050030-Config.rsc @@ -0,0 +1,2667 @@ +# 2026-05-31 04:00:30 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/666/60128ee9\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 00:45:03 31.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/20260531/20260531050030-Diff-Config.rsc b/MikroGig/history/20260531/20260531050030-Diff-Config.rsc new file mode 100644 index 0000000..8180cba --- /dev/null +++ b/MikroGig/history/20260531/20260531050030-Diff-Config.rsc @@ -0,0 +1,8 @@ +579c579 +< \n:global CommitId \"main/666/60128ee9\";\r\ +--- +> \n:global CommitId \"main/663/fee06fc8\";\r\ +582c582 +< r: root, in 00:45:03 31.05.2026.\";\r\ +--- +> r: root, in 02:10:03 30.05.2026.\";\r\ -- 2.52.0