From 8636dd840495d656c05ba9cf5dcd1d596a68d3b2 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 8 Jun 2026 13:01:01 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 08 13:01:01. --- .../20260608/20260608130057-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260608/20260608130057-Config.rsc | 2667 +++++++++++++++++ .../20260608/20260608130057-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260608/20260608130057-Binary.backup create mode 100644 MikroGig/20260608/20260608130057-Config.rsc create mode 100644 MikroGig/history/20260608/20260608130057-Diff-Config.rsc diff --git a/MikroGig/20260608/20260608130057-Binary.backup b/MikroGig/20260608/20260608130057-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..7fdbe690e77fcb9e780e5c36c710ab96074bce94 GIT binary patch literal 164162 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

)@Heie*Sc8PcqNy^t?`i(s^QhcD< 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\"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/672/7cf8bc7a\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 14:35:04 06.06.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="Download custom Certificates By Routers Identity " \ + dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=\ + mod/AM-Certs-By-Ident policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Certs-By-Ident\r\ + \n# Script comment: Download custom Certificates By Routers Identity \r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n#:local ScriptName [ :jobname ];\r\ + \n#\r\ + \n# CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n:global tmpAddCerts true; \r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n:local UrlSuffix [/system/identity/get name];\r\ + \n:local UrlDir \"certs/\";\r\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\r\ + \n\r\ + \n:log error \$CertUrl;\r\ + \n\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n:global tmpAddCerts (a);\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n:global GlobalScriptsUrl;\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n" +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com diff --git a/MikroGig/history/20260608/20260608130057-Diff-Config.rsc b/MikroGig/history/20260608/20260608130057-Diff-Config.rsc new file mode 100644 index 0000000..f1b621c --- /dev/null +++ b/MikroGig/history/20260608/20260608130057-Diff-Config.rsc @@ -0,0 +1,4 @@ +14c14 +< # channel: 5180/20-Ceee/ac/P(20dBm), SSID: vados5g, local forwarding +--- +> # channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding -- 2.52.0