From 2594c191479c112daf8795114be3b6f383420337 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 28 Jun 2026 07:01:18 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 28 07:01:18. --- .../20260628/20260628070114-Binary.backup | Bin 0 -> 166733 bytes MikroGig/20260628/20260628070114-Config.rsc | 2703 +++++++++++++++++ .../20260628/20260628070114-Diff-Config.rsc | 14 + 3 files changed, 2717 insertions(+) create mode 100644 MikroGig/20260628/20260628070114-Binary.backup create mode 100644 MikroGig/20260628/20260628070114-Config.rsc create mode 100644 MikroGig/history/20260628/20260628070114-Diff-Config.rsc diff --git a/MikroGig/20260628/20260628070114-Binary.backup b/MikroGig/20260628/20260628070114-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..a25e03b8f12f6d6c99a0b4d0b0b67e28cc13a2f8 GIT binary patch literal 166733 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 J7fv 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 db9lG\"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/700/f14f095d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 22.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" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/container config +set layer-dir=/usb1/docker memory-high=2048.0KiB memory-max=2048.0KiB \ + registry-url=https://registry-1.docker.io tmpdir=/tmp username=amsternl +/container mounts +add dst=/etc/amnezia/amneziawg list=awg0.conf src=/usb1/wg +/disk settings +set auto-media-interface=lo +/interface bridge port +add bridge=Bridge-LAN interface=ether1 +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip neighbor discovery-settings +set discover-interface-list=Internet +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface detect-internet +set detect-interface-list=static internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface=docker-awg-veth list=WAN +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +add interface=ether1 list=Internet +add interface=Bridge-LAN list=LAN +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=ether1 network=10.30.30.0 +add address=10.9.0.2 interface=docker-awg-veth network=10.9.0.0 +/ip dns +set allow-remote-requests=yes servers=10.30.30.33,109.107.177.79 +/ip firewall mangle +# docker-awg-veth not ready +add action=change-mss chain=forward new-mss=1360 out-interface=\ + docker-awg-veth protocol=tcp tcp-flags=syn tcp-mss=1420-65535 +/ip firewall nat +# docker-awg-veth not ready +add action=masquerade chain=srcnat out-interface=docker-awg-veth \ + routing-mark=r_to_vpn +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add check-gateway=ping disabled=no distance=2 dst-address=0.0.0.0/0 gateway=\ + ether1 routing-table=main scope=30 target-scope=10 +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=docker-awg-veth \ + routing-table=r_to_vpn scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add forced-ip=109.107.177.79 interface=*A type=external +add interface=lo type=internal +add interface=wlan2 type=internal +add interface=wlan1 type=internal +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Amsterdam +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=10.30.30.81 +add address=10.30.30.10 +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/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/20260628/20260628070114-Diff-Config.rsc b/MikroGig/history/20260628/20260628070114-Diff-Config.rsc new file mode 100644 index 0000000..b6165e5 --- /dev/null +++ b/MikroGig/history/20260628/20260628070114-Diff-Config.rsc @@ -0,0 +1,14 @@ +16,17d15 +< /interface ethernet +< set [ find default-name=ether1 ] mac-address=48:8F:5A:8E:1A:BC +2569a2568,2573 +> /container +> add dns=10.9.0.1 hostname=amnezia interface=docker-awg-veth layer-dir=\ +> /usb1/docker logging=yes mountlists=awg0.conf name=\ +> awg-mikrotik-arm:latest remote-image=catesin/awg-mikrotik-arm:latest \ +> restart-policy=on-failure root-dir=/amnezia shell="" start-on-boot=yes \ +> stop-signal=9-SIGKILL +2615d2618 +< # docker-awg-veth not ready +2619d2621 +< # docker-awg-veth not ready -- 2.52.0