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