From 95e7bc9a51627127113f6b8eb8b6f3ea372a3a75 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 5 Jun 2026 04:20:31 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 05 04:20:31. --- .../20260605/20260605042027-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260605/20260605042027-Config.rsc | 2667 +++++++++++++++++ .../20260605/20260605042027-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260605/20260605042027-Binary.backup create mode 100644 MikroGig/20260605/20260605042027-Config.rsc create mode 100644 MikroGig/history/20260605/20260605042027-Diff-Config.rsc diff --git a/MikroGig/20260605/20260605042027-Binary.backup b/MikroGig/20260605/20260605042027-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..f3ee77863302dd2c41098c56909d4ed2c1b8b957 GIT binary patch literal 164162 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

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