From a18a1150d9ba5321fbdca9629d89fb6341f178df Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sat, 13 Jun 2026 18:20:17 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 13 18:20:17. --- .../20260613/20260613182013-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260613/20260613182013-Config.rsc | 2667 +++++++++++++++++ .../20260613/20260613182013-Diff-Config.rsc | 8 + 3 files changed, 2675 insertions(+) create mode 100644 MikroGig/20260613/20260613182013-Binary.backup create mode 100644 MikroGig/20260613/20260613182013-Config.rsc create mode 100644 MikroGig/history/20260613/20260613182013-Diff-Config.rsc diff --git a/MikroGig/20260613/20260613182013-Binary.backup b/MikroGig/20260613/20260613182013-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..9adea5bdefd7a358f5fb68667cd70e5d9dacb2aa GIT binary patch literal 164162 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%0Av-Pp;z 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

$d;?YQ7RvU zK0PkzJa2*w-dQe%DL%o}_pm}HJAEM7Se3d=L9?u~^!Uw|yR#U@5cpA7=BnrFE=|Lk zRzLn&K=zXtn5)&^!xPM~u<;6D?a54FPpeAS>mb&+mr}U>u5?f<>j0q=SoXe3exB=< za5_-B-IYOew@LGOQR*Ho;-RS{99$8%du4_i+0crtjR^CvaN@Oee{ZyH{ZyXrB}yWl z01iY=o86xOn@SxjHDi94`^qn94+ZubUAB0Tbl|Th#zG2c@#Xi1sR>xH=Ywz|>&D3q zyKs!f1y&Y8CZGxzr7R%WJ%KNymJ_{1d@f59QG~V1S{_p)ih4bT5f{Eu%;>1o2y$Nf z%OY`!4Nr_-uDpj8?5u;JXi4c|z#QP@9P);g#x00dufbid(w0&HyW!sR;eLtWrT%Vc zqo$)<3QQ6FWVoVMh?k6{5{w}x@`zq?IKM? zwx-@q)TMh)aS$~)tX{Ks%S-!0y7?k!FIWnFDR$yVSEQ@HofE|Pz{pydej≪?qMm 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,jD$RNgo^2RaWDp8ce;fr9qyv?N8Rl{p zUhVz`!KO5iVIiUEAq$^gfzo=u_!>om>S7&M#oS(RC`+}xou@t%7@n#=wG{EvxF*A< zk=qoQdjEd^4-d^vbILDi(yBz*IJ$d26kPH5hgnGTB};a#yDfiQA~_W^*39VcKQra* zp4KaK`UUlse_~cXWQ!q!o#Z`Q@O$jJJy&ExV{X80H1Wk46O6U~L4IqjELmmWryjn; zz7}F1|3FlzMr`MAr$yDdvj85U)QVcgv2g$BHOwq@LqN%+oHWx=%gfUX!plW*K4Goc zQ&V_f2aU)^PR0%K$pGHtmNcB4FO`> zSV6Jty@%e zL#|g1h=1W~TSxZ3{V>+)?s#%s&YI#7&uN~B4wf#7Twc=Dgf#=qaQD>_*PU#STYBH2 zdQM>ZguMmzuPuEeua7JCt#`UqjGuKEOZSxQsG3aB90#}+zI(X1pjT->fe-ljt^I#yD>{%*BUiu z3(&AMicNAN7?!H_N10cfE?Y_fY)sXLt9yDLZ=&7my!|< z$7)R49>T@-Z-kD&(IGZs^<0%6lp}{%%21Ixmo18zn-_Q<tVWAAKeXIM4HtZs^yQ>04APi|a@vJhbMhRzyyZA~TuFqnyc zcTxPC=yGk3R0aqu5r1dh&!5Chm+&BP!Y7t9I8ki`5p0Pz>XGs*mxR~&zPt(>ih=S} zMK$SwA842hY|&enX&7kww1v~hcx1`w^lN?Os8H+7@YmvMIK^>hFlrBcR(+(jn26+g~d zGa39X8`YkOGVm*F-w<}Z>#wwkZ6*jy>94heV% zZ3^bUUFI)yKEZHn61bKwxV-TErbToLh;gLmJ(47lDTOZ$|M(mduJCgqzII;Lowd&1 zouQP@fIdZ;wDD)TH?!YuaYdhDxlWy6jk`VVPZsgsUYH!-D$EnYY6m}{Xb4$m%a|LIA-eGzn~Ql|?a780N+6ESs|0 z`03qKWg1tZm{-Yo{Aq2|B9T~?Qtm1I_Q0QR_~_#oB)iHrgfD5(kiL9v*L#(%vih}V zlD=iT%Y(Me>bhVGV-5=lXH;`RReAxubl{+Ns*9YNX=tVotRp7Lfo}sJ?g;3)^FIyl z`sN0PLf>LfxKDnbGGaR(X)i_x;9xz{y8ci49ETzq((sZn#G-#U6-O^IK1#ZC9gR?^ z@+2QEbZ*M0beK4bWHAPu!0E1;nckCQyif@_NyMQ&W#;%9!wT>>X^zNSc^}Csg0P@0 z>i`Z;-z8q_NBt^*&>IO6e2egYzXrvi7WaQBd#Mf;5}+&GYdZBH>H!9Xza|V&<}5J~ zxM8J^QJ1@GPtf)MceJBiRoMz-`J6Z>`xkT!W@8bApCl9i_tK+!Lf8 z+&b(rwifnNp37 zqnJBRO*5QHIiKo*9}36y-gC^pWPk-ke~06G-MHlwIO#GK5{}O3z<3m_fS5-IR1)t0 zER0>!#&v1~+9&tLi}gbiiy4W+E1_Q6w_7tEUixlsaMv&LnDeo2_W{5xCr~@SLzU#e zSltyOoT{GP34u1On=0`}qyalS`VD%BYM+uJ{U{NH=y8u=sGrRIIqC5ZXC7%;Yh8gGnt7 zdGKGMUSHJqAGwP3=?em-Y)?qHSmrEe@yIR1=ZokcFxYp(qQRS(H?6pl6H?vQ0j6~{ zAN{{|+}D3Y$;`O?0ei;$5tI^qucD_wOc#u@BZF^$JvPP9UWtC3*Q=9Pr7{vy5lezb z^>N>i74{UqXC8lxgwQgCYu=#GAz`s=pEOs2j9wFOJG%3`0~u)$LlMe{VB4}`BQr5* zOH+=Q-=s6~c<-LM3`KhsTJAiFXJ?eQkfXA3P_=%-6?Nm$Tjs^>7n*?^0Cu?qYKWd- zbdS!=I_jP`Azwk32@+|eF9J7_l+<)Lg#(ra)Q&P_PVM*9zW___&5HNk<_CYcy0yd`@fG0N5(!E6%zhx%XkvpW8t}y zJczTVah7e78lTzRV1gShqXY|>ZI(trDpYR?W;9|~GL%z#9OXEGJX603Un#|VkS!}8 zxX#yLC#Vp4|D$~72~PKHRC{vdI$X*hj~L6@J$#%UkNCX1{PZDka&zxV%je|W?li+U zodLMq_M1iw8#0cc>(h(NM|l`r@JX+#6cMjf@Bd*$Wj;zrCUF`%SNx~ITB7ti1SXLS-j=x&|F89Ci;rx#6A)H)e1vp z8+dWCPA^EbX32Qypnh*cI}d(?TC$C zr)=RsNtCu~qvQuKuOb4gKk|e)RT^c;9$9>0Lm&%k^os$kD`JJ3uMb?|AuaPFe~qPu zIsBCnu!DbL90M9%Q<#Hf-Gn zo}HfTEirH5u7E~@+u;m{yW@eI>~AEgA|=?6<*Xcf`#T-0E{A{WY4lDCr{sHjdY&y5 zn-Ys8!~CQ@B@nm5ajqF~oRfyu#h<(G3I9k##E6pgwn>kw6eDZt{CY#{vULl;-Q{fJ zveEX|1>PTl(nHCgPybl8V>n%;^)_V680E;b>;*l$(^)*E+u4d9V7K#LW^rRzcw5Dn ze?(jaNYVAk{onEB~IOtUfI*K7G|5jR2}DAec@5ai{3 zdK2Qqna#Iq61>O@x<7>!h*A?&h$iVY;4jT6^xK<K`o9~>IjRHwC-?u&( zyZPE1I^4hn3Mig7e+|*b_bxFd26e#%!u&nj@P??m2i5pRgqM2fTDyHwPeFa-4h0&R z!TpzggW3ywds1rA*!*Q{=k?H5g6t6bT3Ty60(OybZ8}VJapiYlwh-chZ!&k}8GQYs zHY(&yLZa@SFcJND&l2c&Y=RA-{u|0{BZZ(3ilDx^^on+LW-(h2%wHUN$Oe}O7*c41 zL4p~=D?2pDc!L_+N)Mm4YiTcpBv&TdtFI7najbcPj-K`?iYb9~fqnKYz4w@r{mNPjsL}o7 zc`m!>deZ0lJ~MSj|5kIzr9vBV0(iG+gbvyZ0D^3l^ODq@)>`(Egs{|1KM8|f3B!cv z>e$MQ`J-#-(6;=vj=Li+Y=NP+Rr(_4YzXNqMVa%)o9NTrUY7&b6BTwT|>64-Iq6|0`NMhQ!DQ=>wpl}5Odg}B@BpYRQ9(ThI^Kp# ze|7<}nx~LkZJc!LsB>6XTILZq{gW1A*cB~b;2=;41snq{QLLD#zDVH&Y8|v(kp0>) z+i&PbJ0}F|KXDOUVydA#=-%)*Y;ul{6f&%kntvI1PL*m(Ek~VDkT8#Pb6k2oaZ&^L{G7hFS05*|9l%a^kp|DxN&a(rRI1O4EfMojvMm*aU zH?xfub1JemvWTscq7W%1kR=M1W*EcaT0`iY;q)P%EuP7I9Z6$Td^V1NkHqBt@1J?h zu_CLw@ZNGGYSI9*W5PPEnLO9``jN|q5IcA7mham-zjjfHX@{Iw?+d$87s{cdYsEA740lcdJ+Gez^u^QY;~sGf$!o7fvz+?key;lUNQ zsv4~epPhWI$Rl>LWC}b}dt-lfX*4>6c<(S*w4yOk#vVL%oV3#0atBqmNP*Uka;sZ7wV8x$CKiV0A zAOu*0JLb9k1ywC$6<@{8f!u-(ty|EdtuHF4IDPoKVsYouNpW}iie zJ1rFUi-%i98@}j^sHiHwQ6p|Cn;5U;-vvq{g+a;+ago$GX!`0&KB3U0n(n2}@(R`@ z%ycU)-(qo;8S+k_x4I8Az^})lQ{sKZ=F_B;PFB^eb*jREqwKuW-v^!rcedjE{48a` zT-^uu`OX@#2*2s7*nGLQeUK5BqkqSoI4lwRBV8P~Ek`gDS?7=4F$rd0knvq5LpyO% z#?BMszI{bij!4^dkuh9`jro}Fbp~_$iAPwxxaggSRp<|DsZUuVD!zO{R|5lhl_Td_wU;q-S083SAqFVym!#^yD;6j7AdY_IO7Ty9Y7bl{h;5JndJppD2 z0N-CmU^d&`ynM#B1}+d(n1sDFF)C`A7H)q!%@DQ!b4E<2$I(p!+HiEOF5}=)ld+P? znqlczz+J`fR!{({2CD`-Uc;tJxdwEcsP8WvnV_ zDlE;pldegN7o2{RXoY65+0H(3n2q|cEAzR~DWzA+q!!t$eLgvoK}Usn^U7;s zE}n=?gusiijG1s61ygbak3*kC{Bjo?2{?UlGG>=IbGZ`lOK5{pnrKqorKD8&;23Uk z^P1E+ZY7`4AH+L8@AlH{JIG1$cW6puGD=6Y)}#%@MR=iLd%4s+AnSpF@i2cWr3Kxs zw?YW85&b|Mfc&o^Rn=L(KxV$SzJ*F!Feg>^lvMjN|BiR8tV$N5nK1M*ezQd2N@;4U z-93WSl>bFiB4P8T_+LK9M*heKL_R9!G*m5mo&JQ1m6b{?)58nBoH3PWo2~cWGGp2* zzL#Z5t|e3>RwEVC>GLM3vLorHURW$Z2MZD2BC_ieaS?P>HdIoMHNq#hI5X!qq)$Nh zt{;JBW2mLapY;_~7G3C_i`tQ(nx_@6CSLkMT_>JUc3N!E0pGMT)9q4Dk(=Wo3z3dI6%I zM=iuJ8`tG7_jqPad2SkrP3sszd?D@V#L?e814h#lJE6QIsiL^-4erk*TaycFIH^Q zBknA;yV}BN7fUGN>ygEV&*%x~fCwk9>V6Kz9J|C6y!Q zCx8{u(-$3e>uAO&c)wYfc;4xQR((oJCh#*8c%yUS|qMmGe5!y9dH) zsenF?VN>s9OgO{@ViAZsYS_n(G<*K#ET=4lMv#uNs3~CsIpuj;s`u3dLQh*qjwd`>qE5f=BH@ciyIwNsAZ(sQl zxP8UBVRa#7ag3F}A(s#zX>*OuUtwn7hHj;iiXzGi1<_*HB)eV*U;fI^-!RB$O8u^| z$UAI=1s;*Q{O-wlVK8o!o!VTtZMtBx362=)@%=v_)9Q`M>|3`60QsuS$wEOciI_1o zr0!{T2a5wxs}dzTO*PzkqzPfti35dd&%M`CPs^@YO+ya>!jBXILjk=0X}!rlZa=qT z?%)^;m%WbzR~s9{gYzjE4`abwRKv28B-Yw-`M%T=sl!K)L=lddW@ML6*~TdmA4I;SjG=+6Hfo4(7W`O^9hc|E-2WOt+j*=qOh7h_4e>KOv!^sIN+?PLnh3e zq4d+L#~PODT{NXpfC;Zk{aZN-=tDEIn_Je};^?n@C#D*@V5V_~oTHp_a>`RNTiw`kufUQx7p;8h0%g z*)M?_xrFJ}|DQ#=Ra>~ki}d@UPJW7C0WEijcF@Y`<>20XyI*3`QTVNe%JBaN>}IAW GEZQ3c!dV0W literal 0 HcmV?d00001 diff --git a/MikroGig/20260613/20260613182013-Config.rsc b/MikroGig/20260613/20260613182013-Config.rsc new file mode 100644 index 0000000..713a13f --- /dev/null +++ b/MikroGig/20260613/20260613182013-Config.rsc @@ -0,0 +1,2667 @@ +# 2026-06-13 18:20:14 by RouterOS 7.21.4 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-LAN +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados wps-mode=disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados5g wps-mode=disabled +/interface list +add name=WAN +add name=LAN +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/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 +/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 +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface list member +add interface=ether1 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 +/ip dns +set servers=10.30.30.81 +/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 disabled=no dst-address=0.0.0.0/0 gateway=10.30.30.81 +/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 +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Moscow +/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 package update +set channel=long-term +/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 +/system script +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\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# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"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/683/6160edd1\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 11:50:03 12.06.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="Download custom Certificates By Routers Identity " \ + dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=\ + mod/AM-Certs-By-Ident policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Certs-By-Ident\r\ + \n# Script comment: Download custom Certificates By Routers Identity \r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n#:local ScriptName [ :jobname ];\r\ + \n#\r\ + \n# CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n:global tmpAddCerts true; \r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n:local UrlSuffix [/system/identity/get name];\r\ + \n:local UrlDir \"certs/\";\r\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\r\ + \n\r\ + \n:log error \$CertUrl;\r\ + \n\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n:global tmpAddCerts (a);\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n:global GlobalScriptsUrl;\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n" +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com diff --git a/MikroGig/history/20260613/20260613182013-Diff-Config.rsc b/MikroGig/history/20260613/20260613182013-Diff-Config.rsc new file mode 100644 index 0000000..be5f305 --- /dev/null +++ b/MikroGig/history/20260613/20260613182013-Diff-Config.rsc @@ -0,0 +1,8 @@ +579c579 +< \n:global CommitId \"main/683/6160edd1\";\r\ +--- +> \n:global CommitId \"main/679/bd93dce4\";\r\ +582c582 +< r: root, in 11:50:03 12.06.2026.\";\r\ +--- +> r: root, in 13:30:03 08.06.2026.\";\r\ -- 2.52.0