From 44fe839ccff1ed7dd4dad366367a878409b08146 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 13 May 2026 15:00:18 +0300 Subject: [PATCH] Backup for MikroGig created successfully at May 13 15:00:18. --- .../20260513/20260513150014-Binary.backup | Bin 0 -> 163481 bytes MikroGig/20260513/20260513150014-Config.rsc | 2648 +++++++++++++++++ .../20260513/20260513150014-Diff-Config.rsc | 18 + 3 files changed, 2666 insertions(+) create mode 100644 MikroGig/20260513/20260513150014-Binary.backup create mode 100644 MikroGig/20260513/20260513150014-Config.rsc create mode 100644 MikroGig/history/20260513/20260513150014-Diff-Config.rsc diff --git a/MikroGig/20260513/20260513150014-Binary.backup b/MikroGig/20260513/20260513150014-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..a962a938b5f3d0c5c049a0e953ca69bfc2e04209 GIT binary patch literal 163481 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 wj*Zoo4qy!@e2o)MmU9S-s@uNX28*j\"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\"; \"mod/AM-\ + Certs-By-Ident\" } 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 :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/635/33f8040a\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 11.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 WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\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 dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=admin \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\ + \n# RouterOS script: AM-Certs-By-Ident\ + \n# Script comment: Download custom Certificates By Routers Identity \ + \n# Copyright (c) 2005-2026 Vados \ + \n#\ + \n#\ + \n# requires RouterOS, version=7.19\ + \n# requires device-mode, fetch\ + \n#\ + \n# :local ScriptName [ :jobname ];\ + \n#\ + \n# CloudFlare\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\ + \n# Quad9\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\ + \n\ + \n:global GlobalScriptsUrl;\ + \n:local UrlSuffix [/system/identity/get name];\ + \n:local UrlDir \"certs/\";\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\ + \n\ + \n:log error \$CertUrl;\ + \n\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\ + \n\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\ + \n\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\ + \n\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\ + \n\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \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\" ];\ + \n\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \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\" ];\ + \n\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\ + \n\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\ + \n\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\ + \n\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\ + \n\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\ + \n\ + \n:set CertName \"GTS-Root-R4.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\ + \n\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\ + \n\ + \n:set CertName \"ISRG-Root-X1.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\ + \n\ + \n:set CertName \"Root-YE.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\ + \n\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\ + \n\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\ + \n\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n#:set CertName \"GTS-Root-RX.pem\";\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n#internet\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n#:set CertName \"ISRG-Root-X2.pem\";\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n\ + \n\ + \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;\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\ + \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/20260513/20260513150014-Diff-Config.rsc b/MikroGig/history/20260513/20260513150014-Diff-Config.rsc new file mode 100644 index 0000000..4c3941f --- /dev/null +++ b/MikroGig/history/20260513/20260513150014-Diff-Config.rsc @@ -0,0 +1,18 @@ +10,12c10,11 +< # channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +< set [ find default-name=wlan1 ] country=belarus disabled=no mode=ap-bridge \ +< ssid=vados wps-mode=disabled +--- +> set [ find default-name=wlan1 ] country=belarus mode=ap-bridge ssid=vados \ +> wps-mode=disabled +14,16c13,14 +< # channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding +< set [ find default-name=wlan2 ] country=belarus disabled=no mode=ap-bridge \ +< ssid=vados5g wps-mode=disabled +--- +> set [ find default-name=wlan2 ] country=belarus mode=ap-bridge ssid=vados5g \ +> wps-mode=disabled +55c53 +< add address=10.30.30.86/24 interface=Bridge-LAN network=10.30.30.0 +--- +> add address=10.30.30.86/24 interface=ether2 network=10.30.30.0 -- 2.52.0