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