From 3ebd65122c8f0cdaa4e79607c8427e92d4aa3299 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 12 May 2026 13:00:22 +0300 Subject: [PATCH] Backup for MikroGig created successfully at May 12 13:00:22. --- .../20260512/20260512130018-Binary.backup | Bin 0 -> 157356 bytes MikroGig/20260512/20260512130018-Config.rsc | 2636 +++++++++++++++++ .../20260512/20260512130018-Diff-Config.rsc | 8 + 3 files changed, 2644 insertions(+) create mode 100644 MikroGig/20260512/20260512130018-Binary.backup create mode 100644 MikroGig/20260512/20260512130018-Config.rsc create mode 100644 MikroGig/history/20260512/20260512130018-Diff-Config.rsc diff --git a/MikroGig/20260512/20260512130018-Binary.backup b/MikroGig/20260512/20260512130018-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..b449308c6c86010354dbcd27dc39aa5163fb8e44 GIT binary patch literal 157356 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%0AHftMH7s`o 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\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n\r\ + \n :local UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\r\ + \n };\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\"; \"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/20260512/20260512130018-Diff-Config.rsc b/MikroGig/history/20260512/20260512130018-Diff-Config.rsc new file mode 100644 index 0000000..fa4ffbb --- /dev/null +++ b/MikroGig/history/20260512/20260512130018-Diff-Config.rsc @@ -0,0 +1,8 @@ +552c552 +< \n:global CommitId \"main/635/33f8040a\";\r\ +--- +> \n:global CommitId \"main/633/2f6d4158\";\r\ +555c555 +< r: root, in 13:30:03 11.05.2026.\";\r\ +--- +> r: root, in 14:35:03 05.05.2026.\";\r\ -- 2.52.0