From a4a4c2c09db0ad541f3c34cbc2b59f9e0b7b2b94 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 4 Jun 2026 23:00:30 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 04 23:00:30. --- .../20260604/20260604230026-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260604/20260604230026-Config.rsc | 2667 +++++++++++++++++ .../20260604/20260604230026-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260604/20260604230026-Binary.backup create mode 100644 MikroGig/20260604/20260604230026-Config.rsc create mode 100644 MikroGig/history/20260604/20260604230026-Diff-Config.rsc diff --git a/MikroGig/20260604/20260604230026-Binary.backup b/MikroGig/20260604/20260604230026-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..93eda62c12cbf027965c1b3fd1de1f6c46493e47 GIT binary patch literal 164162 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%0Dq4Hwgda6bw^%>woRyuoyo@?UN`?oivoih!FUpcV zhMMfy_Ty`ri${u1(LXxu2j=&di$Xvmxe7-SXPCYhuiWH6RtEXp1?g;^mt-kGN| zk#FtIZAv-N2DxdqOe;P2_=>*hPxbU)`L{+ieA;LUU~#C%lR zS@Bq@FxIS#iBYA;qsrpY1k=wC7eI)&$Vb0Nq#PZKx#*&&WNEzEW%a)Vd`JN+(7d}P zxFLPO?|Z2iT#a2|<9q5OU-80O%>_-0`xxa!Np z9KRJaA1GM0$fEY9kv zY)c~^bPQ=@;@XEZmGxw#pUeZl^6oJiP9Qwk*fwuUB{B0M+akr8Vut^KyZcQXj*Rn@ zba>PT{79&KbQtjR_aL=BMed19`mB&&MI|!A8Z?Lg!oM$ggg2&QLU-=dWDejMDyz*# zstuW|v2+6�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 GgoLUXZNwn} literal 0 HcmV?d00001 diff --git a/MikroGig/20260604/20260604230026-Config.rsc b/MikroGig/20260604/20260604230026-Config.rsc new file mode 100644 index 0000000..e806212 --- /dev/null +++ b/MikroGig/20260604/20260604230026-Config.rsc @@ -0,0 +1,2667 @@ +# 2026-06-04 23:00:27 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/20260604230026-Diff-Config.rsc b/MikroGig/history/20260604/20260604230026-Diff-Config.rsc new file mode 100644 index 0000000..d37f78a --- /dev/null +++ b/MikroGig/history/20260604/20260604230026-Diff-Config.rsc @@ -0,0 +1,4 @@ +14c14 +< # channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +--- +> # channel: 5240/20-eeeC/ac/P(20dBm), SSID: vados5g, local forwarding -- 2.52.0