From bd8adc14f4653291862f9c74e1f1e10bc03191a3 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sat, 27 Jun 2026 13:21:32 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 27 13:21:32. --- .../20260627/20260627132128-Binary.backup | Bin 0 -> 166311 bytes MikroGig/20260627/20260627132128-Config.rsc | 2700 +++++++++++++++++ .../20260627/20260627132128-Diff-Config.rsc | 12 + 3 files changed, 2712 insertions(+) create mode 100644 MikroGig/20260627/20260627132128-Binary.backup create mode 100644 MikroGig/20260627/20260627132128-Config.rsc create mode 100644 MikroGig/history/20260627/20260627132128-Diff-Config.rsc diff --git a/MikroGig/20260627/20260627132128-Binary.backup b/MikroGig/20260627/20260627132128-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..a667fa6ce90d07ec585a42e10d8eba5e22bf36a6 GIT binary patch literal 166311 zcmV+aKLEh*sF8E0i2?xa7tLlbv0*z9sDo;Ks!dq{0002|`~QB>&;$Tj!s&Jyy=;$*|#Zt_&{(BV&mNm8Q2M97I>w;*KKkU{9Kp>^}W;73pQl zE;KM}?)bx-4uc-=hyfD+fVPVKqv_Al^VSW1XxjBA6h&gfTKRXErPQ(`fjqfA!uH)77iZFd6d3TLG~Hq3~A*)XoQ|`a;P` zS*r;pEw($%Jm~It-CxyT%0bQOYb2p%&7_w^X6Nm3OB zi1VC(ULd>ZXd?(sf;LR7r9+3$Nl++cFHw+5nTlkrPAvBq2Gq(Fv1o z_s;LCUXB*{K?yetG-=ll%jJP%i9Pp*;)NthTku{U%2U!Ngz6ywsxWRNTWvt#P$qmS znBKobYCrn>>zB3J7(iCu+IXH>o{PF~vV(NPJY|rr;1(v@u#9*52D^fnPxJAusI1HB z{uc!7ntTt;ii(U%SHgR+$pkw6@n>iH%s^Jq(XL z-~n>CUYP3Tk~dGk*gBSo>`A2}TH>&3JH+|1)2O8$6#^Xa*YR+xLpBXlYI$I0)ab%L zcRKf9#ca#5%U1K)CBAG6cdTgBSb2rEx2X-7L*H1=Eop z%)({6rwAT@crny_@y7ixR}!HWk1fOw0W!x?haOJ$s^IYPJ5VkWIdbP?j-ul^ksCVt z5v*o6$D<;q!3$Gm>khdYuYmx%S?4{KtvO#jM7>nQ*9xx~;mtZD4UZiks27Oi3OYG! zGOd^|DNW-YloBrkCVR$C?vOa3A9;2+NQ{)%$@kc?O_w!{*{j0CHqLZ&ZD!)|_|S60 zBv>0C-s#cSPmdVHHr-Ph8b_{=cvnzlX)om2=T}wFbN)uX^~t9L$gG~fe0&wfF$=mZ z^CYeQ_yymg9GsQ@67sk2yi?rJdDH2ynrFl|g*wQ|*BRPH8m2u9VVN}7uwy)BhiH|9 zT_}ib2YdES5F*%urZ6dN__9z=@#IF`j4m;A$kXb>_i@tiaI z75}IU)?=W9Um2MHul}^468m%6=px?0h|6uh5fNN!V#cawE<1@xDa3W;RHK29gxE-^ zIZHwfVzMzRb^JH_0COPD0W0p*)P^4?Gri{&4F~Z1oFXu9vlH^`t*k%b0a8mz)mt)N z*BYjV>A!4{F_+vrw~?c@;0!L~em`*7t%*MSVX;Y+1Q?Rn3mz8JIQWb#nsv!Zm~k$| z$L@3*pZYrW?vJv;um~&?=r#2g9JVgC@aK+#yl=>ljzgz(HV94tj^g?rZ)0z_)R%86 z9(n=kcZDRsCEWO~Krh5;L&E`B9o*E_|MyKIS+t3rQJY2%=*fESislP9<7B^tP8O+1 zVGT!(W;|UHmmch&mD1}%%8g|$!C~dh3C%0AMQ1u)WHexO4NTJjjyX=~9`DfD{Z2y` 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%0Akh2I(Z1SC?0=bO0(FK9^kmCJ^V-edm&D(*+tFz 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 Xksm;mRXZwDX!XBq_&Up}j{@M\"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 config +set layer-dir=/usb1/docker memory-high=2048.0KiB registry-url=\ + https://reg.vados.ru/ 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/20260627132128-Diff-Config.rsc b/MikroGig/history/20260627/20260627132128-Diff-Config.rsc new file mode 100644 index 0000000..8603a50 --- /dev/null +++ b/MikroGig/history/20260627/20260627132128-Diff-Config.rsc @@ -0,0 +1,12 @@ +2570a2571,2575 +> /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 +2572,2573c2577,2578 +< set layer-dir=/usb1/docker memory-high=2048.0KiB registry-url=\ +< https://reg.vados.ru/ tmpdir=/tmp username=amster-dev +--- +> set memory-high=2048.0KiB registry-url=https://reg.vados.ru/v1/ tmpdir=/tmp \ +> username=amster-dev -- 2.52.0