From e25fe01d82632d0fe98da94d9cb21752059e949a Mon Sep 17 00:00:00 2001 From: El RIDO Date: Sat, 1 Feb 2025 11:40:29 +0100 Subject: [PATCH 001/196] chore: prepare for next release --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 66503d08..f78190af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # PrivateBin version history +## 1.7.7 (not yet released) + ## 1.7.6 (2025-02-01) * ADDED: Ability to copy the paste by clicking the copy icon button or using the keyboard shortcut ctrl+c/cmd+c (#1390 & #12) * CHANGED: Allow toggling tab-key-support using `[Ctrl]+[m]` or `[Esc]` in textarea for keyboard navigation (#1386) From 2a27c767a569c2db6426ec70581df896ad9572a8 Mon Sep 17 00:00:00 2001 From: El RIDO Date: Sat, 1 Feb 2025 12:32:04 +0100 Subject: [PATCH 002/196] optimized images using oxipng 9.1.3 and parameters: oxipng -ao max --preserve --strip safe -Z -r . --- img/android-chrome-192x192.png | Bin 5557 -> 5515 bytes img/android-chrome-512x512.png | Bin 23065 -> 22745 bytes img/apple-touch-icon.png | Bin 3967 -> 3910 bytes img/favicon-32x32.png | Bin 749 -> 741 bytes img/icon_clone.png | Bin 266 -> 180 bytes img/icon_email.png | Bin 253 -> 217 bytes img/icon_new.png | Bin 157 -> 104 bytes img/icon_qr.png | Bin 299 -> 200 bytes img/icon_raw.png | Bin 183 -> 174 bytes img/icon_send.png | Bin 209 -> 144 bytes img/icon_shorten.png | Bin 196 -> 149 bytes img/mstile-144x144.png | Bin 3644 -> 3637 bytes img/mstile-150x150.png | Bin 3284 -> 3206 bytes img/mstile-310x150.png | Bin 3580 -> 3432 bytes img/mstile-310x310.png | Bin 9220 -> 8934 bytes img/mstile-70x70.png | Bin 2424 -> 2417 bytes 16 files changed, 0 insertions(+), 0 deletions(-) diff --git a/img/android-chrome-192x192.png b/img/android-chrome-192x192.png index 42baf7532f7c05cc70cc10ba87d439d9c9430d7d..6f417b9b7c375229b33445b6c5b1ff2fbeea17c2 100644 GIT binary patch delta 5268 zcmXAnc|6pQ^T*%&w#%*~>n7K_Nv;Sv*P@o>t`xE52qArtE8e?~CB#xmNb8Dn=FX7~ z9im!Cxv!8bSB~8K>-+f4AM==b&EqjMkLOISVxnTDJPfilGcmFc8Sc-BP0Pok$pd49 zg~d82c!DPyB-Wc5JYyOU$DcBPRY3)E&us3e-iH3WJNPC%@@>>_%8htN+xpzd_y=>hQ^W0{-D?%jcZsc6`Q&P}-x2)_JBM|q&LWd_n#7Ygq}~`SRIEbK¥=nZtMY3FsR*#7M(iyC? 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 Q4*WASQ%jR_93kre01n@axBvhE delta 5310 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 diff --git a/img/android-chrome-512x512.png b/img/android-chrome-512x512.png index 48e6608bdcbfc7e70073266a854cbeeba73c168f..6294b81ca7494d75b5783b4b9026e25840af8a12 100644 GIT binary patch literal 22745 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 OXN$+S4JGU8N&g4p-UQPC literal 23065 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 AhyVZp diff --git a/img/apple-touch-icon.png b/img/apple-touch-icon.png index aa6e2b04f5aad58330fe940912389c386cac964b..00d9f373cef5cefeb456735dbfff242b69619427 100644 GIT binary patch delta 3903 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 R%e(*p002ovPDHLkV1fp@NPYkS delta 249 zcmdnO*u^wKvYwfNfx+|&+hiaW7~m7)3Z!SwoH=XOtQj+A{QdhE$OeM{|NjF;_Uzg7 z>({THJ9h%PK*3$Rc0GRlc-pjS5bpc;@8{2-pO~1qWXY0k+qSJ=zkbS;DY?11od*`K z2O26^666=m@G{cl-+>Ab{r8U_-?(uxUA?5p^6qD#Y`CY3V~E7%qvt(^8Web30zD<> zOzmj8_kV%ev_0I1aysq2uP12fGiS?pRMqvgv_r7GXI&Zu#Ech{d tz4X#6Z?`OB4u5dz)8^>3f4h$FR-Y!oFV1!Ja5~Tm22WQ%mvv4FO#lwQeog=Y diff --git a/img/icon_email.png b/img/icon_email.png index cd3fdf422b61e80d2812001a701685127c7c94dd..3a404dfb9ef95a3487682f3b281b2ace8077eeab 100644 GIT binary patch delta 181 zcmV;m080P;0oehN7#0Wu0002Av;rLf0004VQb$4nuFf3kkvCsg*t&VGSKV6muxhIv-}WZ+N+FR~nUsif{#tL j1fkaN3C(TQ9Q^{Q2zX&o@7Re){?I=l}ozKmYVS0W>DY z)5S4_LpFH_H>0@3Ifny`ZOl9h2PzsK@^l=n_{DJe;$w%l6MPG%oMB>XGjO)+xzoz}fKs~Je8%n*Z!C+YmORsV!FlWjTi^n{1(uHziXVg>&}}tjD7@&*5Mg{> Q4`>mCr>mdKI;Vst015jfP;mBfnkQp-`zk;-_yl0q~ccckA5DR|Lz72jJrO(|KAwV()dF?fGJo) p=V7bX8qO&Uj@%mz)FjdlG5icLwl3LxvjM1;!PC{xWt~$(697M$A58!N literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^+(69F!VDx22y1{Sxd5LK*Z=?j1DQY)EBHC#i9b-9 zvn0qb*pcC9;O_`83(cuVoNR%Ds-7;6Asp9}XIK`itzN*;kz~jcJm-`^RuEH1R)PjY ekb^;^6BomA4t<{J?r$wX4Gf;HelF{r5}E*4S3C;< diff --git a/img/icon_qr.png b/img/icon_qr.png index 28d10ca7bf9cdaadc3ea7a22089195e29530a906..53e7373f66a7774d46a0616409856b464ebd3f7f 100644 GIT binary patch delta 184 zcmV;p07w6;0>}Z77=H)=0001Me|yVeSaefwW^{L9 za%BK#Zf|X6EpuaXWo2%2Xm51y1HV21000kAOjJbx002KfKYxFJzrVl#|NnP4LDm2O z0HaAnK~yNujZwi3!ypWFtqxFS0%|b`sxo#Ib&$wqf=qyDjeq$So7N9=oaFOy;QCz& zVW@wpO)HmvZrd%7=H)@0000C2xWKx000bL>`002=*L_t(|+I`1C3cxT71HqMLNB{qEp(T)9x|d}@Z+j?7+_aNKpKGz| zGipnzNNxeNVa)|y!v7|*tZ02d*_0|-U|?&ip!!2kdN M07*qoM6N<$f)Y|h-T(jq delta 167 zcmZ3-xSer=L_G^L0|Ud!A03rIN+Q4~#P$FG|4Wyz`S9VRt5gTe~DWM4f0n|7w diff --git a/img/icon_send.png b/img/icon_send.png index a6e62ebd155de13a1254600643cb481cd14d106b..78c617a5d3f295729160d3da7c33318dee1fb166 100644 GIT binary patch delta 127 zcmV-_0D%9|0gwTZ7L_t(|+I-5V0l**t0I<%>aX1tXh2_T7 zbg$@icY@IU6G8kd$tHc3>@2^P;;vl7ta?+;M`^w^^R0X~%S!(rfWmJmlHcIsrN}P3 hfuiUJLT1P+0sxI=4bgTe~DWM4fS&v@)$2rf)`{MUR`+X m!s|l3{=yR)c)}1*$O8cOIjs+LqdHvx0000na*S0MeL5ZJ=m`x2;*yCldj znBm*IlRN9OBh;jMr}SNW1Qd4hba4#fxSp($z`&%il5>%TsKmC0jA^_)yM-G{%qC1r zNO&-T?b2*Xi5cb0FYhw)Tug}S@|HT+e)8~@!(R`dX`acynV;dPg3R4&+4Vnw<}rA> L`njxgN@xNA9FSGS diff --git a/img/mstile-144x144.png b/img/mstile-144x144.png index 819530770bc9c5c1a8c68177e896fc2f89bedca1..872741fa397688deff3ed4185ffb101239d043ec 100644 GIT binary patch delta 3622 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 delta 3629 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

tg8{Kh{qrcC$yTBK8I4+ex^ z_O0N-ka*)^j1{^{mwcU0A63#w0RtCS?4`~w#1$?4enDa>co^b)w5L1uyURWWw6L~l zi0gk$rv0i;@HPJZ)#Zr*!tZyH{K0{U3khbg_e#C8|NnI!hjU^pypb*D0tVHk2DkrQ z;u4?vGTGu`XOk$7dhd@d`uKc{<4I<3(MYOmJ36=*MgyJR0La4#n?an1T@2$mj$U4$ zcItlCi{f}VHe?zk9oMtBjcyLR?o@w@H&?x2y>4WA82>(x4BqUHthBpZ*QaZRI|GGf3Q?7FZ) zC}5oE2SX7u!XS_>Bm%g38MX`q+1e5(+JsEM3YiTLP=LUr#)QYo{QEf3Fl6}AzT|%m z8HOkRs#_x&AzNGGM7NNMS;)v0Q}+X4NQFYici+c})*-`yFeG5Y{*+w79@&l){b3+v zm=H4X$hH6@Tm39s^$!_XM1|ttjT8MQ8S&P0001B XTP#F$xUf+v00000NkvXXu0mjfYqoa7 delta 3055 zcmV;MvePlm(hTm z$T>^6ycYlf00000000000002^tLnN6tg8JZ#-Td}))=pphQ2>o$nLttm~)Qt+4cQp z+d+OYQl3lOwq+_ykn=8VRz1agdgszM$t_jJ?YLO(xZVHBs`+YJR-CkSC^!k&@$KThi>Us}oFss?qkjRcI7 z;Xp37WN=lBr*El=EY1^wl9|>(^os!^b!*|uFtmYzAMEQomsv8>s#dtN7={55FzhQ? zk-B8|7f~{;Rjp};Az(D^5OgF%M9GZ%^h{N{WDctu)``pl?Z5~s2*gabmrydTRjmU9 zQM7}KXrg~)-jpvHX;tIhD#NH_CQ(`xMVgp{mLkZ*P1%`BmVGr#rnRbRG#wZou!v^W zYFg%bUaqQbk+g(q04b_zMhKy2s%j;JtD2}2RKuxZc<`ygJ;p&05Sk#!a(G75_&+te zw+6C!E(2OJd$meNUeyv)Rs&%S(p?D?Fw#ZBkUoE>?IPI_);?R$p2Y)-X5v$!uiIS04wQb}|G~nK97`EZ=a)f~yg+X3Lh9^Ck zp&;Vz5CBo3WS-VyRg>TR;jzJK__mQ$aUjOz{^5JC_xucvb?(FNTA)3esTVZurK6j|$Q_;zyWOn%(As^#X|$z(D|qG%J62 zjC$M+pUN@P&n;p-p@)Y&T6(C0W6W>>kCq(hhHn>4j{BR_d8ChH+19a9V^?7X)_*j-KvR0lEX1PE{6|sSHbAB+kn#pDk`yQx_YRJV}No9 zHy}|-XXWAMT)siok}|b@ zVF?`PcZ~;qJSJu2`=|9#4+odSY06>!ACBen_c)lkz9sQMJruJ8<)D*-a##l(XE*cS zc>V(4NTZkgT|LyqfiJ+k!>B-_oP72+{O5Q+A@Rbttgar1qcl+uhZq&3LBoG?KVQAp z>px2}buCCo4-KLij`l(7H*pwM@JY2i{r>n%g33W0ST2X7R5cujS@9$};PA)^f%`c3 zPVIe7^1`w@dJG22;dmA}@MW=tV`yoc^Lq3rFRvt6X>cj(!Ew|)6vZJeD;CEwv_OwD zJzr%ULJkPhpfPqa8<%g#X~4R&@Q28QcXaSr(KKN5@+enqfARq|vdXktIP8B84pTiGG~Q7h zUQq^Q+^*Z7Kx0p`jq4AO<1m!Pp`jf(D|na20(g+tE7Rrty-#V_c;zMGKs!1(EQj&{ zJ)~Ep{W%F%iCtf5oxouV93!=G963pG2E;4myCx0-qcZbaSNf1vwJ3$dL_5yl@Qb*E zLnmRjuutQF9Zo$v%>RF~!(MPZr2ij=|F}E5<)&dE3e%SU1ZGU)+Q>~*(*zO6kYq}m zq~-7ZUkiC9vtCO|GUUeVGjIU|%=nw5JzB|L#=A@t@Z(6+ez+s?;K+7xQ%nE;y>9HI zFb>}C7^Zu0#E;J7Tvj-q#9g1=k!1}Ww}@l(G;ZHb-c*;o>zRLk{C3dx#~tRR)OE+q zy?(l`YUy-|I5fYyqpd3`XLp2fV6a@b?q;RFs?LZz2o8?>jv7arA`Yi`WIGxxAh@bt zM0YfilRmg3ic>8p9zGn=2A;-uRV~^$n7d$QR6T z#0?w?jTSf&a}R$!E}(dn$ww~^yl3Hz!&^M=$}iG$d<<`4Kc+~7tQFjLu*Tt8EyEXh zL9G2RoK?l+Ni-{mr*!bcp?}0~@jxDtvk3zYpm^j4hOcz6bO+Yb&}xBA7@iH%;<3E- znu9wI-)gZ>x}4h5L3IwrW19es@LFMqLj$3!h4M(Y<9mPHgwf(5@j?=5khKCh6c-%$ zZde+y2b2!)v%IU?mh}vAgw_fx91VL6efAKff1_QT)Lq;yq0wF|tZ+16q;%~8Jg|QY z6pzf(z*s?Z@WkP_haob=(%~;2qo6tLu7ep4pFQyUN#L%-Q#_0@+&#*7sX3>S@q^2kJBhmHrPa#DZHGD3skVC4>FaM)@}TU(G?%Y7gC z44`-{vu4D)<`BzG_i;=n<6?_EMm`?Ha{tG07xu%znnvu1~V9FenYgVZOqb5KrCJz>XwYKa{zb2Ph{o8!R6Aut9^GBd=yONX@j{ zW08N(wLJg`4EuI?fQIR6E@6ir)Roz%>p$wHF+&*L9$4|_;?j<2f%$@f!{HIx?`Y41 zdVgQN1+*PGH0(H&r>U6>)AeyCT32Tl2+Vh({xCr7K!WGj&tAP&zyIg09B)MI@rK%N z00!u))7}7`U*Qm+%`SI%#A-c}lTSat?$Lj*-#?^WtJtBD?-n>QXwZEa0Azqb79}1A z86NR+E~T7&fBhEJ=jTroDd($*(h#%qLBp^UgKoOMPRPs}khG&-n)~%g6=QjX#)XP- zD1-f92P_OWQ^QD21t8TRAko~gi(N6F9#*jx#2QNzC!kASL-s0N*C8`$4~Q3PRib}Z z4V4Wkfzy6qT-cYfg~4p%U?60yK~Qn66x1GuO<`cRGKiCdAv1-L`NzXjpz;m~hd9}= zi<4tQ#$4?aZ%`Pi{n@leUP89Ai<1K(Bdd_1E2ilOgh3XHSUs?flVd^#fB+I?0zcB2 zkce7w!fHh6!H@xA$e>54C=B(&I$M8_4;k~wK@>fTlOsDB`{aZQ{Hlhr?4E4gkRXZ_cP`%F9ry`Sg#e4anv+p04M?{34~uy&_hD8pad zjm01k$aAf&$MrnG_g>#V<$I(1_J9H1e^DzArApu+KXb;*Yd$eN+ikS8g{EgHyHZ~F z4-cn%jj~y#wN3vC^=aF^KU?BQU0kO`tfDkK$M6+adiQXoMJpHGyE5jM;P-WX{Z*rx0PF_}`&GPtxd2W%Y zS$;>OiyJlKe+oTUDsBrpL1}Zp^#KNB*Yc)+?1qb>tMCjL71?)>Q0|*;=T2l^?$c2* z#H!7Ad#jfvO#6nlgb0$#j$n7XEv6VRB4&Q!ER*$PX!h-kl1zlOCbFf+XVcuJSVC6j zdOPD+Pa@WQa(-K?np>$18;r;q0k?LwVqYVZ??3|yhYkN=YJf>};wNuoD-k#{sIDNt zx8&4#PBd0nX!pXV7u_v?c%4^Ul33Gk9XKqObi!eDQ1H448GNfK*ES6Q(K04#5wj8U5A_dW_hH#Dut5<)$fszmjvq`P z4Xg-dmjC7)t!gyVT4W+s?^7@7iTeV!m-D(MyZ%}f($8QSzh{VeDwRl9-yMPu`}a*G zvkrA-d(8IFr8TXHSLK-U-gd>sp zT4HdYq|5JNHNX5~QN=qVP@MK>d(jfU-+)Pv5O1`>ocJS?)BWVDD`_5d0vPR|kBP!v zHI8Gv!`uUJO=-@lNKL&i!79X$48-mPHfg8OeA)|1tBYkzN!dd^}NewQ$nkqmW3b zx}aT;hY03FWST@8FM_#i&ivjf;?Q?=jk_ttc|g~Mpfyl1e@)r?tHT>)wyP8UnAh|C zx6oUIhT5Kv-Sb=2hRTp1;s=(NahobuAw?1S13BI|m?2Y=3i!xmxEMBz z-$y2^pyYYP)I+P@_WOJ(NwEKvM_;?wZag8gt7h%DJ0BT+|XM^?rILummm z3aH{RKcEg)Y9A2kskN%(9IW3@lEE*PYTgW>8sC>C<2?UFVXhH?9o7tJjrhMEY+c{^xhtBtWd3d(U{(nP7kCqBj;P)EQaE^%UD9d1?{fgp5yOVuQ zX*8e^`Vl-zlO=0s%X;7o(DneWC;E?yKF9ZH@0rOYHT4tIF>ZqjKnX?_Sj^y$F*Uf& z)Z0s*;arYfD%@``e9Gn~oqhJ94b7sxOvxKIC>7&f*A=!M}rc&xz!P^Hll zgC?vp3tx48-cbEicugF5YT%GS4^k7!bAzh^-k%2L2-1-!DBmYr?=aVVYTQ38q-|1g zcsY)WG29YGdg}1M6nnrpmHCKV_+)ZoIwq$)-Zlnyd!0G}BmL)&Ru6zI} zOh8#iD>lyr+ux+(Gqi!0@2W3F;NjTfF-Ur;^uwF%4^w16AUq=O zMVj}Y1O&Bfe&}P>8cRUHD5QOXQpbc@yhQd7UnO`AM~j&Pj|M+aJont0b;2FA^8yy{ z^@)6!0P<*_b^c060L7LUTOmw3zRQ1~RNrOJ44=Lsxp&vba%S1xwGABpm z6jV)UV`Yu4iRIW?dOK1$5_58my*&*9R^)=_c9AUX0J4NA8I4czrqXjAMzR7@1_tlH=4Sgr`@6n!qE?A#Z=H02C9-fy(g% zBGK#V{DsORo}4eMQ4rva^2^KQAwEV06j^Dy#r}c%FyQloj6T(-I-_x#fChSKRo^>95C<>9A?j%q53H^0w zE4Ro+*4tZ&S*k6v>s+H;3bXD&465y7E7!$X9SDDWRP?lFVMlFH#ET%pcK6B%JvPci z;+GB{@(I0N1erqqR+Umfnswy6n3oB_3`XY4B_rBR~QuV$pv1l)pJVlzUS6 z;k_H2!(CT3+yujLgE~|G@*+XusI=fO7tS!5cJK9@mHNh>;{`$!OM=!6tN%NvcakNS z4)dgEilTe-6@Azzo-|V_%U%}7XV{83sB}!uQHZUS#bS1>uU!VyHNi<%9T4zN0|8tG zl%J>Oda8XxHTTzxCxiZ}y92WqGsW~0u7HZv3VLja%Wz{uuV|v&1gY0qrI9We-ttB) zNH)z{7?+I+aYp)N<0RP;!c5G@l&Ww0lFrBUZWv7-o(H@PD@{0v^4`OB8J2-`spC@~ zywZf-^Z)V{W1|2jRW9}g~;z#VqKk$hn8yt4v>IS@_=VERO}=oT(7={7=oNuC@#Dd0t-VT9c7!RtTe`XW6!uo35^$18A_7BHV{{hJwv#2Y6=vcyBN1 z;@}|Vu)b!>I<*M3I@MPLzQooq;3JSWMkkn;`(R<}@i{)~D;>NjQwMZZ9{{<%#-kr0 zY#q9`VSGR!wY~8$kkNW;AB;2QN_R`-amI&8U(K3o>wO;#Mhr)_=ffMy0(BffP~&yX zeMH3MP1Ay%r)f0G z=bp#*vp!I**kH&Tt&H%U*AX*CPK^5jzcJqJElk#S^{p>qA&nm6X=m#Y?bnHWc%}=e z?ZWbt=7v2H#noZz=1&<3M{eKn?Uh4|p;QtvVUah(u%yjh1*vVib(ABf%Jx(4xf(<> zaDJdHE#=1U{L9A<$#_~LA`WI$CclW&x#06&aY}9N$UtK|7W3{ zJQH!|w&R*QlGKQxis`N&PFp^M-4wL{bF-3%=-mDGQEbn3h=Lt1saLT+Lt2`%`$b2h zL`LCzuHTqyQx-HTwTJ^UGCI=Noe%>n_X3;*$wkzGZvC`hBi$^KI*cWK#kBNu$w`QB z`vtEY`@0ivUJ5r9Z3m##zk9*oyTQK)4uRwtl>5GVTos-wYJy-fXYDF&eB=KQsofM< delta 3302 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 G6Y(EFDufmQ delta 8945 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�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 Xox(lcZ}U6M00000NkvXXu0mjfUd7_? delta 2152 zcmV-u2$%Qq68I9ZC;@*vNkl_8b<|Nu9d*=EM`hEO;`J~z7$ozB{E){~ZLp6A|K`DXY2wo`QaPcwh&+%+B3%;(-wC&lis z+fLKzKZbrd?bBBA&N0tUa_^)^1HV~&pIeF7I0dFShEq^ENHya3yzB9fF33u1^YE%Lt zZ~yGPz@qZ$14p34c14vrKmsdZM<%DZHp_bu z+&zf%R$zfY)0Y2bFy#JN)xy^@$nCul7>2n8 z7wopD>!id8Rs=4KEJ^|m2rOdHR}}uu>FWVT&TK#|2>>04`s)kU|DDldeekX;Ds(7H zzySyuu%_i-572TN?L>c&-)HU5p^(6w`D!vj`zj3pHURzWl_e`cAz|HOL3~t@0Gp5& z01JPB{&kBbFmYk|1Sx0`l__2V0dTq>02V;zpZlw}hXsfU06brfGyzMH762O{{p*#5 z3loq_RLOK`s3Jk61nou&04xCd*Q(Dhb|9wmdQIDE9h-n9uu}t6;{ZY4f(|*)>q41mK?vV1xkC0)Q^6Lz+AW&HEqDP`Tg)*aOyr zy#Y=o0Cqq{fLh2(kl#%}_qOQ`;CiG4Mp^*g0ucf1fbhS#sIHRM;(YhVgY#U4>sWsR ztbmppK-Xg(0E70}G0Ua6|3jxW3odp6su=+)peO)HoqA4e5>6)fowYZw?*bSH0l*G$ zY0uO#qXY%;zw;J`xcrg<41okVNt1yjfLbu5PINgc{_HfpsZxsqTq1y$8ld_I0M#GT zNDKTywgCdK99as^$|eof7=Zc)0GNT0ZwPoGrgT}U*Du}#0JH-T zJD7beJMNQG-wmO$0qCUyPyoP40#H_4N8^0ib$g^9Uk4!nKqbBs*)JKy6uNU&T&rUTvH@r!1V%y#)N2_541w$37y=-c!3+S}9|0=Q z=Jv_-yiDCIW#b_A$8-5y8+ zg?-dLkDcUAvrl3Lzz&f1-T+q|AYKB25F~s;FR>8RF@acsEC8_*$RfZhz$365f(rP@ z3y>B7J{@nD011>QTm>R4f$I)6@W%pR1XER@O|S&p1h5gvRUp0+1bBb{q5zsE0m4)O zSOSg!H^$YbVk6iM!5psQSx8r;|K0$f1;9%Qkbol?Q#0w)=|>2`je-F%bP+%+1Ar_6 zAQ+N>i41WFVZ_-5df7y(GT!F4zu0`r;h+ed$k*$*Da zW*MnpbtYqS*$?bVoFHgm1Y(V&W-oy5Z{L3qE?D_-a$ltr{tUu&XNwRCbR7tc(1W)t zHWSqCQZLlepHBchQ+K)j*=cSs< Date: Sat, 1 Feb 2025 14:32:29 +0100 Subject: [PATCH 003/196] update new translation in fr.json --- i18n/fr.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/i18n/fr.json b/i18n/fr.json index c580d1a0..68064f20 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -151,7 +151,7 @@ "server error or not responding": "Le serveur ne répond pas ou a rencontré une erreur", "Could not post comment: %s": "Impossible de poster le commentaire : %s", "Sending paste…": "Envoi du paste…", - "Your paste is %s (Hit Ctrl+c to copy)": "Votre paste est disponible à l'adresse %s (Appuyez sur Ctrl+c pour copier)", + "Your paste is %s (Hit Ctrl+c to copy)": "Votre paste est disponible à l'adresse %s (Appuyez sur Ctrl+c/Cmd+c pour copier)", "Delete data": "Supprimer les données du paste", "Could not create paste: %s": "Impossible de créer le paste : %s", "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Impossible de déchiffrer le paste : Clé de déchiffrement manquante dans l'URL (Avez-vous utilisé un redirecteur ou un site de réduction d'URL qui supprime une partie de l'URL ?)", @@ -221,10 +221,10 @@ "Error compressing paste, due to missing WebAssembly support.": "Erreur lors de la compression du paste, en raison du support de WebAssembly manquant.", "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Erreur lors de la décompression du paste, votre navigateur ne supporte pas WebAssembly. Veuillez utiliser un autre navigateur pour voir ce paste.", "Start over": "Recommencer", - "Paste copied to clipboard": "Paste copied to clipboard", - "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c": "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c", + "Paste copied to clipboard": "Paste copié dans le presse-papier", + "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c": "Pour copier-coller appuyer sur le bouton To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c", "Copy link": "Copier le lien", - "Link copied to clipboard": "Link copied to clipboard", + "Link copied to clipboard": "Lien copié dans le presse-papier", "Paste text": "Texte du paste", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "La touche de tabulation sert de caractère (Presser Ctrl+m ou Esc pour basculer)" } From 4b2443f3eb8e548cee8a9c6c42f8a4cfd7702fb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E4=B9=8B=E6=9A=87=E6=83=B3?= <53783792+fzxx@users.noreply.github.com> Date: Mon, 3 Feb 2025 12:11:48 +0800 Subject: [PATCH 004/196] Update zh.json Update translations --- i18n/zh.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/i18n/zh.json b/i18n/zh.json index 7afedb16..be9cc3a3 100644 --- a/i18n/zh.json +++ b/i18n/zh.json @@ -221,10 +221,10 @@ "Error compressing paste, due to missing WebAssembly support.": "由于缺少 WebAssembly 支持,在压缩粘贴时出错。", "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "解压粘贴时出错,您的浏览器不支持 WebAssembly。请使用其他浏览器查看此粘贴。", "Start over": "重新开始", - "Paste copied to clipboard": "Paste copied to clipboard", - "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c": "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c", - "Copy link": "Copy link", - "Link copied to clipboard": "Link copied to clipboard", - "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Paste copied to clipboard": "粘贴内容已复制到剪贴板", + "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c": "要复制粘贴内容,请点击复制按钮或使用快捷键 Ctrl+c/Cmd+c。", + "Copy link": "复制链接", + "Link copied to clipboard": "链接已复制到剪贴板", + "Paste text": "粘贴文本", + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tab 键可作为字符(按 Ctrl+mEsc 切换开关)" } From c963ba4d7a78e4707a644f09be07b07febdef222 Mon Sep 17 00:00:00 2001 From: El RIDO Date: Mon, 3 Feb 2025 07:52:32 +0100 Subject: [PATCH 005/196] upgrade webcrypto used in testing old package got corrupted on npm and fails to install --- js/package-lock.json | 106 +++++++++++++++++++++---------------------- js/package.json | 5 +- 2 files changed, 55 insertions(+), 56 deletions(-) diff --git a/js/package-lock.json b/js/package-lock.json index 96bc9f24..44902d76 100644 --- a/js/package-lock.json +++ b/js/package-lock.json @@ -9,7 +9,7 @@ "version": "1.7.6", "license": "zlib-acknowledgement", "devDependencies": { - "@peculiar/webcrypto": "^1.1.1", + "@peculiar/webcrypto": "^1.5.0", "jsdom": "^9.12.0", "jsdom-global": "^2.1.1", "jsdom-url": "^2.2.1", @@ -17,14 +17,14 @@ } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.2.0.tgz", - "integrity": "sha512-1ENEJNY7Lwlua/1wvzpYP194WtjQBfFxvde2FlzfBFh/ln6wvChrtxlORhbKEnYswzn6fOC4c7HdC5izLPMTJg==", + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.15.tgz", + "integrity": "sha512-QPeD8UA8axQREpgR5UTAfu2mqQmm97oUqahDtNdBcfj3qAnoXzFdQW+aNf/tD2WVXF8Fhmftxoj0eMIT++gX2w==", "dev": true, "dependencies": { "asn1js": "^3.0.5", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" } }, "node_modules/@peculiar/json-schema": { @@ -40,16 +40,16 @@ } }, "node_modules/@peculiar/webcrypto": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.0.tgz", - "integrity": "sha512-U58N44b2m3OuTgpmKgf0LPDOmP3bhwNz01vAnj1mBwxBASRhptWYK+M3zG+HBkDqGQM+bFsoIihTW8MdmPXEqg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", + "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", "dev": true, "dependencies": { - "@peculiar/asn1-schema": "^2.1.6", + "@peculiar/asn1-schema": "^2.3.8", "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0", - "webcrypto-core": "^1.7.6" + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.8.0" }, "engines": { "node": ">=10.12.0" @@ -678,12 +678,12 @@ } }, "node_modules/pvtsutils": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.2.tgz", - "integrity": "sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", "dev": true, "dependencies": { - "tslib": "^2.4.0" + "tslib": "^2.8.1" } }, "node_modules/pvutils": { @@ -844,9 +844,9 @@ "dev": true }, "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true }, "node_modules/tunnel-agent": { @@ -922,16 +922,16 @@ } }, "node_modules/webcrypto-core": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.6.tgz", - "integrity": "sha512-gaExY2/3EHQlRNNNVSrbG2Cg94Rutl7fAaKILS1w8ZDhGxdFOaw6EbCfHIxPy9vt/xwp5o0VQAx9aySPF6hU1A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.1.tgz", + "integrity": "sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==", "dev": true, "dependencies": { - "@peculiar/asn1-schema": "^2.1.6", + "@peculiar/asn1-schema": "^2.3.13", "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.1", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.5", + "tslib": "^2.7.0" } }, "node_modules/webidl-conversions": { @@ -983,14 +983,14 @@ }, "dependencies": { "@peculiar/asn1-schema": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.2.0.tgz", - "integrity": "sha512-1ENEJNY7Lwlua/1wvzpYP194WtjQBfFxvde2FlzfBFh/ln6wvChrtxlORhbKEnYswzn6fOC4c7HdC5izLPMTJg==", + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.15.tgz", + "integrity": "sha512-QPeD8UA8axQREpgR5UTAfu2mqQmm97oUqahDtNdBcfj3qAnoXzFdQW+aNf/tD2WVXF8Fhmftxoj0eMIT++gX2w==", "dev": true, "requires": { "asn1js": "^3.0.5", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" } }, "@peculiar/json-schema": { @@ -1003,16 +1003,16 @@ } }, "@peculiar/webcrypto": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.0.tgz", - "integrity": "sha512-U58N44b2m3OuTgpmKgf0LPDOmP3bhwNz01vAnj1mBwxBASRhptWYK+M3zG+HBkDqGQM+bFsoIihTW8MdmPXEqg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", + "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", "dev": true, "requires": { - "@peculiar/asn1-schema": "^2.1.6", + "@peculiar/asn1-schema": "^2.3.8", "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0", - "webcrypto-core": "^1.7.6" + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.8.0" } }, "abab": { @@ -1537,12 +1537,12 @@ "dev": true }, "pvtsutils": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.2.tgz", - "integrity": "sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", "dev": true, "requires": { - "tslib": "^2.4.0" + "tslib": "^2.8.1" } }, "pvutils": { @@ -1662,9 +1662,9 @@ "dev": true }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true }, "tunnel-agent": { @@ -1724,16 +1724,16 @@ } }, "webcrypto-core": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.6.tgz", - "integrity": "sha512-gaExY2/3EHQlRNNNVSrbG2Cg94Rutl7fAaKILS1w8ZDhGxdFOaw6EbCfHIxPy9vt/xwp5o0VQAx9aySPF6hU1A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.1.tgz", + "integrity": "sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==", "dev": true, "requires": { - "@peculiar/asn1-schema": "^2.1.6", + "@peculiar/asn1-schema": "^2.3.13", "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.1", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.5", + "tslib": "^2.7.0" } }, "webidl-conversions": { diff --git a/js/package.json b/js/package.json index 549bfc6b..63538d6e 100644 --- a/js/package.json +++ b/js/package.json @@ -6,13 +6,12 @@ "directories": { "test": "test" }, - "dependencies": {}, "devDependencies": { + "@peculiar/webcrypto": "^1.5.0", "jsdom": "^9.12.0", "jsdom-global": "^2.1.1", "jsdom-url": "^2.2.1", - "jsverify": "^0.8.3", - "@peculiar/webcrypto": "^1.1.1" + "jsverify": "^0.8.3" }, "scripts": { "test": "mocha", From d86f5021366314f4aba0f5ce71433875c79397e7 Mon Sep 17 00:00:00 2001 From: PrivateBin Translator Bot <72346835+privatebin-translator@users.noreply.github.com> Date: Mon, 3 Feb 2025 08:24:15 +0100 Subject: [PATCH 006/196] New translations en.json (Chinese Simplified) --- i18n/zh.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/i18n/zh.json b/i18n/zh.json index 7afedb16..be9cc3a3 100644 --- a/i18n/zh.json +++ b/i18n/zh.json @@ -221,10 +221,10 @@ "Error compressing paste, due to missing WebAssembly support.": "由于缺少 WebAssembly 支持,在压缩粘贴时出错。", "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "解压粘贴时出错,您的浏览器不支持 WebAssembly。请使用其他浏览器查看此粘贴。", "Start over": "重新开始", - "Paste copied to clipboard": "Paste copied to clipboard", - "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c": "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c", - "Copy link": "Copy link", - "Link copied to clipboard": "Link copied to clipboard", - "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Paste copied to clipboard": "粘贴内容已复制到剪贴板", + "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c": "要复制粘贴内容,请点击复制按钮或使用快捷键 Ctrl+c/Cmd+c。", + "Copy link": "复制链接", + "Link copied to clipboard": "链接已复制到剪贴板", + "Paste text": "粘贴文本", + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tab 键可作为字符(按 Ctrl+mEsc 切换开关)" } From f9ac763e62a566dd6e7fa4c506e4b9ecb8190657 Mon Sep 17 00:00:00 2001 From: Anonymoussaurus <50231698+AnonymousWP@users.noreply.github.com> Date: Mon, 3 Feb 2025 11:43:42 +0100 Subject: [PATCH 007/196] chore(translation): update Dutch translation --- i18n/nl.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/i18n/nl.json b/i18n/nl.json index 670895a7..7b15afc5 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -143,7 +143,7 @@ "Avatar generated from IP address": "Anonieme avatar (van het IP-adres)", "Add comment": "Commentaar toevoegen", "Optional nickname…": "Optionele bijnaam…", - "Post comment": "Plaats een commentaar", + "Post comment": "Plaats commentaar", "Sending comment…": "Commentaar verzenden…", "Comment posted.": "Commentaar geplaatst.", "Could not refresh display: %s": "Kon de weergave niet vernieuwen: %s", @@ -220,11 +220,11 @@ "Dark Mode": "Donkere modus", "Error compressing paste, due to missing WebAssembly support.": "Fout bij het comprimeren van notitie door ontbrekende ondersteuning voor WebAssembly.", "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Fout bij het decomprimeren van de notitie, uw browser ondersteunt WebAssembly niet. Gebruik een andere browser om deze notitie te bekijken.", - "Start over": "Start over", - "Paste copied to clipboard": "Paste copied to clipboard", - "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c": "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c", - "Copy link": "Copy link", - "Link copied to clipboard": "Link copied to clipboard", - "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Start over": "Opnieuw beginnen", + "Paste copied to clipboard": "Notitie gekopieerd naar klembord", + "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c": "Om te kopiëren en plakken druk je op de knop Kopiëren of gebruik je de sneltoets op het klembord Ctrl+c/Cmd+c", + "Copy link": "Kopieer link", + "Link copied to clipboard": "Link gekopieerd naar klembord", + "Paste text": "Tekst plakken", + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulatortoets dient als teken (gebruik Ctrl+m of Esc om te schakelen)" } From 28094038930c083e886da5a4151cf1baf36b9d37 Mon Sep 17 00:00:00 2001 From: PrivateBin Translator Bot <72346835+privatebin-translator@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:37:24 +0100 Subject: [PATCH 008/196] New translations en.json (Dutch) --- i18n/nl.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/i18n/nl.json b/i18n/nl.json index 670895a7..7b15afc5 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -143,7 +143,7 @@ "Avatar generated from IP address": "Anonieme avatar (van het IP-adres)", "Add comment": "Commentaar toevoegen", "Optional nickname…": "Optionele bijnaam…", - "Post comment": "Plaats een commentaar", + "Post comment": "Plaats commentaar", "Sending comment…": "Commentaar verzenden…", "Comment posted.": "Commentaar geplaatst.", "Could not refresh display: %s": "Kon de weergave niet vernieuwen: %s", @@ -220,11 +220,11 @@ "Dark Mode": "Donkere modus", "Error compressing paste, due to missing WebAssembly support.": "Fout bij het comprimeren van notitie door ontbrekende ondersteuning voor WebAssembly.", "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Fout bij het decomprimeren van de notitie, uw browser ondersteunt WebAssembly niet. Gebruik een andere browser om deze notitie te bekijken.", - "Start over": "Start over", - "Paste copied to clipboard": "Paste copied to clipboard", - "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c": "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c", - "Copy link": "Copy link", - "Link copied to clipboard": "Link copied to clipboard", - "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Start over": "Opnieuw beginnen", + "Paste copied to clipboard": "Notitie gekopieerd naar klembord", + "To copy paste press on the copy button or use the clipboard shortcut Ctrl+c/Cmd+c": "Om te kopiëren en plakken druk je op de knop Kopiëren of gebruik je de sneltoets op het klembord Ctrl+c/Cmd+c", + "Copy link": "Kopieer link", + "Link copied to clipboard": "Link gekopieerd naar klembord", + "Paste text": "Tekst plakken", + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulatortoets dient als teken (gebruik Ctrl+m of Esc om te schakelen)" } From ed3347e835967706081395363e78549b2cb0623d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2025 11:50:21 +0000 Subject: [PATCH 009/196] Bump mlocati/ip-lib from 1.18.1 to 1.19.0 Bumps [mlocati/ip-lib](https://github.com/mlocati/ip-lib) from 1.18.1 to 1.19.0. - [Release notes](https://github.com/mlocati/ip-lib/releases) - [Commits](https://github.com/mlocati/ip-lib/compare/1.18.1...1.19.0) --- updated-dependencies: - dependency-name: mlocati/ip-lib dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- composer.json | 2 +- composer.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index bdb8c85c..32670358 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "require" : { "php": "^7.3 || ^8.0", "jdenticon/jdenticon": "1.0.2", - "mlocati/ip-lib": "1.18.1", + "mlocati/ip-lib": "1.19.0", "symfony/polyfill-ctype": "^1.31", "symfony/polyfill-php80": "^1.31", "yzalis/identicon": "2.0.0" diff --git a/composer.lock b/composer.lock index 58222e9f..d4d1afa9 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0fdf0f08646fa2a4cf9c076131f529f5", + "content-hash": "034b684cb56661f261b3c82559c38a2b", "packages": [ { "name": "jdenticon/jdenticon", @@ -57,16 +57,16 @@ }, { "name": "mlocati/ip-lib", - "version": "1.18.1", + "version": "1.19.0", "source": { "type": "git", "url": "https://github.com/mlocati/ip-lib.git", - "reference": "08bb43b4949069c543ebdf099a6b2c322d0172ab" + "reference": "86ec0cff2463c83daab105614da42f9221cfed3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mlocati/ip-lib/zipball/08bb43b4949069c543ebdf099a6b2c322d0172ab", - "reference": "08bb43b4949069c543ebdf099a6b2c322d0172ab", + "url": "https://api.github.com/repos/mlocati/ip-lib/zipball/86ec0cff2463c83daab105614da42f9221cfed3d", + "reference": "86ec0cff2463c83daab105614da42f9221cfed3d", "shasum": "" }, "require": { @@ -112,7 +112,7 @@ ], "support": { "issues": "https://github.com/mlocati/ip-lib/issues", - "source": "https://github.com/mlocati/ip-lib/tree/1.18.1" + "source": "https://github.com/mlocati/ip-lib/tree/1.19.0" }, "funding": [ { @@ -124,7 +124,7 @@ "type": "other" } ], - "time": "2024-10-29T15:44:19+00:00" + "time": "2025-02-04T08:16:46+00:00" }, { "name": "symfony/polyfill-ctype", From f111def9463fef3d2ae6aa36ec4a201dab6fe6ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Feb 2025 11:20:36 +0000 Subject: [PATCH 010/196] Bump mlocati/ip-lib from 1.19.0 to 1.20.0 Bumps [mlocati/ip-lib](https://github.com/mlocati/ip-lib) from 1.19.0 to 1.20.0. - [Release notes](https://github.com/mlocati/ip-lib/releases) - [Commits](https://github.com/mlocati/ip-lib/compare/1.19.0...1.20.0) --- updated-dependencies: - dependency-name: mlocati/ip-lib dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- composer.json | 2 +- composer.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index 32670358..5188b14a 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "require" : { "php": "^7.3 || ^8.0", "jdenticon/jdenticon": "1.0.2", - "mlocati/ip-lib": "1.19.0", + "mlocati/ip-lib": "1.20.0", "symfony/polyfill-ctype": "^1.31", "symfony/polyfill-php80": "^1.31", "yzalis/identicon": "2.0.0" diff --git a/composer.lock b/composer.lock index d4d1afa9..f1cedb0f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "034b684cb56661f261b3c82559c38a2b", + "content-hash": "b6e6a0433b36e6c81fcb3cb58b22a269", "packages": [ { "name": "jdenticon/jdenticon", @@ -57,16 +57,16 @@ }, { "name": "mlocati/ip-lib", - "version": "1.19.0", + "version": "1.20.0", "source": { "type": "git", "url": "https://github.com/mlocati/ip-lib.git", - "reference": "86ec0cff2463c83daab105614da42f9221cfed3d" + "reference": "fd45fc3bf08ed6c7e665e2e70562082ac954afd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mlocati/ip-lib/zipball/86ec0cff2463c83daab105614da42f9221cfed3d", - "reference": "86ec0cff2463c83daab105614da42f9221cfed3d", + "url": "https://api.github.com/repos/mlocati/ip-lib/zipball/fd45fc3bf08ed6c7e665e2e70562082ac954afd4", + "reference": "fd45fc3bf08ed6c7e665e2e70562082ac954afd4", "shasum": "" }, "require": { @@ -112,7 +112,7 @@ ], "support": { "issues": "https://github.com/mlocati/ip-lib/issues", - "source": "https://github.com/mlocati/ip-lib/tree/1.19.0" + "source": "https://github.com/mlocati/ip-lib/tree/1.20.0" }, "funding": [ { @@ -124,7 +124,7 @@ "type": "other" } ], - "time": "2025-02-04T08:16:46+00:00" + "time": "2025-02-04T17:30:58+00:00" }, { "name": "symfony/polyfill-ctype", From c7a4ced9e120c28348d7046e10e2225a26908de0 Mon Sep 17 00:00:00 2001 From: Ribas160 Date: Wed, 5 Feb 2025 15:12:38 +0200 Subject: [PATCH 011/196] Added the ability to web users to change the theme --- i18n/ar.json | 3 +- i18n/bg.json | 3 +- i18n/ca.json | 3 +- i18n/co.json | 3 +- i18n/cs.json | 3 +- i18n/de.json | 3 +- i18n/el.json | 3 +- i18n/en.json | 3 +- i18n/es.json | 3 +- i18n/et.json | 3 +- i18n/fi.json | 3 +- i18n/fr.json | 3 +- i18n/he.json | 3 +- i18n/hi.json | 3 +- i18n/hu.json | 3 +- i18n/id.json | 3 +- i18n/it.json | 3 +- i18n/ja.json | 3 +- i18n/jbo.json | 3 +- i18n/ko.json | 3 +- i18n/ku.json | 3 +- i18n/la.json | 3 +- i18n/lt.json | 3 +- i18n/nl.json | 3 +- i18n/no.json | 3 +- i18n/oc.json | 3 +- i18n/pl.json | 3 +- i18n/pt.json | 3 +- i18n/ro.json | 3 +- i18n/ru.json | 3 +- i18n/sk.json | 3 +- i18n/sl.json | 3 +- i18n/sv.json | 3 +- i18n/th.json | 3 +- i18n/tr.json | 3 +- i18n/uk.json | 3 +- i18n/zh.json | 3 +- js/privatebin.js | 20 +++++- lib/Configuration.php | 5 +- lib/Controller.php | 34 +++++++++- lib/TemplateSwitcher.php | 117 +++++++++++++++++++++++++++++++++++ tpl/bootstrap.php | 22 +++++++ tpl/bootstrap5.php | 24 +++++++ tpl/page.php | 21 +++++++ tst/TemplateSwitcherTest.php | 56 +++++++++++++++++ 45 files changed, 367 insertions(+), 43 deletions(-) create mode 100644 lib/TemplateSwitcher.php create mode 100644 tst/TemplateSwitcherTest.php diff --git a/i18n/ar.json b/i18n/ar.json index cde4b990..5d79f439 100644 --- a/i18n/ar.json +++ b/i18n/ar.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/bg.json b/i18n/bg.json index 8974c2d2..353427bc 100644 --- a/i18n/bg.json +++ b/i18n/bg.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/ca.json b/i18n/ca.json index 732ca3e6..d178e417 100644 --- a/i18n/ca.json +++ b/i18n/ca.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/co.json b/i18n/co.json index 91079ecc..bf38d835 100644 --- a/i18n/co.json +++ b/i18n/co.json @@ -226,5 +226,6 @@ "Copy link": "Cupià u liame", "Link copied to clipboard": "U liame hè statu cupiatu in u preme’papei", "Paste text": "Testu di l’appiccicu", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "U tastu di tabulazione ghjova cum’è un caratteru (Appughjate nant’à Ctrl+m o Scapp per scambià)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "U tastu di tabulazione ghjova cum’è un caratteru (Appughjate nant’à Ctrl+m o Scapp per scambià)", + "Theme": "Theme" } diff --git a/i18n/cs.json b/i18n/cs.json index 88148d61..6a8db622 100644 --- a/i18n/cs.json +++ b/i18n/cs.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/de.json b/i18n/de.json index fed65a13..d653a614 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -226,5 +226,6 @@ "Copy link": "Verknüpfung kopieren", "Link copied to clipboard": "Verknüpfung wurde in die Zwischenablage kopiert.", "Paste text": "Text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulatortaste als Zeichen interpretieren (Umschalten durch Strg+m oder Esc)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulatortaste als Zeichen interpretieren (Umschalten durch Strg+m oder Esc)", + "Theme": "Theme" } diff --git a/i18n/el.json b/i18n/el.json index 9b08e8c6..57fbb2cd 100644 --- a/i18n/el.json +++ b/i18n/el.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/en.json b/i18n/en.json index bf36c662..d1b2a46f 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/es.json b/i18n/es.json index e2cc926c..45c838bd 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/et.json b/i18n/et.json index 6e8a83fc..0282a2c2 100644 --- a/i18n/et.json +++ b/i18n/et.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/fi.json b/i18n/fi.json index 446b9e82..cd8dae13 100644 --- a/i18n/fi.json +++ b/i18n/fi.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/fr.json b/i18n/fr.json index 68064f20..faafdc29 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -226,5 +226,6 @@ "Copy link": "Copier le lien", "Link copied to clipboard": "Lien copié dans le presse-papier", "Paste text": "Texte du paste", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "La touche de tabulation sert de caractère (Presser Ctrl+m ou Esc pour basculer)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "La touche de tabulation sert de caractère (Presser Ctrl+m ou Esc pour basculer)", + "Theme": "Theme" } diff --git a/i18n/he.json b/i18n/he.json index 9c28fcf0..550b2167 100644 --- a/i18n/he.json +++ b/i18n/he.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/hi.json b/i18n/hi.json index bf36c662..d1b2a46f 100644 --- a/i18n/hi.json +++ b/i18n/hi.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/hu.json b/i18n/hu.json index 462c64c7..711ffa73 100644 --- a/i18n/hu.json +++ b/i18n/hu.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/id.json b/i18n/id.json index 1a483262..e0d16c1f 100644 --- a/i18n/id.json +++ b/i18n/id.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/it.json b/i18n/it.json index f05d16d5..f358153e 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -226,5 +226,6 @@ "Copy link": "Copia il link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Testo del messaggio", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/ja.json b/i18n/ja.json index 42dcba2d..f4cc44fc 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/jbo.json b/i18n/jbo.json index 9503a47d..9935a6c0 100644 --- a/i18n/jbo.json +++ b/i18n/jbo.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/ko.json b/i18n/ko.json index bf36c662..d1b2a46f 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/ku.json b/i18n/ku.json index c3dc506f..5b98497e 100644 --- a/i18n/ku.json +++ b/i18n/ku.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/la.json b/i18n/la.json index 7e1888be..97eb2f96 100644 --- a/i18n/la.json +++ b/i18n/la.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/lt.json b/i18n/lt.json index 5de37956..e68669ca 100644 --- a/i18n/lt.json +++ b/i18n/lt.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/nl.json b/i18n/nl.json index 7b15afc5..13da44a8 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -226,5 +226,6 @@ "Copy link": "Kopieer link", "Link copied to clipboard": "Link gekopieerd naar klembord", "Paste text": "Tekst plakken", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulatortoets dient als teken (gebruik Ctrl+m of Esc om te schakelen)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulatortoets dient als teken (gebruik Ctrl+m of Esc om te schakelen)", + "Theme": "Theme" } diff --git a/i18n/no.json b/i18n/no.json index 36b3cf88..eb866d85 100644 --- a/i18n/no.json +++ b/i18n/no.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/oc.json b/i18n/oc.json index 669bbcf6..6b3c567f 100644 --- a/i18n/oc.json +++ b/i18n/oc.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/pl.json b/i18n/pl.json index fb5dc73b..b4d24da3 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/pt.json b/i18n/pt.json index b24d5066..19e7e6c7 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/ro.json b/i18n/ro.json index 396b1f41..4708ac19 100644 --- a/i18n/ro.json +++ b/i18n/ro.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/ru.json b/i18n/ru.json index 6eede6d7..ef681b45 100644 --- a/i18n/ru.json +++ b/i18n/ru.json @@ -226,5 +226,6 @@ "Copy link": "Скопировать ссылку", "Link copied to clipboard": "Ссылка скопирована в буфер обмена", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Тема" } diff --git a/i18n/sk.json b/i18n/sk.json index 3853cc31..9dc57c1a 100644 --- a/i18n/sk.json +++ b/i18n/sk.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/sl.json b/i18n/sl.json index 578c47fa..571c2356 100644 --- a/i18n/sl.json +++ b/i18n/sl.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/sv.json b/i18n/sv.json index 8f6dfad1..3e2be511 100644 --- a/i18n/sv.json +++ b/i18n/sv.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/th.json b/i18n/th.json index 48e60707..e2a58cdd 100644 --- a/i18n/th.json +++ b/i18n/th.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/tr.json b/i18n/tr.json index c0db56ae..8eb47712 100644 --- a/i18n/tr.json +++ b/i18n/tr.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/uk.json b/i18n/uk.json index 68cb73aa..1110c23f 100644 --- a/i18n/uk.json +++ b/i18n/uk.json @@ -226,5 +226,6 @@ "Copy link": "Copy link", "Link copied to clipboard": "Link copied to clipboard", "Paste text": "Paste text", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)", + "Theme": "Theme" } diff --git a/i18n/zh.json b/i18n/zh.json index be9cc3a3..26574216 100644 --- a/i18n/zh.json +++ b/i18n/zh.json @@ -226,5 +226,6 @@ "Copy link": "复制链接", "Link copied to clipboard": "链接已复制到剪贴板", "Paste text": "粘贴文本", - "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tab 键可作为字符(按 Ctrl+mEsc 切换开关)" + "Tabulator key serves as character (Hit Ctrl+m or Esc to toggle)": "Tab 键可作为字符(按 Ctrl+mEsc 切换开关)", + "Theme": "Theme" } diff --git a/js/privatebin.js b/js/privatebin.js index b67de8ad..8dcff38a 100644 --- a/js/privatebin.js +++ b/js/privatebin.js @@ -3933,7 +3933,18 @@ jQuery.PrivateBin = (function($, RawDeflate) { */ function setLanguage(event) { - document.cookie = 'lang=' + $(event.target).data('lang') + '; SameSite=Lax; Secure'; + let lang = $(event.target).data('lang') || event.target.value; + + document.cookie = 'lang=' + lang + '; SameSite=Lax; Secure'; + window.location.reload(); + event.preventDefault(); + } + + function setTemplate(event) + { + let template = $(event.target).data('template') || event.target.value; + + document.cookie = 'template=' + template + '; SameSite=Lax; Secure'; window.location.reload(); event.preventDefault(); } @@ -4625,7 +4636,12 @@ jQuery.PrivateBin = (function($, RawDeflate) { // bootstrap template drop down $('#language ul.dropdown-menu li a').click(setLanguage); // page template drop down - $('#language select option').click(setLanguage); + $('#language select').change(setLanguage); + + // bootstrap template drop down + $('#template ul.dropdown-menu li a').click(setTemplate); + // page template drop down + $('#template select').change(setTemplate); // bind events $burnAfterReading.change(changeBurnAfterReading); diff --git a/lib/Configuration.php b/lib/Configuration.php index f22d6048..2849d32a 100644 --- a/lib/Configuration.php +++ b/lib/Configuration.php @@ -45,7 +45,8 @@ class Configuration 'defaultformatter' => 'plaintext', 'syntaxhighlightingtheme' => '', 'sizelimit' => 10485760, - 'template' => 'bootstrap', + 'templateselection' => false, + 'templatedefault' => 'bootstrap', 'info' => 'More information on the project page.', 'notice' => '', 'languageselection' => false, @@ -108,7 +109,7 @@ class Configuration 'js/kjua-0.9.0.js' => 'sha512-CVn7af+vTMBd9RjoS4QM5fpLFEOtBCoB0zPtaqIDC7sF4F8qgUSRFQQpIyEDGsr6yrjbuOLzdf20tkHHmpaqwQ==', 'js/legacy.js' => 'sha512-UxW/TOZKon83n6dk/09GsYKIyeO5LeBHokxyIq+r7KFS5KMBeIB/EM7NrkVYIezwZBaovnyNtY2d9tKFicRlXg==', 'js/prettify.js' => 'sha512-puO0Ogy++IoA2Pb9IjSxV1n4+kQkKXYAEUtVzfZpQepyDPyXk8hokiYDS7ybMogYlyyEIwMLpZqVhCkARQWLMg==', - 'js/privatebin.js' => 'sha512-POa+8KNXFFwJFsqp7r9APmR5Rc1w2l363y+OScSzLCySrHN7UhOOgt1VH/o8mVddFvvUozj3FZVmdkTxRlrS5g==', + 'js/privatebin.js' => 'sha512-YDgd0cFfFHP/DLHQH2CWkGMjdFC5YjwDuWSoEsc1gU4h5sRd+T88mPYva1cdoviKEoty6F8pDe3E6chcMEzRag==', 'js/purify-3.2.4.js' => 'sha512-Mu9BqoHURMeycg6AgqTpokUv9guq88pajfaFqz53fx1OxohyROkydXPLEIbdKCQ7EdDs9hgcrYeZ9zTiPQQ4CA==', 'js/rawinflate-0.3.js' => 'sha512-g8uelGgJW9A/Z1tB6Izxab++oj5kdD7B4qC7DHwZkB6DGMXKyzx7v5mvap2HXueI2IIn08YlRYM56jwWdm2ucQ==', 'js/showdown-2.1.0.js' => 'sha512-WYXZgkTR0u/Y9SVIA4nTTOih0kXMEd8RRV6MLFdL6YU8ymhR528NLlYQt1nlJQbYz4EW+ZsS0fx1awhiQJme1Q==', diff --git a/lib/Controller.php b/lib/Controller.php index 7b49ae8b..1df117a4 100644 --- a/lib/Controller.php +++ b/lib/Controller.php @@ -179,7 +179,14 @@ class Controller $this->_request = new Request; $this->_urlBase = $this->_request->getRequestUri(); - // set default language + $this->_setDefaultLanguage(); + $this->_setDefaultTemplate(); + } + + private function _setDefaultLanguage() + { + $this->_conf = new Configuration; + $lang = $this->_conf->getKey('languagedefault'); I18n::setLanguageFallback($lang); // force default language, if language selection is disabled and a default is set @@ -189,6 +196,20 @@ class Controller } } + + private function _setDefaultTemplate() + { + $this->_conf = new Configuration; + + $template = $this->_conf->getKey('templatedefault'); + TemplateSwitcher::setTemplateFallback($template); + // force default template, if template selection is disabled and a default is set + if (!$this->_conf->getKey('languageselection') && strlen($template) == 2) { + $_COOKIE['template'] = $template; + setcookie('template', $template, array('SameSite' => 'Lax', 'Secure' => true)); + } + } + /** * Turn off browser caching * @@ -400,6 +421,13 @@ class Controller setcookie('lang', $languageselection, array('SameSite' => 'Lax', 'Secure' => true)); } + // set template cookie if that functionality was enabled + $templateselection = ''; + if ($this->_conf->getKey('templateselection')) { + $templateselection = TemplateSwitcher::getTemplate(); + setcookie('template', $templateselection, array('SameSite' => 'Lax', 'Secure' => true)); + } + // strip policies that are unsupported in meta tag $metacspheader = str_replace( array( @@ -438,6 +466,8 @@ class Controller $page->assign('ZEROBINCOMPATIBILITY', $this->_conf->getKey('zerobincompatibility')); $page->assign('LANGUAGESELECTION', $languageselection); $page->assign('LANGUAGES', I18n::getLanguageLabels(I18n::getAvailableLanguages())); + $page->assign('TEMPLATESELECTION', $templateselection); + $page->assign('TEMPLATES', TemplateSwitcher::getAvailableTemplates()); $page->assign('EXPIRE', $expire); $page->assign('EXPIREDEFAULT', $this->_conf->getKey('default', 'expire')); $page->assign('URLSHORTENER', $this->_conf->getKey('urlshortener')); @@ -447,7 +477,7 @@ class Controller $page->assign('HTTPSLINK', 'https://' . $this->_request->getHost() . $this->_request->getRequestUri()); $page->assign('COMPRESSION', $this->_conf->getKey('compression')); $page->assign('SRI', $this->_conf->getSection('sri')); - $page->draw($this->_conf->getKey('template')); + $page->draw(TemplateSwitcher::getTemplate()); } /** diff --git a/lib/TemplateSwitcher.php b/lib/TemplateSwitcher.php new file mode 100644 index 00000000..f2f063d5 --- /dev/null +++ b/lib/TemplateSwitcher.php @@ -0,0 +1,117 @@ + + + + diff --git a/tpl/bootstrap5.php b/tpl/bootstrap5.php index 8d1a6e17..3ec956b6 100644 --- a/tpl/bootstrap5.php +++ b/tpl/bootstrap5.php @@ -323,6 +323,30 @@ if (!empty($LANGUAGESELECTION)) : + + + diff --git a/tpl/page.php b/tpl/page.php index f9a82167..74f61dc6 100644 --- a/tpl/page.php +++ b/tpl/page.php @@ -222,6 +222,27 @@ if (!empty($LANGUAGESELECTION)): + +
: + +
+ assertEquals($defaultTemplateFallback, TemplateSwitcher::getTemplate(), "Default template fallback"); + + TemplateSwitcher::setTemplateFallback($wrongTemplateFallback); + $this->assertEquals($defaultTemplateFallback, TemplateSwitcher::getTemplate(), "Wrong template fallback"); + + TemplateSwitcher::setTemplateFallback($customTemplateFallback); + $this->assertEquals($customTemplateFallback, TemplateSwitcher::getTemplate(), "Custom template fallback"); + } + + + public function testGetTemplate() + { + $defaultTemplateFallback = "bootstrap"; + $customTemplate = "bootstrap-dark"; + $customWrongTemplate = "bootstrap-wrong"; + + TemplateSwitcher::setTemplateFallback($defaultTemplateFallback); + + $_COOKIE['template'] = $customWrongTemplate; + $this->assertEquals($defaultTemplateFallback, TemplateSwitcher::getTemplate(), "Custom wrong template"); + + $_COOKIE['template'] = $customTemplate; + $this->assertEquals($customTemplate, TemplateSwitcher::getTemplate(), "Custom template"); + } + + + public function testGetAvailableTemplates() + { + $this->assertNotEmpty(TemplateSwitcher::getAvailableTemplates(), "Available templates"); + } + + + public function testIsTemplateAvailable() + { + $existingTemplate = "bootstrap"; + $nonExistentTemplate = "bootstrap-wrong"; + + $this->assertTrue(TemplateSwitcher::isTemplateAvailable($existingTemplate), "Existing template"); + $this->assertFalse(TemplateSwitcher::isTemplateAvailable($nonExistentTemplate), "Non-existent template"); + } +} From 0a37a884e24af7b8391e7861e7767e0572d021ff Mon Sep 17 00:00:00 2001 From: El RIDO Date: Wed, 5 Feb 2025 22:27:21 +0100 Subject: [PATCH 012/196] chore: document change --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f78190af..bd9a4bd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # PrivateBin version history ## 1.7.7 (not yet released) +* CHANGED: Upgrading libraries to: ip-lib 1.20.0 ## 1.7.6 (2025-02-01) * ADDED: Ability to copy the paste by clicking the copy icon button or using the keyboard shortcut ctrl+c/cmd+c (#1390 & #12) From aa8f77f673d7a9ab8726bc7228b91583067193ea Mon Sep 17 00:00:00 2001 From: El RIDO Date: Thu, 6 Feb 2025 08:09:15 +0100 Subject: [PATCH 013/196] update jsdom-url development dependency --- js/package-lock.json | 72 +++++++++++++++++++++++++++++++++++++------- js/package.json | 2 +- 2 files changed, 62 insertions(+), 12 deletions(-) diff --git a/js/package-lock.json b/js/package-lock.json index 44902d76..e96b13ed 100644 --- a/js/package-lock.json +++ b/js/package-lock.json @@ -12,7 +12,7 @@ "@peculiar/webcrypto": "^1.5.0", "jsdom": "^9.12.0", "jsdom-global": "^2.1.1", - "jsdom-url": "^2.2.1", + "jsdom-url": "^3.0.1", "jsverify": "^0.8.3" } }, @@ -55,6 +55,24 @@ "node": ">=10.12.0" } }, + "node_modules/@types/node": { + "version": "22.13.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz", + "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==", + "dev": true, + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/whatwg-url": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-6.4.0.tgz", + "integrity": "sha512-tonhlcbQ2eho09am6RHnHOgvtDfDYINd5rgxD+2YSkKENooVCFsWizJz139MQW/PV8FfClyKrNe9ZbdHrSCxGg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/abab": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", @@ -483,13 +501,14 @@ "dev": true }, "node_modules/jsdom-url": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsdom-url/-/jsdom-url-2.2.1.tgz", - "integrity": "sha512-+wha7QGq/vPR97R/wz5+213pyWP1362/xmAMmesyVgxyTFOfAeKtwPah+f2znabdNdcqOPbyM7j/xWHbXAqhmg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsdom-url/-/jsdom-url-3.0.1.tgz", + "integrity": "sha512-qyabYGcdCq/1hxt8OCypgaSwF5cQq1ZytcTJgYHRTF0JtLL9lLyclwbmqfl2hHycJxvf1+QCh5FIPccAnsFhiw==", "dev": true, "dependencies": { - "class-proxy": "^1.1.1", - "whatwg-url": "^7.0.0" + "@types/whatwg-url": "^6.4.0", + "class-proxy": "^1.1.2", + "whatwg-url": "^7.1.0" } }, "node_modules/jsdom-url/node_modules/tr46": { @@ -888,6 +907,12 @@ "node": ">= 0.10.0" } }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -1015,6 +1040,24 @@ "webcrypto-core": "^1.8.0" } }, + "@types/node": { + "version": "22.13.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz", + "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==", + "dev": true, + "requires": { + "undici-types": "~6.20.0" + } + }, + "@types/whatwg-url": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-6.4.0.tgz", + "integrity": "sha512-tonhlcbQ2eho09am6RHnHOgvtDfDYINd5rgxD+2YSkKENooVCFsWizJz139MQW/PV8FfClyKrNe9ZbdHrSCxGg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "abab": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", @@ -1370,13 +1413,14 @@ "dev": true }, "jsdom-url": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsdom-url/-/jsdom-url-2.2.1.tgz", - "integrity": "sha512-+wha7QGq/vPR97R/wz5+213pyWP1362/xmAMmesyVgxyTFOfAeKtwPah+f2znabdNdcqOPbyM7j/xWHbXAqhmg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsdom-url/-/jsdom-url-3.0.1.tgz", + "integrity": "sha512-qyabYGcdCq/1hxt8OCypgaSwF5cQq1ZytcTJgYHRTF0JtLL9lLyclwbmqfl2hHycJxvf1+QCh5FIPccAnsFhiw==", "dev": true, "requires": { - "class-proxy": "^1.1.1", - "whatwg-url": "^7.0.0" + "@types/whatwg-url": "^6.4.0", + "class-proxy": "^1.1.2", + "whatwg-url": "^7.1.0" }, "dependencies": { "tr46": { @@ -1697,6 +1741,12 @@ "integrity": "sha512-p5+L1sc6Al3bcStMwiZNxDh4ii4JxL+famEbSIUuOUMVoNn9Nz27AT1jL3x7poMHxqKK0UQIUAp5lGkKbyKkFA==", "dev": true }, + "undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", diff --git a/js/package.json b/js/package.json index 63538d6e..1a02117c 100644 --- a/js/package.json +++ b/js/package.json @@ -10,7 +10,7 @@ "@peculiar/webcrypto": "^1.5.0", "jsdom": "^9.12.0", "jsdom-global": "^2.1.1", - "jsdom-url": "^2.2.1", + "jsdom-url": "^3.0.1", "jsverify": "^0.8.3" }, "scripts": { From 740fd90db9f22def2f7c4a020d4d3fb626e28fe8 Mon Sep 17 00:00:00 2001 From: El RIDO Date: Thu, 6 Feb 2025 08:39:25 +0100 Subject: [PATCH 014/196] update jsdom & jsdom-global development dependency, fix cookie test --- js/package-lock.json | 132 +++++++++++++++++++++++++++++++++++++------ js/package.json | 4 +- js/test/Helper.js | 11 ++-- 3 files changed, 123 insertions(+), 24 deletions(-) diff --git a/js/package-lock.json b/js/package-lock.json index e96b13ed..bac5a659 100644 --- a/js/package-lock.json +++ b/js/package-lock.json @@ -10,8 +10,8 @@ "license": "zlib-acknowledgement", "devDependencies": { "@peculiar/webcrypto": "^1.5.0", - "jsdom": "^9.12.0", - "jsdom-global": "^2.1.1", + "jsdom": "^10.1.0", + "jsdom-global": "^3.0.2", "jsdom-url": "^3.0.1", "jsverify": "^0.8.3" } @@ -468,9 +468,9 @@ "dev": true }, "node_modules/jsdom": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", - "integrity": "sha512-Qw4oqNxo4LyzkSqVIyCnEltTc4xV3g1GBaI88AvYTesWzmWHUSoMNmhBjUBa+6ldXIBJS9xoeLNJPfUAykTyxw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-10.1.0.tgz", + "integrity": "sha512-fj76S9ky2I1DP0iTDblaHaEVWY7w8bIwxbKGyzKIuDsRuHPMg9oE8yrV5wNzDy1aRlUE/XtWpVXKFtb0P+u4Hw==", "dev": true, "dependencies": { "abab": "^1.0.3", @@ -484,7 +484,9 @@ "html-encoding-sniffer": "^1.0.1", "nwmatcher": ">= 1.3.9 < 2.0.0", "parse5": "^1.5.1", + "pn": "^1.0.0", "request": "^2.79.0", + "request-promise-native": "^1.0.3", "sax": "^1.2.1", "symbol-tree": "^3.2.1", "tough-cookie": "^2.3.2", @@ -495,10 +497,13 @@ } }, "node_modules/jsdom-global": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-2.1.1.tgz", - "integrity": "sha512-nVZiKQhXZzmkFSF+AfpvErIYuzPEuBV684gYpWagtwWTLiy0p5EgQbP7gmNNA6/qxFb8l1E5w1NjES5nSBCw5A==", - "dev": true + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz", + "integrity": "sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg==", + "dev": true, + "peerDependencies": { + "jsdom": ">=10.0.0" + } }, "node_modules/jsdom-url": { "version": "3.0.1", @@ -601,6 +606,12 @@ "node": ">= 0.8.0" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -672,6 +683,12 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, + "node_modules/pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -764,6 +781,39 @@ "node": ">= 6" } }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -831,6 +881,15 @@ "node": ">=0.10.0" } }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -1380,9 +1439,9 @@ "dev": true }, "jsdom": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", - "integrity": "sha512-Qw4oqNxo4LyzkSqVIyCnEltTc4xV3g1GBaI88AvYTesWzmWHUSoMNmhBjUBa+6ldXIBJS9xoeLNJPfUAykTyxw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-10.1.0.tgz", + "integrity": "sha512-fj76S9ky2I1DP0iTDblaHaEVWY7w8bIwxbKGyzKIuDsRuHPMg9oE8yrV5wNzDy1aRlUE/XtWpVXKFtb0P+u4Hw==", "dev": true, "requires": { "abab": "^1.0.3", @@ -1396,7 +1455,9 @@ "html-encoding-sniffer": "^1.0.1", "nwmatcher": ">= 1.3.9 < 2.0.0", "parse5": "^1.5.1", + "pn": "^1.0.0", "request": "^2.79.0", + "request-promise-native": "^1.0.3", "sax": "^1.2.1", "symbol-tree": "^3.2.1", "tough-cookie": "^2.3.2", @@ -1407,10 +1468,11 @@ } }, "jsdom-global": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-2.1.1.tgz", - "integrity": "sha512-nVZiKQhXZzmkFSF+AfpvErIYuzPEuBV684gYpWagtwWTLiy0p5EgQbP7gmNNA6/qxFb8l1E5w1NjES5nSBCw5A==", - "dev": true + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz", + "integrity": "sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg==", + "dev": true, + "requires": {} }, "jsdom-url": { "version": "3.0.1", @@ -1503,6 +1565,12 @@ "type-check": "~0.3.2" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -1562,6 +1630,12 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -1635,6 +1709,26 @@ "uuid": "^3.3.2" } }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "dev": true, + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1677,6 +1771,12 @@ "tweetnacl": "~0.14.0" } }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "dev": true + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", diff --git a/js/package.json b/js/package.json index 1a02117c..3ae115da 100644 --- a/js/package.json +++ b/js/package.json @@ -8,8 +8,8 @@ }, "devDependencies": { "@peculiar/webcrypto": "^1.5.0", - "jsdom": "^9.12.0", - "jsdom-global": "^2.1.1", + "jsdom": "^10.1.0", + "jsdom-global": "^3.0.2", "jsdom-url": "^3.0.1", "jsverify": "^0.8.3" }, diff --git a/js/test/Helper.js b/js/test/Helper.js index 95ae5709..f14c1057 100644 --- a/js/test/Helper.js +++ b/js/test/Helper.js @@ -234,20 +234,19 @@ describe('Helper', function () { jsc.nearray(jsc.nearray(common.jscAlnumString())), jsc.nearray(jsc.nearray(common.jscAlnumString())), function (labels, values) { - var selectedKey = '', selectedValue = '', - cookieArray = []; + let selectedKey = '', selectedValue = ''; + const clean = jsdom(); labels.forEach(function(item, i) { - var key = item.join(''), + const key = item.join(''), value = (values[i] || values[0]).join(''); - cookieArray.push(key + '=' + value); + document.cookie = key + '=' + value; if (Math.random() < 1 / i || selectedKey === key) { selectedKey = key; selectedValue = value; } }); - var clean = jsdom('', {cookie: cookieArray}), - result = $.PrivateBin.Helper.getCookie(selectedKey); + const result = $.PrivateBin.Helper.getCookie(selectedKey); $.PrivateBin.Helper.reset(); clean(); return result === selectedValue; From db15ae8b4376e315cffde3d834c422272a3d7554 Mon Sep 17 00:00:00 2001 From: El RIDO Date: Thu, 6 Feb 2025 08:43:02 +0100 Subject: [PATCH 015/196] fix prompt test rngState 003ad8214ef0579cb6 fails on a single \n (line feed) password inputs can't contain carriage returns *or* line feeds --- js/test/Prompt.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/test/Prompt.js b/js/test/Prompt.js index e7c88501..c216666d 100644 --- a/js/test/Prompt.js +++ b/js/test/Prompt.js @@ -11,7 +11,7 @@ describe('Prompt', function () { 'returns the password fed into the dialog', 'string', function (password) { - password = password.replace(/\r+/g, ''); + password = password.replace(/\r+|\n+/g, ''); var clean = jsdom('', {url: 'ftp://example.com/?0000000000000000'}); $('body').html( '