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