From 63dec17602cb0e10564761203fffd86c878894b4 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 4 Jun 2026 14:00:28 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 04 14:00:28. --- .../20260604/20260604140024-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260604/20260604140024-Config.rsc | 2667 +++++++++++++++++ .../20260604/20260604140024-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260604/20260604140024-Binary.backup create mode 100644 MikroGig/20260604/20260604140024-Config.rsc create mode 100644 MikroGig/history/20260604/20260604140024-Diff-Config.rsc diff --git a/MikroGig/20260604/20260604140024-Binary.backup b/MikroGig/20260604/20260604140024-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..4d72d35ff29b0c3a2a8246ec7eb54505216ff5e5 GIT binary patch literal 164162 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 G=klS_U`H(g literal 0 HcmV?d00001 diff --git a/MikroGig/20260604/20260604140024-Config.rsc b/MikroGig/20260604/20260604140024-Config.rsc new file mode 100644 index 0000000..af8d39b --- /dev/null +++ b/MikroGig/20260604/20260604140024-Config.rsc @@ -0,0 +1,2667 @@ +# 2026-06-04 14:00:24 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: 2442/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/670/7de640a1\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 01.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/20260604/20260604140024-Diff-Config.rsc b/MikroGig/history/20260604/20260604140024-Diff-Config.rsc new file mode 100644 index 0000000..4546c55 --- /dev/null +++ b/MikroGig/history/20260604/20260604140024-Diff-Config.rsc @@ -0,0 +1,4 @@ +10c10 +< # channel: 2442/20-Ce/gn(17dBm), SSID: vados, local forwarding +--- +> # channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding -- 2.52.0