From 4e384e0669d94c40fd6aff5fdc4eac741e09f367 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 21 Jun 2026 21:02:14 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 21 21:02:14. --- .../20260621/20260621210211-Binary.backup | Bin 0 -> 164806 bytes MikroGig/20260621/20260621210211-Config.rsc | 2679 +++++++++++++++++ .../20260621/20260621210211-Diff-Config.rsc | 8 + 3 files changed, 2687 insertions(+) create mode 100644 MikroGig/20260621/20260621210211-Binary.backup create mode 100644 MikroGig/20260621/20260621210211-Config.rsc create mode 100644 MikroGig/history/20260621/20260621210211-Diff-Config.rsc diff --git a/MikroGig/20260621/20260621210211-Binary.backup b/MikroGig/20260621/20260621210211-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..f322ebb3ccdfd5704ee767f7d1d4c66f53418ac6 GIT binary patch literal 164806 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 z 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

M7^b46oEqE3l`PnyTa5IQ)@#Oyu| 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

XO(qIoiI5pa&<)d6i9xm5 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\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/698/09fde8db\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 18:15:04 21.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" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/certificate settings +set builtin-trust-store=fetch crl-store=system +/interface bridge port +add bridge=Bridge-LAN interface=ether1 +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip neighbor discovery-settings +set discover-interface-list=Internet +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface=Bridge-LAN list=WAN +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=Bridge-LAN network=10.30.30.0 +/ip dns +set servers=10.30.30.81 +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add check-gateway=ping disabled=no distance=1 dst-address=0.0.0.0/0 gateway=\ + 10.30.30.81 routing-table=main scope=30 target-scope=10 +/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 +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add forced-ip=109.107.177.79 interface=*A type=external +add interface=lo type=internal +add interface=wlan2 type=internal +add interface=wlan1 type=internal +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Amsterdam +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=10.30.30.81 +add address=10.30.30.10 +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system 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 +/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/20260621/20260621210211-Diff-Config.rsc b/MikroGig/history/20260621/20260621210211-Diff-Config.rsc new file mode 100644 index 0000000..e612bab --- /dev/null +++ b/MikroGig/history/20260621/20260621210211-Diff-Config.rsc @@ -0,0 +1,8 @@ +475c475 +< \n:global CommitId \"main/698/09fde8db\";\r\ +--- +> \n:global CommitId \"main/694/a1b071a6\";\r\ +478c478 +< r: root, in 18:15:04 21.06.2026.\";\r\ +--- +> r: root, in 13:30:04 15.06.2026.\";\r\ -- 2.52.0