From 32b3920903f428c1a8e93f254b91519810cc95cd Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 25 May 2026 22:00:37 +0300 Subject: [PATCH] Backup for MikroGig created successfully at May 25 22:00:37. --- .../20260525/20260525220033-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260525/20260525220033-Config.rsc | 2667 +++++++++++++++++ .../20260525/20260525220033-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260525/20260525220033-Binary.backup create mode 100644 MikroGig/20260525/20260525220033-Config.rsc create mode 100644 MikroGig/history/20260525/20260525220033-Diff-Config.rsc diff --git a/MikroGig/20260525/20260525220033-Binary.backup b/MikroGig/20260525/20260525220033-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..7bfd4fa8b71a78d3defef2d84367b7ae6fefbb40 GIT binary patch literal 164162 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
    ;mJqBMNU*%{L+aOt?4q$ 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

    c%1x%@h#Mro#pmsWl@OYHQavO6Cx#* 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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/659/af48ca83\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 18.05.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/20260525/20260525220033-Diff-Config.rsc b/MikroGig/history/20260525/20260525220033-Diff-Config.rsc new file mode 100644 index 0000000..75e9260 --- /dev/null +++ b/MikroGig/history/20260525/20260525220033-Diff-Config.rsc @@ -0,0 +1,4 @@ +10c10 +< # channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +--- +> # channel: 2442/20-Ce/gn(17dBm), SSID: vados, local forwarding -- 2.52.0