From 8229e3b83c4c0c9825d502c0575a3375ae9ceb7c Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 12 Jun 2026 12:20:34 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 12 12:20:34. --- .../20260612/20260612122030-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260612/20260612122030-Config.rsc | 2667 +++++++++++++++++ .../20260612/20260612122030-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260612/20260612122030-Binary.backup create mode 100644 MikroGig/20260612/20260612122030-Config.rsc create mode 100644 MikroGig/history/20260612/20260612122030-Diff-Config.rsc diff --git a/MikroGig/20260612/20260612122030-Binary.backup b/MikroGig/20260612/20260612122030-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..05bd1a981035ec66143101bbbfb2807dae17ab7b GIT binary patch literal 164162 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%0AK(m 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⪚xq?K1hnYFlGhXb3p#b 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%0A*bTwk>!DW{-dXj4t(U$3g=^ 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 literal 0 HcmV?d00001 diff --git a/MikroGig/20260612/20260612122030-Config.rsc b/MikroGig/20260612/20260612122030-Config.rsc new file mode 100644 index 0000000..b4b56e8 --- /dev/null +++ b/MikroGig/20260612/20260612122030-Config.rsc @@ -0,0 +1,2667 @@ +# 2026-06-12 12:20: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: 5260/20-Ceee/ac/DP(17dBm), 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/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=10.30.30.81 +add address=10.30.30.10 +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system package update +set channel=long-term +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system script +add 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/679/bd93dce4\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 08.06.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/20260612/20260612122030-Diff-Config.rsc b/MikroGig/history/20260612/20260612122030-Diff-Config.rsc new file mode 100644 index 0000000..c2bfb4d --- /dev/null +++ b/MikroGig/history/20260612/20260612122030-Diff-Config.rsc @@ -0,0 +1,4 @@ +14c14 +< # channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +--- +> # channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding -- 2.52.0