From 8a00a9747ff701e8ec487ac2036bea3e8370027a Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 10 Jun 2026 05:41:35 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 10 05:41:35. --- .../20260610/20260610054131-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260610/20260610054131-Config.rsc | 2667 +++++++++++++++++ .../20260610/20260610054131-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260610/20260610054131-Binary.backup create mode 100644 MikroGig/20260610/20260610054131-Config.rsc create mode 100644 MikroGig/history/20260610/20260610054131-Diff-Config.rsc diff --git a/MikroGig/20260610/20260610054131-Binary.backup b/MikroGig/20260610/20260610054131-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..7438f64d51d9f0d162b1bac597683c897ad8bc6c GIT binary patch literal 164162 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

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