From 0a1947fb19907511a1b74ab8af510d7ee42977ab Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Fri, 21 Jun 2024 02:14:49 -0400 Subject: [PATCH] all: update dependencies and fix resulting breakage (#122) * meta: update some dependencies * internal/tsutil: fix some API breakage * internal/ui: fix API breakage * internal/ui: add `CaptivePortal` to netcheck rows * cmd/trayscale: generate a new `default.pgo` * meta: add some more changes to v0.12.4 * internal/tsutil: use Tailscale-provided no-op logger * internal/tsutil: fix netcheck bug --- cmd/trayscale/default.pgo | Bin 14798 -> 16788 bytes dev.deedles.Trayscale.metainfo.xml | 3 ++ go.mod | 28 +++++++-------- go.sum | 56 ++++++++++++++--------------- internal/tsutil/client.go | 22 ++++++++++-- internal/ui/selfpage.go | 12 +++---- internal/ui/selfpage.ui | 17 ++++----- internal/ui/trayscale.cmb | 11 +++--- 8 files changed, 85 insertions(+), 64 deletions(-) diff --git a/cmd/trayscale/default.pgo b/cmd/trayscale/default.pgo index 282aed4ea05f0c0bc92cded99b5d52e64f67c236..bbec9fbe9c3f461d2a6aa39288644ac4d5b33bca 100644 GIT binary patch literal 16788 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 literal 14798 zcmWlgRa6{H5QcFH9^683cXxLQ?#|-w?iyTz1$PMUzF2_89fHe3aF^iRz4I^+eR^j9 zs`~2hK7Dq`;*g;Jzu-Q4UJ(PBV^O&o(aGSt$Nzay!TW zv>E^HE9AC9eR@(mf{)#-Ymg>%%^LY7u0UbV;@S@&44E7QXk1px?>%?L1mXd0n)ZxQ zzJ0~M(+1}xH0cs68vDr=t&9Zc7SGy)zXOW5?1TiU1=S4VHeL@F`i0ShMW_Y!?FV@6 zV(mz1B93ZDtTom~?U;Q6n}8x?J}wCmfi(5G?}DZSkKt;ucwjUT!gJKfTZulcX@r?U z&WcQSxmw9+O;PQtkXLPMb6TtGe&;}02_%WvK4TGQHnq5{BsrwDwc+(*3Lu{ztW~)J zhYjwcz?$XQie&m{09bVDd}>WVm$nPo*cgmw&kUG5RTLi=cvOopJ7nX(M5E?S|1rGg zbMt;_myD?KQ~L(=!VMyWnlG-E6zMiQt~{f2H0r^ZfxM)PPqFEFWTXWmnfl{t^zDBU z_gCvx^)=DFGD5hwwr{ttyY>?A40ROO<)!{|$UY?mTeg{`dSCsrmTak=Jr+KxAFC z?0LFODp&`f>c9ch-;PKFG&-Hi{$A~ znpEd>3UQ~Z@Fv2T8Bbi{`MQFUFCZW&vyNHNg_`Tn>?o;(yrc|Xw9G#9ag=m>Cyq5O zArDJnqg3KeD9H?cahA$Ac@%f|YT+R)_{n0+(H2v-K60(Ris#6||9$~*@cO|6|1!R; z(I82($=x<-?)a(m-|ncGCuspfTGEoo8P+#v?rEu7g8I-jf2XYu--LTw$A(>*v`Q-sb`Y~dQg2(5PsLib!OIIvVf&4pu|CD9rdF_xWqAIc&!{@TJ#Ay2R!UJev|`t9BcEdZtSS_bWqM{ z``%`YXP=Ye415}W@kD+>FX7cVni?CWq$QAXuA4PTX4Mw6cDXre;%;TeS^GL>z0I(p zdc~$5&M~j$qCh)-RpA^@=jq zviAG|fpPk}=$A5H3*NlX22Eh@0>itf1(#gG>o=XyyVe$!9>i72ORkH~PrnfX@5&6i zssY-5`t)0AXI0(=^)P<+ZZF)Q9QP1I18c1IdO^m1(XP;i?c{Np)kiZ|dB@5FS6cw* zz@a<0KN&s2u@VN4OPU>#|HxmCh>7~5kJ?C|n!Z#zg^9(to{xD}RP6x3?emb^F`#S9 z_7y8^0e$}uhSr(ul{`kcfW0mHR_0lC&WJpQq{~`Lz;ix@OEi*U583KB-h|-F9j8^b>6{gVf}fL3q${`Kwe723-RItaTu=7t^=i(gjD7bBKw?6#FiQN| zw^vD^q`S9-Lypz^mb|e>ls?F6VJoslC8&VnQscEf$_YXZ47O14Z^qk!1wlWDBFvaO z;@>Rwv4$UYbBj=>w{eTakd%@+a*S@*FaR>Yvp+QkHMrhaK3F*lzGB~Czo}ZRJH)jS>%BjHF5LL?O~=nM zDOe%s7n#-B;+ne2Q&yhWmgS0Vw`F6SAiw98bc~PS&WrkiSHCEw=t6fqv3RF2=yoOm z=7{wA7JIQraIYY(;504a0J}+dJuTp-RN~t(M#WK87Ixh?o-c5B#`~$Geb5(qR|m)Q zUW4Sw_pk|lVXSA$#vNKk-Xmlc?w9eDpN|oVE(bSWl5<4WkBqMHOO`geO~oUE3a?+( z^lFr8@mD(g#w(>vP28?2h8q}x!oob==JKUMg^dJ>r$PI9C`)bd9U*F`rCsbJm%!0{ z|MT7%kH_ZApm7#(D_M%-w7{3*A+CU1jw^6$i!C2bug9t z-Mivr>EYG%VBt32TmbDy79cpDxLghvM-qP7dtdzhvNJTc>$lp0_W9ztLxRC?$;ZOu zMc2_}L-zUZmn#Rs2Q6R@`yaQZtnG{0x2guRd}XUscU0cER>?6zYf+@bbJ@rCsztKh zPC%W=Ob7Db=C`rv(Ezlgx9e1{t@EU$ud+vdTuzQ-=I3l~Pqnl#elo&(IiX2ZvL}5U z#&8z}Dc>$$FlP}<52TvCpx(KkTHlF1`MN=yaqsAVV6QEbs}mN`eM&nHQYaLBC$ zsZ4hps*yw>s>g<3&Bc(^(p?~YQpw1FU`=*q6MYB2NH|I z6MqRKgT+o-Kp(ip%1*k22l@DT;Mrq!oz7~kfF$0IiAx#@<}DacJZpdtgRJ2`bZ^47ohB*%DX8FcWkgLJn8xg^VYlX zh$E8SfD1^T7lwkC@7=%1NT{qcuNMyk=9GLW2vIQC_7Mqfm|}R*r&G%aoyI5LT0)XX?@#;a=}sf z6^c)UBJe31$qEpvId2rRo7r{-@ zNC_h10NPBO*NO$bL=->r2YD(>U%LkgP*gC+rY%pZEc$_pGZDlPMlWqv=k#Mf7Hg3B zMPO4nadva`U-+1RTT{5v%+E-SRDbP~%P9E8(u4Ft3^Tl@A2B1d?@;P&(*tc*C*|a; zEsqDW(9-_HuWpH-uj{!DMwcA9{IrWIbjQtWGdCXZ)Musl5IGc(zt2eT8BiQL%d+ney0wV{qP;-tw6qKL@ApctwkMsO*U~YD z5qHc9E1{O?dhZ(?S=0p=w|vY=tTOxNr6ytV6XHpo`vu?VVoi1wHH3pgS*7>YrHkAW zeF3Z0vF3O|3}so7FIdMqINl-UvdOggEYSw_A>OKqdi|N?ZiMr!vQc?P-(IMF9~2`m z2i76$qI6GA@yUSBS2y^1d~%EKht^gK;O7*^rI{+d8d7}dN zVu!W*W^gMurth4)~YlvG{NQx5wo z`x@5cL()96D9m;u=-l+zy2v=dpfwHi$!=iCwAy6vR8*NY!embnvlG_A^Sr`^JU1TF z9ZMXEzYQ2QNWNc6?W>e-N1{SP)4=S!wXv)=S#r2%?14+6<~A@p*Obcl`zHU$onK4! zO0=B-+EjpnBwIytKb?0;;Bc37!L!`c;`Yb=H!0epv^n}CO%DKqpx-%}z164<@?hM+Ec2BIE5$#GHxYm#EQ>1* z#o=NmA)Q9jz*yBc=RZQ0ZwqsTN0VCBv%m5pLH^%9Skg#KNF%SFz?!*2pLWY)m?Ho9 zUvw}nPs;%2s>hLJ_wv~6HfwJdEuaY#mvO<#JNP7M4k9A*p;H z1*|FAM>=I?HnQDlOkX)H;YOJ@EkUxBCo+a&c%%>h^cJXH%NQmNse*oP4`__q+c!^XFODt0RqKd!}MITB6@CNlCWTkN_kf&pfJ=Bp5_HOv4g!Z@C#y!wUM8Qjz@5#W78g=eSfS19%U! z6!Z8rIH6H51ix#I>5FhYLjkVgZmwP9jxl^ZkQDP^7@R0nvJ0&^#Pn6cVut?!;-v%! z)y1et`q(OX5Dm^y-t)aZ@Tr19URCFemFX3@C5u){|eLKa?(ka6> zAO0@k30;2N6=O_KaoDp8gx&TS!`Fjum-gJ~tBToGr_c%=EMMH?dU9|=Z_}wwJ9(4M z@tnRF+Ic`ky{7UJp3f^RMR15@;Bi5Y{^m~|Zg0cLI+>Niz1Aav76PLrCo$gQoY^V5 z&o_7;jL*znXz-L>v}rBtSb7g(O_T6Q1?ayfWgkzu+KfW3PGfrNCVhyquF<7bI;)*H z=mH_TNc-ORFvP_b+^sJn#97Rgcb4@o6vS$QdDy&UX@T2Jkhy~c zI+lT3{V}smbnaw8H9WP7>pS^c@;}=Q+O)dyQ#7_7kw^|GBFIymOo;Q}V?bmnBCA+?sZ^Yp^jw9}Xt}u{w z!|dWOOaWnblQ5r? zMi=(7q34T;?_-y?6Ui&KY5BvYl*J*2{AGa9$(c}%`OZlZjPUc{s3om!5{26Yg|s{O z;APT8;#{5hW4;GQoy;R^%qzUjHu1_9Ox8E7Cr#Xtxc;Lga*mHk{RE#SU7;radni9l z;fRc)=sC*DM>;=L5935oc0mBlvtis--#plbd9Z-|hVblm<<#1sbreg_CAYW}eb-$- zoz)Og?Rx+^SH)n8FHB0`)(aY_6K7YH%Z!iw8-?3wxZQ{MU@)v|^#cwCZO|>WVN~4i zXVsMf^N2pNeH71`%{YC*Qv&R7~xePpL~6KrTCS6nf=wSb;G>;8;EV}Ion+r zU8P$PO^C z|G3b<044SrrJLj-N&AvgHpu4EUPK4_!FPxRNya&PR!YXmG4wnJ^XASVa39fOYahZw=q zzIpf5l#@P^$VBE96rn&>@0NaS=-{+{{9`*A>-PcwK@~=Cu-~KNKV8CkS+=(m9}^h4 zCiIiAnn%#*RC#uO2_K~K?ysa3Q5Y%|DcAV9@~M1sNJChzoPa+ z!L{!JuJl4uOF#Gt%(ziF?<7o(5NY37p_8fJoQEoD3;c}@=V1H1-ZudjxSRdi`3t-X0-fpYfpNqoF z2p`Li6r=Wj)`^4hyXxo3)4LN2U!wECmg? zo54+=a(J+R=@F51hT4zfBkaKpp^|5b#NuW9!6+bl$WvcJsE+$cA@5<9bVg)6f|MTmt97CDk_xyIBJk|rN-t6rbAi+e9|jUx<`B~JR$kFRs8brg@lU zj9;^MseJ#}^a>@TJ6%oqO!SpG7c~G*ER`xa3X9|fgYa44tD`O>lsv~HVSN9SOcW4V z4v{w81Pam#A0b$Lh@5vxg(-1q1I`e>_G8=A(-D5gw{zS%_WSY4JN+NOpy}dn2QaPZ zGR%|=(v$y-wu6)G$t=2rQ9TYveZx#PfaC`Q(g&K9Uq#1fMWNk@bMLkb zC=eHs%tfbXzd>~}tE3{T13tpp2F>4di-Ms&+lS;oIG|Fgd~sx2oeQjvtoyr!RS?Kv zAwPS-7Pc|Nd52=U2~GRK6l!r?;( zv8NA#_>vpPP)SJXnP-3ltfIukz1H zPhw9#P35j$*usdq|AxkPr2qFLYDn^D9E%U3Pm^5cgZUv~xZuXy@gMTep+I$usyx>t zLhLWIzcTT5kj9VP)Ov?X58};K1p}3|Z}tTE+;efz{!oU@WWPw|wj$NOJ+E-E*cNBP zJc#Aq6+EiN3ggOfI|pO;qBbDz0jf>-Tp&yhV81)x#?7Z~aK4&uuh*{tKn|Ed>y3x;+(n zxB4WHuw=6VEkr^qe{;`!B`THr{#@c}js5b`$j#7G(f*au!9(+eQCm-AaeZ_I&$m%C zMXidCAwK;jb}1m~Y!bh^$#6eX#hCeiza)1q$h2|LqSJ)lq-NaBz)7Z6Gh;y!@$$Eg zwMp5A9w<6*vus*{|AgruZuQfb)ofO6%T5qVUXT9Cm~7sXZ*NoTDN7^sc%WTI?p%KH zL-yQ6+)FK!U)nU#8Glpb_+U7;=5LpxgSqly?i~6oVbfa1>3Q`efH+ZXGNsA;Qk_dN zwk`MhnzX5#QX0Cc0yXaFJD^ejZ)BUH3H#oh60$&W^baC_Il>~jBy-1!bW8D@*j#kiVz%19o?gglwZR;@IG<=Pw{Uya&cEl*xrjl3JU25uocZVkf<3FMPaHrkv z7v&r0rcyRuqNik%p85$*Ke1l%l0LmGtZwb7XMSPWKf?Zyp{9%p92WnJ-*RZ-7XNwl0~Yy@!YM+bg$+A@~iu{n67_X2cV|J94ow+ zhf)@cQ*#2H63{v_3e#BCoG2)jUov~o z+L932TMDT9qm{Awq@b0dr>L`NbaKL?b+~j>FW75ZP!)u3vNF0CUV z*x{!IzqSDkYQs@gb>ERz9XA9=7GaQEec}-*M)xv8p~}P?}5^7?%>Z6xy&do z?ynLuOXElnc25Ryo;Svxfpx1xx5Ff_!w=5`H^pDrC7x%6OcPq8F5vQ6gW3%$LOVAy zP7fsZ<2GvoBdB#qXMD-GjQ|hcbIa(u2F#0JR0a4<^7tJy$L&ToxWvd*%}9A> zW@&s@{vfrs>&k7$n8C-G#+SB5U%&19iL()y_!%y(d%MpH7iG<@Y;SREt4fVqG)ITJ zSv!Z-WKw6T&EQP7x>>%pvU<-&#~b*&OGavpr6UKRNjeYSkueDHZ)*9pV#2TBg=WII z?j^lR&EMW07nR6La_pnB?^#=?FL~JLbr>P^bIB3idWdph$o2w>E=N;zF5Nf%*O{8U zy^f^{kZ1}}eQ?Gt7<78Rr1MJ7@dI|TUIcg5{-yK$kpa(W6ELtLvN^=b(uvDhqcK;wA)mr+s-qvQnmI@>oziX z&bXj<MMJ# zZl%W|%F;hovVB6VVI1^g%>3KnP~uEDP=mR{#8j5v&k~B*Rn^QI3cH~M3}i*h z4^@AQ$FSPU{g&jMlth+wzhMiL?cO56&XHn2sK|gu=L=O@(>x-EcF_V(DmGomQ0@y& zx<`3MH1!pygAg6c%A}zh`z5x{ru{I_x=Km3bziA-a?2X#(r&IvplCxq&L?}rd)La` zO&gG$i-gfSE(0U@mfY4Y_?DhX zT$aO2xR$sP_ZbYnma@4wQojINj6d%jnZ%Zi%!y%MChb~zty}($yHT4|Nl2*W1UEZ_ z;q2&0=AB@W^mxzWZp$Dm$AY*P6lG2iMRT#j2SOe5i3WxqjdhDG=SysJDHOD1Sew4u ztU`PqHxFjFIB5>&+E8j1qLDbuJPY-@M|!blH-!r8?7jA9=;wwp#t`pK@3r^*o0 zpSE*Zs}OBOQ*mj>GX-w#R@dM94HWUt8rS!iN_&6&GeOxYeuUUrf@F76wzJ^t;k`Q8Sb)v1-4%`54X8Zt?cEY4_H# znVj$b5@c(s3z(#&$1rKt?wLi?cjVZM(l7GRx%W$A(*E#%<2`x~!^^4HM=4njUT>u} zvD{)fE=+=n4(fBO(#fdy)w7)#%Mb88%M_9iF$YuD;pwy2Z1-vTuMjc&s=_ff@1mRg`PZ)Bdc!ssrm zzxYp>@qxcq=P#vIfym$zkT$bMXYALLR&7SCku*Q;dEf!%szntYRML#nZrLB$#+bX(+O{F0Qtqi<}VR`(%Qt&2lKgsJ}KT4 zH!em7RT(eEzupx|Z^DXe{`$Kc#@xgds6PIj+_r){Lh21Xx=|vVAC&u8GIR8_erL67 z0|r=ka#hf3;RaZ=z6SjH-3s2XNmSNEq}j|ST4(uKs$291v})$B33_DwOG_qrgR&;s z-LU;Y%FWRe1?5dMc1 z@FPAKl>#DTaJ_mv(vo zQ2Z4rbhjzx?cu_2k}i1d#?LwtUyE4fCf$n|V^Qgd<9Fbvk|Lh2$tV-GmM;+ttQ2T1 zwrgp^c{=e9*zZS)ymOBzVkJ;l_2zm#>7zSbyg3LAF6^~OMDnU@XR^@C7?#uS>Y6A6 z8vDrK1lH@x{3LRyoG&Kl?+zun|4G&By~=*{0cIv`tVD06iz!_QDopvh^pe5dn0P5_ zvT#6xWQWQ2K9N(WGw$YmUT#pk-X`L_?o!yK%}RmczPvZ^d_O*7Q$JaKM(JOexq{%m z@6E@;)vG1Ww*ODYe@1D{f8A}oV(FjwGlRWcVZ;>ClPhMw-3E6w(XUP-OHPg&*EhwI zwib)dxpuQfSxJQ=gpoUq;-&~43$%$!vsgDLPkp`d-83X+wI#N*bfp?&&F= zilLmTbKrJu{78dv0QSM;rC=k2&5B@NE3ev;o|ldv+Omnn0D>Z&+IvAygnFP>md9^J zy88SRKb8bN8(F2_P5CE5nKF_EMoYD#2|B+V>@0Yt1Dj|01z8U@qjLH=3+K>m?ZE~K zceqz(jKFy^*G(=^RH|a{5&^rcWBJ9r_pw+_j2Caa@4m7J#dH2p*C{GRQxN{i>e;LYhb4vK**oQ1bEwZ7LnBxS) z#{aZPOdK{&8ErS8gJPu|q}fSRtZ;A4yq&$HnKBhEF{Rxza!Mv+!ui^izCE@%E7HKu zBvBN&t)SG*^4flth!*rZYD7r48uPu{tA|OQ%$3i^T3c+5aMlpg(L*5BuQ2`3q>E`<*aHJ4cclH zCABAGpcrZizo0dHILd?@d=j%+BU{5%e^H9FUn27+=-TL_izTzpvH4z5mWhe%{$Bd) zNV9u9VgAHfR;+H6cz@Mh@hnEfR4LfSNqVDfKBMt;&B6Q-iCiIbk!Nxzzm(~dQraiN zF*(ree!1iNV0k019!G{16M&?77aub+fUlZFARTCYpI}(_qr?;p%51Y`dcyPM^S0a>$yFvf=ES;$CuBNAm~7~D^iO1F zT5p%wRbzmi@i00OaCI2gv(FKq#AEzu3cWeji%2`A-TLmQX_Kl+Kw(7oa}Fun z1dbZ!PnvWQ?6zbkw;{eZ0$#^s>AL+4RKsPTFex?UPz$8d)o562LD#Px_;LN8YC$N5 zaq#RV<)de_XyG8zC!XSDjJVCKHI*^;bCO%}RI41TzFcMh)c-Jr86mHps{)yOK^LKprRrbRicd)a}v3ax3LNaD%+QuO` z*pox3e>pOLs)&)EAZJEq5I(0kcjF~h;kvWD&0>d=HtnutM+W%B9DV<>FpwaYZT5mm zWCP$7M5Tz9MMnwvBC8D$;EBt^^umecFh!dVM!JMmw&Ng?&rVL6ky4`EMq|QTn`{qc zy$T0u1j+g0bk~rFp%^nCQpd2n^HlCdHDY%FDX9-KY@=ALvD|aTR2k8WL-d_Md9x3C zL(p;j17Fn$O}#>@!J5(YML5$&vA+KQ!==S@j1(hbZUIr{{8KP#LoA z5re+M@mdhh(cy4?ZX2SY^#TxZGP-3`3N7#WM^Y*%AcZ?2aY`hGOH0x1{XvE|lufZ- z%O7?){#{4b9c22Fu}**&g!OkRu(X&utr5qIgkvJ5&c#sllk$R>vgm_QCO^BWqcA))}?>GOk=^2i+&?^05QFT>hj3Chs_ zktlYV;i&7Z0dfDNj)Od<0FB6$U?XoF&oWyiPV<#JbEg+BugJ@8JYH%~$8iF8qp?ax z2hk=z6Z+m%VPSP62b_1d@SoZ?FY}z)_%5HUz?uF2GV9BnD1iRQq8%@E(j2_B-(+&kQ=R7v-YSe9t(pgt9^lao^!FAn5GeT{-l360(1`8e6Ibd(_w!~*$?t@76(m*!|e2+KktNJ_IW*C*eBulUkUqi!(%N(m+GSiLo z0S4s)Y9gbJp4xe%WUG=%FB-$`Ye5*UbUA%khyrJPt*T62sd`r%D_oiQjz38E+jO+ltB;@O<&9sF_!^JsMw72~*0w zt*bqd*Mkr@*B{+8>+omFRHW@MzN1JE0Ps{AXqu2>?u6r|Y4uPVwm9|>Aow6`7N_d6 zel4^Rr}vu)FD#vM-3mCStn)h|5&=X%QEbDf$%I5w@X~nr8z&a^SV{s8z5OgCXVJZq zRF>zqcjWCSG5u&2VT}4of00L|h2P{&hb6xViPL(kUc zIuggIcuV@x0*+;Ygq+`=#hE(5$P?*Bq(6ZGYysI)uxyB#SlC#+++$*c&;|0SE2UFc z^1ySEts>`x`G}3FUnrZ7T>LN2PB+n?c!EXv{`uHXi`S+2h@qC(S>juh6c=pAvwVM1 zPZFc5o4P0ct^Zc5=P5Gw8pF&=^*bK(TaiQz{^e;FHwMV2ILq^z*Aen3r0zBSP#qua zGNkiSvhvAy>7 z@q2Tw?J`SjNOstqoD_R26L}WCZX($g$U22kVT80GvW<~)850|04Bs-lf|uM-_y=Ja zGS<`N4>J;^UHu|bw^2aY3v@GOl5FTXLYpG7#U8n(F%H8lXH4v5@&?9|%%@R&7!I^` zv)m`Ief4p3@&FXKMBLbA$-P&@stXd7J2M1L_E3DbQRFgAri{T7isZIaj`a$m2T9&0 z$HroVPg}6eC*!Kf7Q=&H<_mGPe5fU}i2=Nc7AI=k>5I6=lT2xX?3QS)kK}45o$Bfn zFsE!*aE$;brmAz@y7QdH?>%ftFjjtpO(bKRF@jz=(Fxc0nEX2Mld!*u z^R3EXkXCN!u#IgxxlmyWB7wF|QF{*P1v)#@bL8DxH9YQ0!?Ft*sW17L(V=5!G4O5H z@G0`=bWNRvqjkg@Cw!@B!ByHI4CLy-mm2j%&HNUAZe_Ea4V;w1j61r7so8`8(FeyI z1oi&D094|)zze2Ib9+mR^EwRW0U;f~jKlSE!2E5Mt?y#1w9V-Jbrraa9fQxlV>W1x zQOoIY2pSLt0aR}h!+hi|+4V%v3rAy=i%QM?D2gqA24>`hL;z+U@bCWI0%*0^z(B=OmVLM%72kT1(LqFN?LCWdULF|WD zq4GO2o_VxcY1<1PmWrLmR3%_QaI912c245jZh^cu-S}&M(cG&ZS;R|&`%OT{-Av*Z=VRlc;9RuJLl_d|(nahtiz7`=BW-Is% z=k?{-`=lzCsh>lL?6<;#se{O{$59eL8@VhvTa+f!L=Lp+-eO+R?QLvGieb7?WRnQZ zm?|y(Qwo6x(HU31N752}`Pd4yZXMJcd|}KEag`}rv0G~%^I09^ISYqn#FESLIJlx4H*^C-fTtVun|KolAkF$ z2INnnDmW3^V4&x}A5tdbUScPeDtX@)l*sH5)(?J&lTox$*lLKM(_tpsc0q#^!Mg0N zu*+-wdwZIMkrSvVgAadra7DZav;3`o2Nv+-wFH8Xt?zFtbwZ?U$jcY@CA9o>q38I9QX*imbfVkKT1%lNumm;_H*7~Ei?1s?4W_KmS>-7Km58o#lH zSoXsQPBUkYwjCO%?A**g1dj3sZtrIttf$C|4`tOh>>d+er}O6eg@WadeaZ330qNz6 zq$Y5{1Gg`7nF^d&6x-%Qmo(yi5+bj7dbxV#^gB-OlvWbVha+A`Q4$Ta=$m}|vzV3% zV*qbpOA}qRBB5XCrFik#Q=+qf<7xIrW~hC1XhikIJ?R>OsODd)xF#o#pPU2rfmT_w z?_BVaiKUj2`OchXkc~peJeT9~0_cvJP_KrZJ$q9pYdEeUEg6>sV=b6G?oDjOiOzfl zFXi$R5kjh8xusuz3k6=>Y(~wsx%x3Sh%kk5IEXHsF6M3a&_xqw9h`w3wHUX@cNO8B z4WwmGLJQVI#nPcRZ#_2@FQ)Gi8~I{gMC_}5rk{V@2^`+Y@^#(!4U%%Sd*-p%1$cXE z%ht-;t>J8m60}`5&RV1te!(bYw~))BLz-D|A9-M4?C7<4feTWC(18`{!WSl`mU{-w@?cg3l7MyIHf1P)@6~fA#E;XLAN?g!)f0BAbFp13Aajxfh58VO8CY0P-nez)POW!b`O2#lc$Yl7-Y04F*Y7^Ug_xPQ6^INz;@X8Zaiuv z@uHZlV}CP;u268KF^-fOov`3lCBT?&Fr-U`WY}S{s9CzqgTP+I!^_f`dM|R&?BfIS Q?dHb^i&v^JuL~5^e}n_#y#N3J diff --git a/dev.deedles.Trayscale.metainfo.xml b/dev.deedles.Trayscale.metainfo.xml index fd56257..f4ed515 100644 --- a/dev.deedles.Trayscale.metainfo.xml +++ b/dev.deedles.Trayscale.metainfo.xml @@ -58,6 +58,9 @@
    Update to use new Libadwaita widgets.
    Fix a bug with ordering of Mullvad nodes.
+
    Remove deprecated hair pinning from netcheck and add captive portal detection.
+
    Fix bug with netcheck that caused it to essentially not work and to be extremely slow.
+
    Update dependencies.
diff --git a/go.mod b/go.mod index 1e44e40..01c2d12 100644 --- a/go.mod +++ b/go.mod @@ -5,30 +5,30 @@ go 1.22.0 require ( deedles.dev/mk v0.1.0 fyne.io/systray v1.10.0 - github.com/diamondburned/gotk4-adwaita/pkg v0.0.0-20240107232253-5f283b5d35bc + github.com/diamondburned/gotk4-adwaita/pkg v0.0.0-20240512000724-8dc7455ee58f github.com/diamondburned/gotk4/pkg v0.2.2 github.com/inhies/go-bytesize v0.0.0-20220417184213-4913239db9cf - golang.org/x/net v0.24.0 + golang.org/x/net v0.26.0 honnef.co/go/tools v0.4.7 - tailscale.com v1.64.2 + tailscale.com v1.68.1 ) require ( filippo.io/edwards25519 v1.1.0 // indirect - github.com/BurntSushi/toml v1.3.2 // indirect + github.com/BurntSushi/toml v1.4.0 // indirect github.com/KarpelesLab/weak v0.1.1 // indirect github.com/akutz/memconn v0.1.0 // indirect github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa // indirect - github.com/coreos/go-iptables v0.7.0 // indirect + github.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6 // indirect github.com/dblohm7/wingoes v0.0.0-20240123200102-b75a8a7d7eb0 // indirect github.com/fxamacker/cbor/v2 v2.6.0 // indirect github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/google/go-cmp v0.6.0 // indirect - github.com/google/nftables v0.2.0 // indirect + github.com/google/nftables v0.2.1-0.20240414091927-5e242ec57806 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 // indirect - github.com/jsimonetti/rtnetlink v1.4.1 // indirect + github.com/jsimonetti/rtnetlink v1.4.2 // indirect github.com/mdlayher/netlink v1.7.2 // indirect github.com/mdlayher/socket v0.5.1 // indirect github.com/mitchellh/go-ps v1.0.0 // indirect @@ -43,15 +43,15 @@ require ( go4.org/mem v0.0.0-20240501181205-ae6ca9944745 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect - golang.org/x/crypto v0.22.0 // indirect - golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect - golang.org/x/exp/typeparams v0.0.0-20240416160154-fe59bbe5cc7f // indirect - golang.org/x/mod v0.17.0 // indirect + golang.org/x/crypto v0.24.0 // indirect + golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect + golang.org/x/exp/typeparams v0.0.0-20240613232115-7f521ea00fb8 // indirect + golang.org/x/mod v0.18.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.19.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.20.0 // indirect + golang.org/x/tools v0.22.0 // indirect golang.zx2c4.com/wireguard/windows v0.5.3 // indirect nhooyr.io/websocket v1.8.11 // indirect ) diff --git a/go.sum b/go.sum index 22ea3a5..6370965 100644 --- a/go.sum +++ b/go.sum @@ -6,8 +6,8 @@ filippo.io/mkcert v1.4.4 h1:8eVbbwfVlaqUM7OwuftKc2nuYOoTDQWqsoXmzoXZdbc= filippo.io/mkcert v1.4.4/go.mod h1:VyvOchVuAye3BoUsPUOOofKygVwLV2KQMVFJNRq+1dA= fyne.io/systray v1.10.0 h1:Yr1D9Lxeiw3+vSuZWPlaHC8BMjIHZXJKkek706AfYQk= fyne.io/systray v1.10.0/go.mod h1:oM2AQqGJ1AMo4nNqZFYU8xYygSBZkW2hmdJ7n4yjedE= -github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/KarpelesLab/weak v0.1.1 h1:fNnlPo3aypS9tBzoEQluY13XyUfd/eWaSE/vMvo9s4g= github.com/KarpelesLab/weak v0.1.1/go.mod h1:pzXsWs5f2bf+fpgHayTlBE1qJpO3MpJKo5sRaLu1XNw= github.com/akutz/memconn v0.1.0 h1:NawI0TORU4hcOMsMr11g7vwlCdkYeLKXBcxWu2W/P8A= @@ -16,12 +16,12 @@ github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7V github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= github.com/cilium/ebpf v0.12.3 h1:8ht6F9MquybnY97at+VDZb3eQQr8ev79RueWeVaEcG4= github.com/cilium/ebpf v0.12.3/go.mod h1:TctK1ivibvI3znr66ljgi4hqOT8EYQjz1KWBfb1UVgM= -github.com/coreos/go-iptables v0.7.0 h1:XWM3V+MPRr5/q51NuWSgU0fqMad64Zyxs8ZUoMsamr8= -github.com/coreos/go-iptables v0.7.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= +github.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6 h1:8h5+bWd7R6AYUslN6c6iuZWTKsKxUFDlpnmilO6R2n0= +github.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= github.com/dblohm7/wingoes v0.0.0-20240123200102-b75a8a7d7eb0 h1:vrC07UZcgPzu/OjWsmQKMGg3LoPSz9jh/pQXIrHjUj4= github.com/dblohm7/wingoes v0.0.0-20240123200102-b75a8a7d7eb0/go.mod h1:Nx87SkVqTKd8UtT+xu7sM/l+LgXs6c0aHrlKusR+2EQ= -github.com/diamondburned/gotk4-adwaita/pkg v0.0.0-20240107232253-5f283b5d35bc h1:qx5q0yTNuT30m0t/gugjsYOHjmGUVxsCekR5xcwGRVY= -github.com/diamondburned/gotk4-adwaita/pkg v0.0.0-20240107232253-5f283b5d35bc/go.mod h1:fkvdR7MYO1sI0ex07VYLTc+YK87v24aRFYyMJQ/xAeA= +github.com/diamondburned/gotk4-adwaita/pkg v0.0.0-20240512000724-8dc7455ee58f h1:1BGSLL+wWJjnMzRkRNR8oR5joi6gxyUSD4cI+L67wCc= +github.com/diamondburned/gotk4-adwaita/pkg v0.0.0-20240512000724-8dc7455ee58f/go.mod h1:fkvdR7MYO1sI0ex07VYLTc+YK87v24aRFYyMJQ/xAeA= github.com/diamondburned/gotk4/pkg v0.2.2 h1:6EBtg/7uhnN/sCJd7rZdc+PqMXmnEaEDNIC9K/hTZfQ= github.com/diamondburned/gotk4/pkg v0.2.2/go.mod h1:DqeOW+MxSZFg9OO+esk4JgQk0TiUJJUBfMltKhG+ub4= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -35,16 +35,16 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/nftables v0.2.0 h1:PbJwaBmbVLzpeldoeUKGkE2RjstrjPKMl6oLrfEJ6/8= -github.com/google/nftables v0.2.0/go.mod h1:Beg6V6zZ3oEn0JuiUQ4wqwuyqqzasOltcoXPtgLbFp4= +github.com/google/nftables v0.2.1-0.20240414091927-5e242ec57806 h1:wG8RYIyctLhdFk6Vl1yPGtSRtwGpVkWyZww1OCil2MI= +github.com/google/nftables v0.2.1-0.20240414091927-5e242ec57806/go.mod h1:Beg6V6zZ3oEn0JuiUQ4wqwuyqqzasOltcoXPtgLbFp4= github.com/hdevalence/ed25519consensus v0.2.0 h1:37ICyZqdyj0lAZ8P4D1d1id3HqbbG1N3iBb1Tb4rdcU= github.com/hdevalence/ed25519consensus v0.2.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/inhies/go-bytesize v0.0.0-20220417184213-4913239db9cf h1:FtEj8sfIcaaBfAKrE1Cwb61YDtYq9JxChK1c7AKce7s= github.com/inhies/go-bytesize v0.0.0-20220417184213-4913239db9cf/go.mod h1:yrqSXGoD/4EKfF26AOGzscPOgTTJcyAwM2rpixWT+t4= github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 h1:elKwZS1OcdQ0WwEDBeqxKwb7WB62QX8bvZ/FJnVXIfk= github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86/go.mod h1:aFAMtuldEgx/4q7iSGazk22+IcgvtiC+HIimFO9XlS8= -github.com/jsimonetti/rtnetlink v1.4.1 h1:JfD4jthWBqZMEffc5RjgmlzpYttAVw1sdnmiNaPO3hE= -github.com/jsimonetti/rtnetlink v1.4.1/go.mod h1:xJjT7t59UIZ62GLZbv6PLLo8VFrostJMPBAheR6OM8w= +github.com/jsimonetti/rtnetlink v1.4.2 h1:Df9w9TZ3npHTyDn0Ev9e1uzmN2odmXd0QX+J5GTEn90= +github.com/jsimonetti/rtnetlink v1.4.2/go.mod h1:92s6LJdE+1iOrw+F2/RO7LYI2Qd8pPpFNNUYW06gcoM= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -80,16 +80,16 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBs go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 h1:lGdhQUN/cnWdSH3291CUuxSEqc+AsGTiDxPP3r2J0l4= go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6/go.mod h1:FftLjUGFEDu5k8lt0ddY+HcrH/qU/0qk+H8j9/nTl3E= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= -golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ= -golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= -golang.org/x/exp/typeparams v0.0.0-20240416160154-fe59bbe5cc7f h1:w8p7KAd5PAu3s2tyNEVMcoPd8LWrk29IUcx5uOwGQlE= -golang.org/x/exp/typeparams v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= +golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= +golang.org/x/exp/typeparams v0.0.0-20240613232115-7f521ea00fb8 h1:+ZJmEdDFzH5H0CnzOrwgbH3elHctfTecW9X0k2tkn5M= +golang.org/x/exp/typeparams v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= +golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= @@ -98,14 +98,14 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.1-0.20230131160137-e7d7f63158de/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= -golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= +golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= +golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= golang.zx2c4.com/wireguard/windows v0.5.3 h1:On6j2Rpn3OEMXqBq00QEDC7bWSZrPIHKIus8eIuExIE= golang.zx2c4.com/wireguard/windows v0.5.3/go.mod h1:9TEe8TJmtwyQebdFwAkEWOPr3prrtqm+REGFifP60hI= honnef.co/go/tools v0.4.7 h1:9MDAWxMoSnB6QoSqiVr7P5mtkT9pOc1kSxchzPCnqJs= @@ -116,5 +116,5 @@ nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k= software.sslmate.com/src/go-pkcs12 v0.4.0/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI= -tailscale.com v1.64.2 h1:0VNwUsjK6CwgkqyaOANndBER2SMYl8JZ5uNRTvIqCnY= -tailscale.com v1.64.2/go.mod h1:6kGByHNxnFfK1i4gVpdtvpdS1HicHohWXnsfwmXy64I= +tailscale.com v1.68.1 h1:Fh0P1kNqI6EiN48dDiDWAIZguzIkuOo7UHDVG9ulQ2U= +tailscale.com v1.68.1/go.mod h1:uqtoDEA8tw5+S+HLGqQGfpQsqeVtBS/EVVv5mXIaAoQ= diff --git a/internal/tsutil/client.go b/internal/tsutil/client.go index 743e20e..b53e813 100644 --- a/internal/tsutil/client.go +++ b/internal/tsutil/client.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "io" + "log/slog" "net/netip" "os/exec" "strings" @@ -14,20 +15,30 @@ import ( "tailscale.com/ipn" "tailscale.com/ipn/ipnstate" "tailscale.com/net/netcheck" + "tailscale.com/net/netmon" "tailscale.com/tailcfg" + "tailscale.com/types/logger" ) var ( localClient tailscale.LocalClient + monitor = initMonitor() netcheckClient = netcheck.Client{ - Logf: func(format string, v ...any) { - // Do nothing. - }, + NetMon: monitor, + Logf: logger.Discard, } defaultClient Client ) +func initMonitor() *netmon.Monitor { + monitor, err := netmon.New(logger.Discard) + if err != nil { + slog.Error("init netmon monitor", "err", err) + } + return monitor +} + // Client is a client for Tailscale's services. Some functionality is // handled via the Go API, and some is handled via execution of the // Tailscale CLI binary. @@ -213,6 +224,11 @@ func (c *Client) SetControlURL(ctx context.Context, controlURL string) error { } func (c *Client) NetCheck(ctx context.Context, full bool) (*netcheck.Report, *tailcfg.DERPMap, error) { + err := netcheckClient.Standalone(ctx, "") + if err != nil { + return nil, nil, fmt.Errorf("standalone: %w", err) + } + dm, err := localClient.CurrentDERPMap(ctx) if err != nil { return nil, nil, fmt.Errorf("current DERP map: %w", err) diff --git a/internal/ui/selfpage.go b/internal/ui/selfpage.go index fd5b4cf..0f7f647 100644 --- a/internal/ui/selfpage.go +++ b/internal/ui/selfpage.go @@ -52,8 +52,8 @@ type SelfPage struct { PMP *gtk.Image PCPRow *adw.ActionRow PCP *gtk.Image - HairPinningRow *adw.ActionRow - HairPinning *gtk.Image + CaptivePortalRow *adw.ActionRow + CaptivePortal *gtk.Image PreferredDERPRow *adw.ActionRow PreferredDERP *gtk.Label DERPLatencies *adw.ExpanderRow @@ -340,20 +340,20 @@ func (page *SelfPage) init(a *App, peer *ipnstate.PeerStatus, status tsutil.Stat page.IPv4Icon.SetVisible(!r.IPv4) page.IPv4Icon.SetFromIconName(boolIcon(r.IPv4)) page.IPv4Addr.SetVisible(r.IPv4) - page.IPv4Addr.SetText(r.GlobalV4) + page.IPv4Addr.SetText(r.GlobalV4.String()) page.IPv6Row.SetVisible(true) page.IPv6Icon.SetVisible(!r.IPv6) page.IPv6Icon.SetFromIconName(boolIcon(r.IPv6)) page.IPv6Addr.SetVisible(r.IPv6) - page.IPv6Addr.SetText(r.GlobalV6) + page.IPv6Addr.SetText(r.GlobalV6.String()) page.UPnPRow.SetVisible(true) page.UPnP.SetFromIconName(optBoolIcon(r.UPnP)) page.PMPRow.SetVisible(true) page.PMP.SetFromIconName(optBoolIcon(r.PMP)) page.PCPRow.SetVisible(true) page.PCP.SetFromIconName(optBoolIcon(r.PCP)) - page.HairPinningRow.SetVisible(true) - page.HairPinning.SetFromIconName(optBoolIcon(r.HairPinning)) + page.CaptivePortalRow.SetVisible(true) + page.CaptivePortal.SetFromIconName(optBoolIcon(r.CaptivePortal)) page.PreferredDERPRow.SetVisible(true) page.PreferredDERP.SetText(dm.Regions[r.PreferredDERP].RegionName) diff --git a/internal/ui/selfpage.ui b/internal/ui/selfpage.ui index 33fa4d9..1080bb0 100644 --- a/internal/ui/selfpage.ui +++ b/internal/ui/selfpage.ui @@ -131,22 +131,23 @@ - - Hair pinning + + Preferred DERP False - + + Never + - - Preferred DERP + + CaptivePortal + Captive portal detected False - - Never - + diff --git a/internal/ui/trayscale.cmb b/internal/ui/trayscale.cmb index 3c227a8..c0202b5 100644 --- a/internal/ui/trayscale.cmb +++ b/internal/ui/trayscale.cmb @@ -83,14 +83,14 @@ (4,33,"GtkImage","PMP",32,None,None,None,None,None,None), (4,34,"AdwActionRow","PCPRow",18,None,None,None,6,None,None), (4,35,"GtkImage","PCP",34,None,None,None,None,None,None), - (4,36,"AdwActionRow","HairPinningRow",18,None,None,None,7,None,None), - (4,37,"GtkImage","HairPinning",36,None,None,None,None,None,None), - (4,38,"AdwActionRow","PreferredDERPRow",18,None,None,None,8,None,None), + (4,38,"AdwActionRow","PreferredDERPRow",18,None,None,None,7,None,None), (4,39,"GtkLabel","PreferredDERP",38,None,None,None,None,None,None), (4,40,"AdwExpanderRow","DERPLatencies",18,None,None,None,9,None,None), (4,41,"AdwSwitchRow","AdvertiseExitNodeRow",5,None,None,None,None,None,None), (4,42,"AdwSwitchRow","AllowLANAccessRow",5,None,None,None,1,None,None), (4,43,"AdwSwitchRow","AcceptRoutesRow",5,None,None,None,2,None,None), + (4,44,"AdwActionRow","CaptivePortalRow",18,None,None,None,8,None,None), + (4,45,"GtkImage","CaptivePortal",44,None,None,None,None,None,None), (5,1,"AdwStatusPage","Page",None,None,None,None,None,None,None), (5,2,"AdwClamp",None,1,None,None,None,None,None,None), (5,3,"GtkBox",None,2,None,None,None,None,None,None), @@ -187,8 +187,6 @@ (4,32,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None), (4,34,"AdwPreferencesRow","title","Port control protocol",None,None,None,None,None,None,None,None,None), (4,34,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None), - (4,36,"AdwPreferencesRow","title","Hair pinning",None,None,None,None,None,None,None,None,None), - (4,36,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None), (4,38,"AdwPreferencesRow","title","Preferred DERP",None,None,None,None,None,None,None,None,None), (4,38,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None), (4,39,"GtkLabel","label","Never",None,None,None,None,None,None,None,None,None), @@ -197,6 +195,9 @@ (4,41,"AdwPreferencesRow","title","Advertise exit node",None,None,None,None,None,None,None,None,None), (4,42,"AdwPreferencesRow","title","Allow LAN access",None,None,None,None,None,None,None,None,None), (4,43,"AdwPreferencesRow","title","Accept routes",None,None,None,None,None,None,None,None,None), + (4,44,"AdwActionRow","activatable-widget","45",None,None,None,None,None,None,None,None,None), + (4,44,"AdwPreferencesRow","title","Captive portal detected",None,None,None,None,None,None,None,None,None), + (4,44,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None), (5,1,"AdwStatusPage","title","Mullvad Exit Nodes",None,None,None,None,None,None,None,None,None), (5,3,"GtkBox","spacing","12",None,None,None,None,None,None,None,None,None), (5,3,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None)