From 292d721813fd5f4ad3162ac14ba8124a2795eac2 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 10 Jun 2026 06:01:23 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 10 06:01:23. --- .../20260610/20260610060120-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260610/20260610060120-Config.rsc | 2667 +++++++++++++++++ .../20260610/20260610060120-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260610/20260610060120-Binary.backup create mode 100644 MikroGig/20260610/20260610060120-Config.rsc create mode 100644 MikroGig/history/20260610/20260610060120-Diff-Config.rsc diff --git a/MikroGig/20260610/20260610060120-Binary.backup b/MikroGig/20260610/20260610060120-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..2c5f386c0cbef25f8914c8aa25057cd747f24e1d GIT binary patch literal 164162 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 M{EYz@ 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 GA}VPny_ACh literal 0 HcmV?d00001 diff --git a/MikroGig/20260610/20260610060120-Config.rsc b/MikroGig/20260610/20260610060120-Config.rsc new file mode 100644 index 0000000..eac4226 --- /dev/null +++ b/MikroGig/20260610/20260610060120-Config.rsc @@ -0,0 +1,2667 @@ +# 2026-06-10 06:01:20 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/20260610/20260610060120-Diff-Config.rsc b/MikroGig/history/20260610/20260610060120-Diff-Config.rsc new file mode 100644 index 0000000..c2bfb4d --- /dev/null +++ b/MikroGig/history/20260610/20260610060120-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