From 245f4f45096083d8c2db790d3ac8d66967a45daa Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 5 Jun 2026 10:40:32 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 05 10:40:32. --- .../20260605/20260605104028-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260605/20260605104028-Config.rsc | 2667 +++++++++++++++++ .../20260605/20260605104028-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260605/20260605104028-Binary.backup create mode 100644 MikroGig/20260605/20260605104028-Config.rsc create mode 100644 MikroGig/history/20260605/20260605104028-Diff-Config.rsc diff --git a/MikroGig/20260605/20260605104028-Binary.backup b/MikroGig/20260605/20260605104028-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..a1ce53936358c13da2ea36d1c3484a5ebaf11745 GIT binary patch literal 164162 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

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