From 6f7b4712ab3ee35a1b2f80943f8fdd2f08d5db1d Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 1 Jun 2026 05:00:37 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 01 05:00:37. --- .../20260601/20260601050033-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260601/20260601050033-Config.rsc | 2667 +++++++++++++++++ .../20260601/20260601050033-Diff-Config.rsc | 8 + 3 files changed, 2675 insertions(+) create mode 100644 MikroGig/20260601/20260601050033-Binary.backup create mode 100644 MikroGig/20260601/20260601050033-Config.rsc create mode 100644 MikroGig/history/20260601/20260601050033-Diff-Config.rsc diff --git a/MikroGig/20260601/20260601050033-Binary.backup b/MikroGig/20260601/20260601050033-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..452b471e4f716194033d103b794b6d9facbe4a9b GIT binary patch literal 164162 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 z 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

5e7c;-uDU;X3EHM$zy&Qi~Oy+biVO` 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 G$o}t~3lt3i literal 0 HcmV?d00001 diff --git a/MikroGig/20260601/20260601050033-Config.rsc b/MikroGig/20260601/20260601050033-Config.rsc new file mode 100644 index 0000000..4638ad6 --- /dev/null +++ b/MikroGig/20260601/20260601050033-Config.rsc @@ -0,0 +1,2667 @@ +# 2026-06-01 04:00:33 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/Amsterdam +/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/668/b100835d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 23:45:04 31.05.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/20260601/20260601050033-Diff-Config.rsc b/MikroGig/history/20260601/20260601050033-Diff-Config.rsc new file mode 100644 index 0000000..32033a2 --- /dev/null +++ b/MikroGig/history/20260601/20260601050033-Diff-Config.rsc @@ -0,0 +1,8 @@ +579c579 +< \n:global CommitId \"main/668/b100835d\";\r\ +--- +> \n:global CommitId \"main/666/60128ee9\";\r\ +582c582 +< r: root, in 23:45:04 31.05.2026.\";\r\ +--- +> r: root, in 00:45:03 31.05.2026.\";\r\ -- 2.52.0