From 0953728dab1c0d66947694abf000464b64b4df6d Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sat, 27 Jun 2026 13:01:38 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 27 13:01:38. --- .../20260627/20260627130134-Binary.backup | Bin 0 -> 166973 bytes MikroGig/20260627/20260627130134-Config.rsc | 2705 +++++++++++++++++ .../20260627/20260627130134-Diff-Config.rsc | 8 + 3 files changed, 2713 insertions(+) create mode 100644 MikroGig/20260627/20260627130134-Binary.backup create mode 100644 MikroGig/20260627/20260627130134-Config.rsc create mode 100644 MikroGig/history/20260627/20260627130134-Diff-Config.rsc diff --git a/MikroGig/20260627/20260627130134-Binary.backup b/MikroGig/20260627/20260627130134-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..25f586ad06173b7bccf0c73fa3a6101ed422d7f9 GIT binary patch literal 166973 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 z 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 JA_^q{g5\"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" +/certificate settings +set builtin-trust-store=fetch crl-store=system +/container +# download/extract error: fetch manifest failed: getting https://reg.vados.ru/v1//v2/awg-mikrotik-arm/manifests/latest failed, http code: 404 +add hostname=amnezia interface=docker-awg-veth layer-dir="" logging=yes \ + mountlists=awg_conf name=awg-mikrotik-arm remote-image=awg-mikrotik-arm \ + root-dir=/usb1/docker/awg start-on-boot=yes +/container config +set memory-high=2048.0KiB registry-url=https://reg.vados.ru/v1/ tmpdir=/tmp \ + username=amster-dev +/container mounts +add dst=/etc/amnezia/amneziawg list=awg_conf src=/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=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface=Bridge-LAN 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 +/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=Bridge-LAN network=10.30.30.0 +add address=172.18.20.1/30 interface=docker-awg-veth network=172.18.20.0 +/ip dns +set servers=10.30.30.81 +/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 +/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=1 dst-address=0.0.0.0/0 gateway=\ + 10.30.30.81 routing-table=main scope=30 target-scope=10 +add distance=1 dst-address=0.0.0.0/0 gateway=172.18.20.2 routing-table=To-VPN +/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/20260627/20260627130134-Diff-Config.rsc b/MikroGig/history/20260627/20260627130134-Diff-Config.rsc new file mode 100644 index 0000000..656afd6 --- /dev/null +++ b/MikroGig/history/20260627/20260627130134-Diff-Config.rsc @@ -0,0 +1,8 @@ +2572c2572 +< # download/extract error: fetch manifest failed: getting https://reg.vados.ru/v1//v2/awg-mikrotik-arm/manifests/latest failed, http code: 404 +--- +> # download/extract error: check registry failed: unsupported registry api version: +2577c2577 +< set memory-high=2048.0KiB registry-url=https://reg.vados.ru/v1/ tmpdir=/tmp \ +--- +> set memory-high=2048.0KiB registry-url=https://reg.vados.ru/v2/ tmpdir=/tmp \ -- 2.52.0