From 0cad66b40177cd6cea5613f440f415c9895d58b9 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 8 Jun 2026 13:20:51 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 08 13:20:51. --- .../20260608/20260608132048-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260608/20260608132048-Config.rsc | 2667 +++++++++++++++++ .../20260608/20260608132048-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260608/20260608132048-Binary.backup create mode 100644 MikroGig/20260608/20260608132048-Config.rsc create mode 100644 MikroGig/history/20260608/20260608132048-Diff-Config.rsc diff --git a/MikroGig/20260608/20260608132048-Binary.backup b/MikroGig/20260608/20260608132048-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..dff3f35d421feaea8524e6022278ea598733936e GIT binary patch literal 164162 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%0A>*EgM>y_O)BoSzq49=x`~5EffLzsca$oOgDml~ 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 G!tBS@CZK`< literal 0 HcmV?d00001 diff --git a/MikroGig/20260608/20260608132048-Config.rsc b/MikroGig/20260608/20260608132048-Config.rsc new file mode 100644 index 0000000..1882b85 --- /dev/null +++ b/MikroGig/20260608/20260608132048-Config.rsc @@ -0,0 +1,2667 @@ +# 2026-06-08 13:20:48 by RouterOS 7.21.4 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-LAN +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados wps-mode=disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados5g wps-mode=disabled +/interface list +add name=WAN +add name=LAN +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/certificate settings +set builtin-trust-store=fetch crl-store=system +/interface bridge port +add bridge=Bridge-LAN interface=ether1 +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface list member +add interface=ether1 list=WAN +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=Bridge-LAN network=10.30.30.0 +/ip dns +set servers=10.30.30.81 +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no dst-address=0.0.0.0/0 gateway=10.30.30.81 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=10.30.30.81 +add address=10.30.30.10 +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system package update +set channel=long-term +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system script +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n\r\ + \n :local UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\r\ + \n };\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :local Script \"mod/AM-Certs-By-Ident\";\r\ + \n \r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetch \ + check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".\ + rsc\") output=user as-value ]->\"data\");\r\ + \n /system/script run \$Script;\r\ + \n :global tmpAddCerts;\r\ + \n :while ([ \$tmpAddCerts ] = true) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n :delay 1s;\r\ + \n :put \"Removing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/672/7cf8bc7a\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 14:35:04 06.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/20260608/20260608132048-Diff-Config.rsc b/MikroGig/history/20260608/20260608132048-Diff-Config.rsc new file mode 100644 index 0000000..072eceb --- /dev/null +++ b/MikroGig/history/20260608/20260608132048-Diff-Config.rsc @@ -0,0 +1,4 @@ +14c14 +< # channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +--- +> # channel: 5180/20-Ceee/ac/P(20dBm), SSID: vados5g, local forwarding -- 2.52.0