From 532dd59a02880e66925e9897c88994f6f7162e39 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 15 Jun 2026 20:40:53 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 15 20:40:53. --- .../20260615/20260615204049-Binary.backup | Bin 0 -> 164101 bytes MikroGig/20260615/20260615204049-Config.rsc | 2672 +++++++++++++++++ .../20260615/20260615204049-Diff-Config.rsc | 11 + 3 files changed, 2683 insertions(+) create mode 100644 MikroGig/20260615/20260615204049-Binary.backup create mode 100644 MikroGig/20260615/20260615204049-Config.rsc create mode 100644 MikroGig/history/20260615/20260615204049-Diff-Config.rsc diff --git a/MikroGig/20260615/20260615204049-Binary.backup b/MikroGig/20260615/20260615204049-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..52abb558451a064cd14015392fa9cd7f07285eab GIT binary patch literal 164101 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%0DEFB6hD(h%zc_`%Vm7ArbJQvsrT@)ou=jMcy#xz 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

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