From 57bccfdbd1e495d99fd3d220e3ca94df23395ab9 Mon Sep 17 00:00:00 2001 From: Lai Power Date: Wed, 3 Jun 2026 21:29:19 +0000 Subject: [PATCH] updated plugin `Two Factor` version 0.16.0 --- .../two-factor/assets/banner-1544x500.png | Bin 4859 -> 0 bytes .../two-factor/assets/banner-772x250.png | Bin 2255 -> 0 bytes .../two-factor/assets/icon-128x128.png | Bin 1225 -> 0 bytes .../two-factor/assets/icon-256x256.png | Bin 2350 -> 0 bytes wp-content/plugins/two-factor/assets/icon.svg | 6 - .../two-factor/assets/screenshot-1.png | Bin 155635 -> 0 bytes .../two-factor/assets/screenshot-2.png | Bin 150589 -> 0 bytes .../two-factor/assets/screenshot-3.png | Bin 42368 -> 0 bytes .../two-factor/class-two-factor-compat.php | 8 + .../two-factor/class-two-factor-core.php | 875 +++++++++++++----- .../two-factor/includes/Google/u2f-api.js | 748 --------------- .../two-factor/includes/Yubico/U2F.php | 507 ---------- .../class-two-factor-backup-codes.php | 136 ++- .../providers/class-two-factor-dummy.php | 12 + .../providers/class-two-factor-email.php | 133 ++- ...s-two-factor-fido-u2f-admin-list-table.php | 160 ---- .../class-two-factor-fido-u2f-admin.php | 363 -------- .../providers/class-two-factor-fido-u2f.php | 404 -------- .../providers/class-two-factor-provider.php | 17 +- .../providers/class-two-factor-totp.php | 496 ++++++---- .../providers/css/fido-u2f-admin.css | 12 - .../providers/js/backup-codes-admin.js | 49 + .../js/fido-u2f-admin-inline-edit.js | 150 --- .../two-factor/providers/js/fido-u2f-admin.js | 48 - .../two-factor/providers/js/fido-u2f-login.js | 16 - .../providers/js/totp-admin-qrcode.js | 35 + .../two-factor/providers/js/totp-admin.js | 95 ++ .../providers/js/two-factor-login-authcode.js | 38 + .../providers/js/two-factor-login.js | 11 + wp-content/plugins/two-factor/readme.txt | 236 ++++- .../settings/class-two-factor-settings.php | 97 ++ wp-content/plugins/two-factor/two-factor.php | 143 ++- wp-content/plugins/two-factor/user-edit.css | 67 ++ 33 files changed, 1920 insertions(+), 2942 deletions(-) delete mode 100644 wp-content/plugins/two-factor/assets/banner-1544x500.png delete mode 100644 wp-content/plugins/two-factor/assets/banner-772x250.png delete mode 100644 wp-content/plugins/two-factor/assets/icon-128x128.png delete mode 100644 wp-content/plugins/two-factor/assets/icon-256x256.png delete mode 100644 wp-content/plugins/two-factor/assets/icon.svg delete mode 100644 wp-content/plugins/two-factor/assets/screenshot-1.png delete mode 100644 wp-content/plugins/two-factor/assets/screenshot-2.png delete mode 100644 wp-content/plugins/two-factor/assets/screenshot-3.png delete mode 100644 wp-content/plugins/two-factor/includes/Google/u2f-api.js delete mode 100644 wp-content/plugins/two-factor/includes/Yubico/U2F.php delete mode 100644 wp-content/plugins/two-factor/providers/class-two-factor-fido-u2f-admin-list-table.php delete mode 100644 wp-content/plugins/two-factor/providers/class-two-factor-fido-u2f-admin.php delete mode 100644 wp-content/plugins/two-factor/providers/class-two-factor-fido-u2f.php delete mode 100644 wp-content/plugins/two-factor/providers/css/fido-u2f-admin.css create mode 100644 wp-content/plugins/two-factor/providers/js/backup-codes-admin.js delete mode 100644 wp-content/plugins/two-factor/providers/js/fido-u2f-admin-inline-edit.js delete mode 100644 wp-content/plugins/two-factor/providers/js/fido-u2f-admin.js delete mode 100644 wp-content/plugins/two-factor/providers/js/fido-u2f-login.js create mode 100644 wp-content/plugins/two-factor/providers/js/totp-admin-qrcode.js create mode 100644 wp-content/plugins/two-factor/providers/js/totp-admin.js create mode 100644 wp-content/plugins/two-factor/providers/js/two-factor-login-authcode.js create mode 100644 wp-content/plugins/two-factor/providers/js/two-factor-login.js create mode 100644 wp-content/plugins/two-factor/settings/class-two-factor-settings.php diff --git a/wp-content/plugins/two-factor/assets/banner-1544x500.png b/wp-content/plugins/two-factor/assets/banner-1544x500.png deleted file mode 100644 index 5b6e2081cf6d604d3b27df7f2bf1bd3554056698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4859 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 Rj=~p(gdU&--usfC^)Dapni2p2 diff --git a/wp-content/plugins/two-factor/assets/icon-256x256.png b/wp-content/plugins/two-factor/assets/icon-256x256.png deleted file mode 100644 index 3240b832c92997756aaf75e7045372ceaef18272..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2350 zcma)+c{tSV8pmfCOO{M=vK^YTCNz~AZz*Fp*}^DI$t0;x_0nZ)(+I^NNr@@NYYAh< zAR|i{Gb6iXX~uRYTb7WVhDP|E$C-1^_5O9P^Zny~zW3+3pZ$0J$j4nB6y-GJU@({> z&e7Hb27?0&hsjEU<_gUl4}(cyjyvP+Kq?Rj+S}VZJ3Bl6BtSqWj(@@%1PBz1&EVjm zxa`A+58^Vh5f=c`*ViZJ5Crw~^oWar2d1m5OPq?Mct~qodroy@1hxKbMz!T5rfzhJ z`rTrsTXaMy^)06*?M+*;*3^yb#Kpxk#EmE5M* zwv&{q5>}I8Oi3D(qi~ZJ$7lc>zFk-k)&dH7U3WC891z)X8i;ClivcveUkbc=!W+kw z3c`yjK%!_Y5X;%kfFFBW!RPbu6xK1>%@QG0K(LRPpf|Og19sll-mV?V04X?H@atO8 z%W7&x-l79SDyj!5kH-TM9ajco!Mpd8p+#WSnHN>!`{A~<8a>!py^_P%Qr@t^6Mz&E zx-kPVKwuTI`S>r1J?Q^ z(f<$^qR=6z3R;9_pb=2_3W|aJAw}RA&~?ZRg7!;7B@je}e3e(BdI<7^6#fB085=Xc zg$_dHpxp-*K+rUF99ZNS{Z;{~e|rsE$sS37^%;*zsb-uGzt)7rzHt=2G@ z)HKf43V#DW+kk;fSixW=dw4Y@rW(;-r$u-koKvhI%fPr@X#=+cnd2&)Uqd{ST5w-P z9X~Xpk}hu(drmDrJJTvpHI_nI5)>;xwOQ={tP#q0(q_ndalD=zshs*MbmMTfoX0%V z(1J3pp^j3MmPH>WrNuMk#Wi1x5nh_ErR?`ybTY~^UfIHgtn)=wh0Mn}Hqq~$uM&pG;M|*v1mE_S{(Z97GBJI~96bPS z*{{~0aj&?^cqPdJdWBXV2%ch`ZhuWzZzm}R^j;VuMmpesazN3qqBR9zh=qpys-6a5d66bxuCBcLJ;yNmPDi)oyVaA zOA+_FwUGyhUvay>vh6SWUK%C|CCPeI96$Gob>(eNdgQ`#g#5!7J^7zk^vLvHnPvRQ z`t~!JWJHvydBn10Th_o4TrN+VNt<7v*qa{Uuyw|)!QxYx-F^gBkIcj>s{71GUv`vJ zL@%cf*B{ARb35VD+}%0VK-cV+;pwHWC{D+J>slA2;aB&?9kzc`gEC6-kmCAy)gX}~ zYA(Jbx~p7|0(VdDl|uz2YVStHrx3PqX&=u=b<{hh5XdfV28kMy!MaUe*NOKKnVM*V zLX@|%%s!NKA4bA5coaLIzY<1F_y6gX@zaj2q-kRB_@KU#EYMwz`{?)5|EEL7Pa8Hv z(}eG0Yd=n^i^_bsZA_O#Gk>f%($vSZdSyOR$cW*4@Kp`&ROlZhI6qd9yuK4PlApM3 z79C=f!6)YD*eAH8j65?hwPOcrm{i~%93Him8L4=BA+ z|NC|f%qsbayfqSa#2OjX{|1fN(XAt4W%gdXF&oLnJ>p6ta7%`p8f>Cea8}8kB?c5T z1iV{U9+z~a#VW1ENHLHgX;6oQQRWi7X>L5C`c6WI9L$h;|0l2rJlp>Zv$ z!}KISXv|@l$Prpo*P<1TBNd^-KcaOai72@&Xfzi&mirfjj)F#K7>sOI5I6j?g`{T@ z%N16@k9c6ppTXxM#~(iNVVOm-hE7R^>^C$na$!|Ra-W?>jB8$+O}&d{M#o(#m(-9k zYAVzW(nfineGWgl>CkeH>cS8T-%Egp!d)3W*@Zoq?mKHIOQC4hhV z$oGQHwVoIS1RQoont(MLQpX0V#ayaXktY4vTlwQA?`QX12UZO(fsjR_u#vF;+XPWw zm~s$9ldpfF;g71O_d2tLzhNvG9K`sXa9uRER(+u_()8c6MoJ)z`>&DZDrPI}q;7`| z=0u%ub?w=rm(f3+sPV}yOhj|%-f|T&r_bahofkY?WtYu4{OA7-V_B|AOfux7TLc

- - - - - diff --git a/wp-content/plugins/two-factor/assets/screenshot-1.png b/wp-content/plugins/two-factor/assets/screenshot-1.png deleted file mode 100644 index 001fb2aece2e7af643c9117630f0a7e21ce094e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155635 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⋙~a9tQoW>}WsfacQU*EBwSPh{AX#>LFfvN%%6B^X=&fm>C2hTtEhgSkE zf=GclDFw(KjXxpWBF#QlHK5Iu4?jl{9Yg|LbjfDKWj;_U@LW>mpFMvUw?bpcWXrk_ zbxHNXDxyU`pdjfyEM5IKakx`SsYHNqmv_LaH+`2DjvZl)bDc3k&Rf zXz6b?^MhW9X;0|dx;L6%J7=&Wp-&rwi(AV##T93t0W;Y;*?wQjpsV!dOKvtxrLiKc z2;m8+x(Mw_v-6uV?v1u2E#{UC0XE2ZZM+9-Q>pjnW~hY?qHl;JOJ|S)r zrmb-;Ml{<)HxJR+0(ZGv zOS`K^r38=NK%EC76A5JYtrj2}g?uK~wf3iRN*kgzdoU&rxRO4|9q6DQr^(EL2lYy( z(d0`drPa;1t5B{_~024AC;6l`)DR-Yn%6IeB{f^O{)wK%}W6tbI&?)v6C8`KB^$Zepul>L(MTXR#h#{3J&DIYXP1WijvHGp?Y&Z5lpiwD5K@JQ=45w;zn2P*;PzKm#z0 zHMCz1;7_gJR*5u-=k=^E&qMk?tmTC&__M+Xk@0Q5D0-Ki(nk!B8c@S~lLN598c($I z_gWxh+2_c)Dc(9Dmg3dHRxgYXdK+_+qF0vNpCL`#D}fV+on_w7nO<|dcSiFkX}3W7 z+WHW%N????eudsHDf?O7k8<0IM%57w77v046rnXnhjIAXC8?FCiz%^Ow0t z)p*roMBcR|=`7>c_;uE+Wf-~y8HJnf5%$Lo8|gFE{D3l|ii zO7*UR=+W|K=ei=<(6~UsKLe(Y3ho?K<6KJXXPq}UDjU94f+@Ep&sJkpB2zRr94~(p z4AAwA^ukiR65m z&ofbu%;4buVho~p(Xq&W*Ayp&4Q97Z&s9Gr8@~a>02_4rlT=w<__n3dSw^(l=xW*%2gMTw+NGUV=6bV%Tha}Nfn&b zDCVI)(@C{+M?W}2Mo*2`DwcB9QB93HdL+*Q&jsuChzz~E@G}h_^uGqLpP)_9YRn;9 zZGVU8+ge^S^4eQkI)m10zW2loOV9mSfS6g>eCZ!zokF2Y^{$rpDNfQX>iE)U(*%Gf zL4*mLUndN#3(4aYil%IPF~KP|3RKT0ljzh7xb$UE|L*Ak7s*l?mYY^`Ycq;1Mdp@% zjD_C~-nTcI{|J-e4{*DJORz|<4j+C?Jkl6a;XSkJ2viuD6ZvLw*X-eDV>9C=7qMxZ z)mm%l#dJ@+;5;8Ks`fmgUtD07@=Lz|Zm_@*#+EeH#=j+pvfbWaiqv{0v5S(P{@ z&QHJx)PT@6#Eg5Bn2>4ZedoUjH5wq2DNfLP_s}sH$!F<}3V_fV%xiR{D@{Nj2e82-2)6^FHu15z?lzrJLUM~f*U&cw5L-soUmki`1!2X>w+ z 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
ex*XzQ<_QyYDC<-1KB`4thg}H%-)Vv z%V>Pj<;2x6qs!N`DYufa_B&GD{^Ngru;c-J{cca9@E1qNfkrwA5cr(uCl+^oov^-~ zr^8ONjb7`4E?&;xOvVSdQxuQ8cF%pizI`XDZ_hrNZaV2d%McF!7l%QhzJW+oUrFTd z`GhTZg25LnPLMF2-4^fBkKGpAi}T5Dy-ebU#go$>b2CBdnyPGp^0D^%;*cL#Bh-D` z*g0zP^^WYSl~=&onn1!g>FZ)CJE@CwwG0du5n8A%YpP_klH3q>9q|5RcYrr6F8su8 z1%CFNcPsi<5=l6!wAZk*$y5B9eukq2wXbFKXY{72KL)5p{u2Qq_?tNJ?G~zKHwp!wG9T6G!e-+;y5b_gE30XkSdb9i(Nz=U#Nzfv*QE$GYzgb+Tix`$d0g z={iCEoeUZ#fOZm!cho|jP(rvc57$paK~YM!hHsInK#~}VqToaHfDJJI?~tC|bCOf4 z+XmsPpH1VrlX?m5hTgscVxIs;VY%b1H{4)3YdwJ8s6PSKdg6jbVrQ;x+bs+*E;fy( zBZ>Kon0SQzKw~DM{$(r_p&P5bY0n#W2(LM9&!GD-OsTc|X(}_DE8ER+$PgcC)X-7d z1lw|l|2j6kXw7`tcX1OY!JZQ&3_h=aiUoK^+%g0s_{=rmfhon!o;lt-UG&& zh{{vH4N|}Kw8`eTFVKGVdTDP*?Yisg*W8SwtB&d?q|$^A(i(DqFb^hPP?cfp{OXK1 zIkLdPb0M$aLuhRNPUcxxf{Gnusjs;KSHnd=kP$FkMhF>Cn=}^A2bCcCy*u{KcdjC#?)A#8L)C+l zZF}ALDQAUA0?;RoAdw}%4Sn$kx-SW&JUXuM(Qui{VvdJEe5Qf%-pX1$nYMi__MESH z_05J659V3d)wu3O`3&^H3Awza+;s&S>o*Q1xPv<5ci!YDv8J*WBg6g;Zrz`!=f ztKTCue^BAG*w}9w+tXWKrAs%qhct~yr;w=S>&FJYpYmyb;rk(9QoQ7}cG2b9(5Kq8FFzyiV;Kg5Y zf#HfN<_MS`)b42%$aEL6ue#2z7Yl!<~cdM{>M?>Mn__%)Q zM3uc?;tw)v689fFyLF}sF%JAy4>2ENSPXz{>y8PfERT|V-)k1y$+8etJNXCBE2vV( zlKZ)Q#isEEUsDG`p4ze6?jU@gj8KupkK{1uLCBg1SUscrcUBG!nRlZ-Es!9Ei*WZ< zBRd>Q8xF@04c2Zgk4qf@g+r2SaHPi@TcQYsC$pO_cFSRz(Bti(M6=h=FZ@?8rfzw} z`|J>GgWr)hi($Y{vp)&>8AmIMYbx{E7+(H270?jINQEQ4&3#vYz9%I;cXeIu3N}9h z^Y!nxGEk}YpCj=T$0{q-^mY-Z|z?SC>8&5t4S z`VJJ)^dl#qffCI=Ubz*=?#oZUt@}j@Bezp|nF&|1_u?q4bV&V+pnSk&Yu=6L);3=* ztL#MU*co`SaQEP&?gsK zZIY@`1H5E%SfFM#pf}<+lvD_i%z<6zrt%}YB3>4k)fVnHw)Q!r3U}wpBT55)_?a3* z^Tr%eC9O-yM0zu)O48!SwiG2^(fwGcHbW-WCmQe-7_Y#woD!%H0= zIL~-!U$1wwC6&d5TDE2IBFu)ngi*ea9>yLT!aWcY#{M0Y*tP{}($&g2&}=)Fng30BT4MU#@$(eGGXx+>5a8X}Fk7ijw*l%N?C#OavxefjEeI_&aR04*jG z#lWO^pWMSoZSDid4NXU7ZC^Z%TnJy_m#jSg#tw@#k=M{vmTvJHZhjoj;bX{mZkYA= zY_g<*Ri<*o3SEb;ok^xp@|ZOp->5*cdUr0NY@HB2YRs z?S|TUd(hN;+Udmb1vwUjKEy!mV_ukDjY0CyCrWj>^W{{Z*4Y1aftMmsQ<~g3S`xq) z>_C>j>uK8&hH8AedSs3u&k$5OO&8$>QNT*2eKz&tbtK`8TZDuw8k?xj+STD zfPf7l=~?pm55D`daKatR!;6Uzi`x9s9fd$a_@W|nWckjZSv#%?b8Xb6rx~LUAC}KZ zPP@^Zyn_oasILk6Sa%pU+|Y>^I51=~ry$j--YRiitBUtl{=otbDN5jBRC}H2Dm>VG z*}Ziv>XUtz za<_ss=x{iam*dl-ACgydddPr8LzdiuKHhQXy@z4^QS@Ae4g$wuN#S%6?xUJ%PIlO9 z8GuehFQ9IHfNY6q&m(Cc!^={8`h&+{Dt9-`VLt+BckfT8IkYb!2wZYI11Lc0;A}jHcl>&k3GVj9*@fZr9I8+hg~hj5 z&TUdM;9|-?H+ejDwAIN{j8aNs45&nuxTL+#GueT;pWnVB>EyzTK8?&D- z21~k;qCGN)GW_MIA%BRZk@v;PxEWTnf&nWQVP! z;{lSKMb>}AYPtYm1?6xL+X_v;2TiRHg9>2Blay>EYL)&ApN}J>e4e~+XS4m$Krg+X zAYyAC+J84&MvWW?0BK(WyufnEmkUC1*wK_Av%!JiyR1-DJ^SemxsVt=;^Bfw*HpWa zHu(c%n?XBl`goMx`Ew?SUwY=s^nk_aSwj{zmYkG(JGh}fOsWCy`sA{veyuduxM6?V zLEt0KLVNB(B8h6lUjSruUqf6QxIFJ-v>4PEIz38wsXIkldWYpCsjtJD0BkhJT>zoshpW3 zKtUBdzuTfFdCgo)B?=Igpu-Nc^r>`74UQ8)*@S|iTvom&oR+_}t~9^#lz5#%w^(j; zh>(aH3`X83mZpRSi*4O&efeiLJxNcW8r$y{vwow<1$h*Yq^fBJbYkBzYpf0h+y;(HH#DvT@|Fb*)P3r1w{? z!C%EnWTBI7uemj7vS?3{f!Fs@M@TG1L!f&S&-373$I|%t0hLe@9b*m*CMV=CITC~; z!+xJOS}ZVpKrJQi;?i){PamHUo1^X2JkZ(OeHIxqVZWf27nTJOULgzJ@CGfDo&Y^bOQV*qeDu{aQ4BT{ltFb2J5#t@y{Gy*b!>ppY<9tAuE?g5T?iEMM;*ZfJV|3v)EUAXG2e@gU8 z_vejm-YhnU>!d$xvUQsmWA=DX7Oo%X6e&bq*q#PXJ0y>U9>O5Uashc;>>39>BatZS z_0=q4j0MNnM~;%Hf7>IRI6_rVV8g_&W~L)cEw=ojj!}#ZF@RwCqT}N@EXHSfBVB{w3Z=ooGjh2 z`na!3VP~0_MJ2e^ek)1lB2p}Frk{d8Sv%HfLLlB=W(d7t0*g0M&Wusx{}Z2uZlH=s zxi(#~!EU9a)1YN%!DOCH&T0ss#TIWePiIDikH3G=h+-=9#X=~$$}FvCtCkcuP{k-E zlNrGb#FV@_ix)RDp!VL?s4>(cWPKZWDq`p{e z>)9-2GIe=%Yf{{M;g;Y14|RJj?MKd+4-!ye38_8pf}?&7Xx@hJ;WO_@&mF2o>W&Pb zV=ftRk>C&!Cs>$2)TOZhD=u zZOKI#Pg>RB9cf!eyiYROVTf)Q<8~RL0~xha2)c?lx#|Yr=ReXDYSTf2_e`GllN{emK2M2OxhXU4 za<2%TPiyTU;Aw$ADtycNiIF+5(o;NvZtXeDqE@w4oEuiud%uzm_KL;8D4k>LH(0u+ zE>4g`&r>X3X_VPH`E z?i+eD=(ZAr#Lj@Z_YA?CR^Pi_o{Q4wQ;eg`H_2)y?;5?gG3yQ4PUL_|Ui)zWt+;!b z-jUjJ@Uj8Bf<#Z!{PXNzR&0*WV`P#xud_@s+LLMmo-jF5*2u?Xu4XiiIwK0P*xgl7 zM5=RJIEZoS%GN4a@kp5=CQb2|0irA~&5=@?H z3bd8>nO8P(&fWJW8%bV$KdKHF&PRK>NhSJh7#wteL~r8vEE157Jbt2q>AtuhkE&t5 zDWi!Y!t4q?ckBOjJ&R_SYJS+{eXWoN=Cng-iE4?bt?u-NteU_ly@HiXPmCfY(c}BW z?qPaa@dqg%k3aYRNLKzxE*4hM-#`W>cpxG;GR$-6?_rGPubouu85%7Oi{(>;CGI_& zJA?<5Q4_F{;C_J9V%Q?-l(vxfJ5CkOflei_(9oXK|CKqhnIl|#62R>c%RimrXPYH zN|0}L8U*GZ{`}8k{w6+|%HXllmq(iv)>eNo4|-(Pdd9TQ*=V(U9gb?i3qpn8-g+Yb}0OrI}YZsl9k%+%5L?xR{}Ib9uL$u{VB; z3_3*Hos?i^+&?HnL35PDk;JFcV)=`X{wurx2DNm3<9mKHlezk3>TeS)Fy_E5bKl`u zl$XdMfmD!r<>TeqOpQXP+6u+h@RTGua&1yO_m!i!TtDgL3Gfowt;-&tcdA3p2aD3y&?BjL-KWv z)9rz^z;-xUU<5JBoFlNL6h7i-RYHi01o}-zM03v;^ZibF8@8?G zxf#S6y)BvPt9t&gd4I6u`Wp+L+kT1|JpKE0;vetyoi|(yJO$x(!{O#IkN7RN`DPV&(WCq1MEY zXxfmDNTIZ(u2+x5#Vtb#20D4DQ|0^+#R+M@-bmXmC8)7ybLc)^r;S_GQ&v)?pQtsQ z=g9~Z)lXsUxNYr8CO5uDi;&%tzFgsA4yeAOf->G_G=c4bQym*?7 z;3gK%ClU-+4V8<&vwH<{VE_FUe^i+m;%a7*op5!sP^A_V-*CdS_yx_j^0cN=Kj zN87_^XBV6jQPCo(m7?d>;vD{5J~wgxFz;~iRnYs^pFcnQqFOsY##?W>Wq_COhUdcF z+6~3{xcvqkpJOQe7M@V^&>n=h^jii7%Mdzx>p}v(mUhLJuar0a5_vx`-JaiKoj;lU zP;h7koc87fG$T|ZJ~QeA8a4mb5ys6xh!BUvrM?MY zY(FfW4Qc504#k*U_%~xmm(yu}>he zURar&%F`?KcROQi7h=b&yIwIhOC}xmgO%J)=OgcCXHvMv6F7-*Qb)V&U69wXi>i+A z@1J(bJHJlf*p;=84eMmlQq8O6a!)6&uhm5>n*FvOwhw2Ap7}h-L?ezI zZt+cgP3P5(D}R<>#~ND@)FmsRzL>yiFTgj@sxV}7Q_W6h;VStN@B7-fd0rQuk6gjU z$)QK&{QP>9VOi|9$|~0EK{f&FxA$Wx>~pluu_hb~a!3A-s~IHQcZp z1XkB-v;76GjjP&S+xJ@iN}~Logm`8&+yRa-%>PZtW>6FpDbYm{MxUT19ZhpB`8uWY zIdQn{&fVYXy%7ZVA7%dU_YAld7Z>ZuvxsHZJrI)vX{vphhI?|pTk$p?Al$1sr+9B` z$3AV|;BdG^2__|?NghUOxJ3}y6)Qb1Q*csb*p=Rx+R@PU{BgCj;hCalv`o*z@y5b0 zKNzoR_K~f?8bxpR4XUuA^vYwesQcQ&-r@S4lKLPjWv%<3EEL!5^I#cPE!)f*z&; zo8l?h1#cy#!ur9xP&snDzE@_9U9DuabH6~;Lpo)(sqnqpJQ=t3P2^s67<6ND&wb&( z^`qudOaGf5hotmW7I&Dn07%{keAjyEV(xKJd{PeYJzaYCKHllVgD@za(OVK68Gn_A zx;Z{l|8ZG8^%bWRdMHfb76f79`n!(n#}>qXh#Y2bI>>xcT@k&XUJ5aF9t!It?(m(Q z@nZpJjR4h;1CYr0^HI+&-&W#91d5fw_^gK-_61uxS_={mAs2qs)_sshkw6ZsNLm%c zo_^zazo!9`NRbE*KS0v#EGLB&Z0amA=Z{&~raB3yLf1fHo$<=LxqB zvZmn`(W;&NlmZ|3yg;{(bOevb>0wEx{kQ62YN;0dKWi8{e+pn5N}CFn)h8W}vM_=c zqmkl%Br3nHct7ni3Z3LIcwU)(OngkpxrBc##V|(n9|km5fHgX1UtzMY^NTb;CY(ln zSw6KaeBHWUV+1b3wr*Vtf(>|!6HZ~~6b;PKw0FY2p6K@nemu&`k-zhotuUYmh?al! z3XWv`|0$daM~y9ht$xGO{LCbPJJcVMM`0|bFi2Dkg2|q0k|8zFhDpZ5f};;2cdLHD z>HE2Z{J`BN@yG}ip+({Hn7#buGJdzZzv#ar7fWop1POid$aR@>3T7_ARv7 zHo@*Iwr>*Z1X6nESl}bsG5#DAC8TN=-Rzj9-ZB-e_T}N|CWtv>2Bar}@t)jluQ>y1 z-d=afC-i_Vuk$w4($6qm5)u9uhziUnJQQ%~;K%>(yF>_DR)QD3790po7%c`Z1lTch z2vE}p4K(j(4U@Z<57@MMfWH{{quI3h6v}_nS7Ek~hrWA+;m9}~&B21TpS3)e0jsyu z+BK{4u!S}(O&y+q*xO;GrcI$5fVJh+hnX~MzHyKpd)`r+9lX=QaKWe#B6i=Uz;9}yq+%BA8*iGELGh8cI6)=_D#!$m5NXM?do zXpx`%_y+IaEEWH7Sd-c9O@StqQXYbAUWy_W!;+_!?99}^cFh)UKos`zdZaDB+6m=^ zY}L)Q8(|>|$f;ms>=Ou(C)0WCMR(;NNFu)27&I>KFSQ6p0B zzm5QUzEgHN-SEz-WJ{$oe)1o)j8A-|va;*I0_BR9YnM3f>SgPc6&^&jJ0r_-k^ z`=LrNJW9wiyRa4wyA7$#B)=tB-$EG*X+(!oh6Tm=O2q)DZ<4EjPGCIs6M1xt4sUe$n3bYnqTK2o2uh#3fJY?I z9>YTg%R<}!sV5a8#MXq14u*k(?UhY(K|{>gdtdI99J! ^o5&kB7Uy;=cPWnyQ&| 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 AXaE2J diff --git a/wp-content/plugins/two-factor/assets/screenshot-2.png b/wp-content/plugins/two-factor/assets/screenshot-2.png deleted file mode 100644 index 9fb4f742d6520fad292da4e22625bd467e05aee8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150589 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

r`ZejZM>d% zHn}Ww`+RNF?JBJ1$yKxV1#Hc3)YZ4DU_8cj${D74`0o-s!VQ&d=gtg}N)6c@wP;j* z*~Un#^0)hSX*PB2!xfFws0dp2autViLdQ^HKo4=2H#z$Tc;JK-xdgv@-k%U#U6TT< zMNq$GZ?msu>4`8Rm>t^`k(o|?8}}86+Ff)MX<}+>n!D`rA_$w5T`~ZNTj#+5k^kmY zT`W1yqmxY^&|+I}J5krBFWj?Bf?NdS3iQtn(D?+^&dS*SR@f$%Y0cI@llDX9{-L+1 zg94ySA#W018p5=AF?&PL7q9E0v5hvJlWFr6u|j_Q-8l6bV_&WX^@wavNtyQvpX(+~ z;=EiknZB;?o%OL5Rx>~^==qsh;qE#u0ZN{XMvMljYi4D)YjaR}Sn~%B5vVUU9u*YgKR?P`u;CcU@VY<85`uO&Pta-@b#D6-sHs)xtN%Otp|7J{W09M#9~-@hL`-@o0laAi}DL}27z6~Q7P zSwS!SWogThNgq&sX-$~{IPA4Weqj`23{x~Lhtl{k>Kvi@(}@5Lnf>#@lmzmh z$_9cQqtxRB2JB^y(-7SEaIj|C>t#DVQHz1Numd*wmM7L<5r+Z_b(zhJy~1N2yQ6+E zJJ1$3sl_>${@5WpOe_%M4OAB0Ffiijup{TkO@}f_H&0G3iv^YQJ^}|2?Rtf##4(pX zp&;!k*+7jAr{Wa3#dZgPk9#%1mjB^$A8&6>z^Yq>XU@n$*N*ylwDZppxZ*J#T-6%` z+6zI3T@v+u?ops|wLV|{%nzf-@mt{*v73>2ctd`#Lv7_q-{YE!TnGzBF`${wTIR+q z6rNJ|M{{NrR(W0*){hXr9;4LTQdn1S^^7ba3pEaa=W)NtYokBb8pj&WrNRF5vi`B% zn^tXMe#SA@AJyqeA2YAh^FBxF7*nG1--Le5pv{lrcvYZayD)1oH^Sx$2OpgJgRwV1 z?2nYRXZ~&qG2OVfo8Sz78BmS`i9gp;E$n72%r#f|KFGou5Xz4;>X{ARlkSu8iyc1` zwzlVH?wwW{#DUJSW@#1~c!q|2MXUw$qMGCYRnZ-7e0ogWZ*VxC7sdjuu3b&D?$k}V zvVflEW-*mNabjF1vON(p1Tyo{FhsC!R5#;JjVyl*Ffb|RQh98Y@#)9zH!n?GM-+x5ru}u&n zO5fp)=~+8qI3s8Gn-g26`pYJ-$vy@7kb+5xiFCyBVSD`Wu-uK=kJ&|z$QmAK(Hb$1 zlL}#YX;Ka%eTYVKt1D8DwNsj;^08Jc65}|wF5YJ&zbn^{LcHHM>nTBsynp-5?_a&b zfo3XlVL&KnL0#foulizcM`ktK<~Un~ zJgVR)>XtW{o0oI5kcI@JIy{&6A@9eF%E)u3(F8ialzvJ+Hts z)7FqZOiwXEy&pyTa;C4*tK527z z>(Mb@_MXAN^jW$&$f2`%2+}_-j_5a$9r)6$&4=-IDdooT3Hi!#13UC!|OSMmpuk zGnOyDb={h1ct_vS$r;N;9K+VJJ=S(QxQjTq9)t3JZu>yz@H?V`@m_ESdDAR)9m1Hq z1is%4No#~m9o7%8Hi3G1=Pi8V?%UZwbq_B(5616^tTqARSv7|`&bq}!8a4rNEamVW zFqI`f3SF^q!)@;GzSVgj?9q@Q*dMyH&gBuA%DgHosk^S2EJh)XugF@P-s8NnVu`i- zeM{kU2*Z=eh`M&0E-f_x`(|t)ZGl$AT&j$Cj&^mZZbD%E9Yup_ zh(tp>Gll=85F=FM=(@Flh}7w{NO3SSu414H|a0+`)rnu`em=j(ln{>r@<;3OA8~P6DA>d&9zLmbA{tfxKy48#-WN z%C5a>AbJU)8wsCiH(eMQ^wz%8Q5N|e;Dg`Ov5z(~%-Z!{z%=lJ{hat`EZ+ey}8N+^X20iwa>LrDep{J5E$Io9@4xWpA+# z@c7z1na7wNU#YkzL5+^pXRUi9F=c*|-gfWtt|6?Wdx?TPXSro<`swki z2(M2^;DYX<7Te-r4i-XVfSmK`wrT@ieYB?qjj}kZmNngAf`P;^UAmj@V|? zXScaWnI)wzbGE6M3m?{aW&b;c`Xeap7@8RB?+Zj;I5JBk5(^srip7AN58b{MWuLR- z&{06IKbcG^+@2SHO5-=g%lFwaK}-F{HQ(lE)k=vOrw~_(Ew(x%Jx8c{ew^Sx#bvzG z?(ytR4sJCvhxE>lGhd}%N7J0|;fypiSLL;`J?xXFm&qtn@=pgw_QwO>>pF~Z^5br8NyNP>3 z@(F>X=sPGZ4cg5}%^;5_9VC7a+#xYm-ye)exm4SBT)e0J#6L=e2Hn@E(do>_Dj@7xYpX3oJAMbE0n+Fy%QL%HIB{@c&xG5mp zqqZ~3VP%rqE>SFkm9S}~$W9{OeRn>NN`-Ecd4l54DK7~Eedi_wzazRo(tMe@PVn|Y zNl&kf5cyU@R@H2Rs^{*sH$X&hdS%_lX-p*&JtT{j2&++oYcyw!qE0{zN9Urva4VdD zqE4*uXgjBI`nbY-NgA;7?4PpB^A`gQ#L2Cyz-xAwi2zQfFXz;?O_z}aM_A&?^QqbS z>{Z$-QbESkBeka9!&eC#xh^#N+uu!CKS_i-(js&M9~bQ9Beh~YhOx2j%Cfk>8o4u` zcqhqfS5GVMAeDY(%>1sS&1zMW(%@r@mDz;NpU#88i=!$T2C5G%;S}!o!U)Sa0wI=^9R-6DpW<%q;gsJ+XDrl$%QD(C(!DUu> zZVK67zerq`dD_=v-`TDZ4}N|ZShCw}!|9l8(Mb^ve^vQ1!>hqW zUA6vJ#p08HO*|pGf=K`<5({!Q=QV$EzL8^l0Q5B@Szj#w^Ia$o8+cGG0o@Ok@_@CY z8&~`_fwRcS*=r(HC}#1J0ialJVCne6o~3FVIcH;TMy5kYc7ekXn1I!xu9`@A^i77v zqxoTvrc>kcxsU>oLxxsNEJc|7)1cCC6sws`cBx=#maFE4*DOOb@boeT+*(H*`|t89 zk(Fd|&9+L!-yA=X95;Ts#q!P0CdImJ1EwPNoJF{uzFSca0pG2AuRGsxLfXK)Kr9m@ z^(1n{u58j+L63aGYOX^ClOG=!KX#>pN`c0t6pE!t#S!dsgsJ=12-NJT|CDbs>n8IZ zeQI}G;7R6hMRa-qODc{AhJr~9<(3C?P}%X)%8IM&QJ#OO!ct7blW5FFyq6J)%d|VS z9WQUpLx6I^16DJW_2%;|a4~oI0bd%cnRQPgV%P9=N4d8FC^H85BNCyq0w@@T6&JgG z?NuYgBB935DJ?9&h=jjix>qp4tgYj)f;N+!iyu6;w58(tMzfw2h&&(va1Sc0F#&}0BDS3| zGv0I@#N`~N!y@B`R)oWHCb@c(w%?65E{AmD+a;#ixnHHvttNo<%~g&rJ&)9E4GN(? zIFb+e7%tolTZdzh1JzrG=45CRi6*i``H(9b(rQ_aut5vqcWr5E9}%@c|Ivz z{h8?{-f@2-KoZcANx?vu=d1T_v(+@-1_}y-0Cu8ax%$?pbYoovD#xB|ogcL(7W^}R zISGX*=QxPTk>0rl5Km)49>1&+S7(hq9*w^ERIqW$Zk6qR2?REz<~R`A7D;)@sY}3P z30%>juQELQf(56q;kyBm-6Knj<<)`v1Y|CctSwPl{vs^gEjR>d6$T^14ZuLZSkQWX zsF|U+sY<^9gYqO%y`^?edHCsdU0|DuORjtE!xh7Ypx+#&Ux1q+r zlzjG=FjXVS8h$lVM82V>b1;Oa!@T-kzKKHqnv@AIE! z3g%$~!94F-w2osnDL8{lde*S9qHq|PH#AZNVCm!#I#LgT|MvJ<eFR^4Vw=pvo+&kd|bf`dk^1YC8L5 zID1rT1_xuj>F$sFF#M8`S1(xL@<5g^I}SB9F~x^NXK=DPwk_2o%^!N}j64T#P!lY0 z$>kagt?-AbVs{eiohhVR`;crBTXL0lbN)MCIs(T=8ASx-tDH60sm|WYR>?`WuZ8R&>5Rdq1IzFO2dm zw7(dXra}(-AZ>a8HwxJ$&t!5|@%M7?7;t(yp$5Ej1_0!^Lm(FJwXd=RKcvz2C8gDA zI9VbQL*>qnFt%oygoNz#Pl@jeH0&bAvdkvQNl7QqvJ;a8{VGuAShmik+pcm&dxh4z zDRN|NOD5@v3Ijp@XN~WIA9=&X&qt8qR<9$O?Ee~ky?w=8Cd*{7O2a;c%N#Jn8tohl z5jR!|Vxh{cr$-h3_Qyp>n~S}{DwUc)rGn(#k?mqE63;*@;VxcK>Eb@i65Kh( zE{?vJOc6>1Aoja?c2IzHf9dr2x)q-EcWDC@71GQa5kdioZJKg#5xQQI@0?U99w4w< z-Ww<2eA=}M2!xG>^w=Jp4~@(5-q{jnj~>{p#ipt4ErGHffA~LW*;`0J6nkA)ony-V zqGct!2^NQkmg^jN3tsmHd^5^too9y{@Rec&r!Iyw-;XEL8VZB_Lw!VSigj6^vvP>y zB=kus0JW!I_{2n0WOr6rQqWCE>a+yu<@;VGV@(7{k^}y7!&ptNUIY~htJHuIudn&N zE^C0StGQRNXDIrN$c;d^JuCepc$~bOdK9%A@@zah=bqe(ke=%nTijC0MgTCM25v}u zX3E0!BKByBWI2Ig0k?U-53_+h>WbiCp*$>w6Z3IQ#}&N3dtxW*(r8g?7p2QOEW4VZ z{J;RXgzYV3fX-22n9dJDqhdQT3)JF|G$XQ0)s2X&&xMbpyHCK43hr6?w%NrHW!pNC z-gl8%kP=q16+I#M==t*_WD89S<%=>Zqx*g*s4C)GpI54u;t-8zD9*v zxgN{Tzvn3_`)xC-o}XS=q*OV}L6wB5&I4|OQRedrM+Uyi!^clhf@Q%>?ESfriHn_) z!Jdxd@|3~eZ}zRmMb|4O^f&UecN2OKbHIkZfm87=65xctr;GDQJzUc}9GeO;Ss)>>SZnW?#1YYKPP`oZy6;6b`)7PiBkE8jhc34{w$my*b5G2(<0 zmhf$eY>NQoS7?sQ?y$4ePH$R`kJv2gd3}Cdri}F|nHPl~mR z{Tw85!Eg3_3_HX_mNZt|_p3wt&w`^W_~=PCq14`|hK&SJae$W&aX$$m1X?e09J3H86l3#u^hb!&AfQHo^-i+6u!&T+YWK^iw zkrjSy-+0dRF@dJ4E|x9L9yMIf9~ItFWUf?xnsJdP% zg&sY%VRi1948oLZTsIr$*5x9=RgiASHef)Ic#wIzrK6N-`3Uw<37k4=`F+#f-JRT1 zzckS03tJa$RiN?p`?sHIh5ib~o;nJU>9VR!q)ab)x<`D|>rrO{F%5jc%~?whW(Nj= z%(n{5xC%8uqRC5cp)=uwsT<^xCNbYJX?*l)RgLlsr^lDBic9rBM@(t?NP5hMG}OY6 z0TS5Do1InFOYP#re~E0kvd}6KAlDcTyMWFHCDOcvZ;fcP<6kNwd|#=v%DmVf&NK2` zhFjCGS19v4Mn`8>$y5*7ciEG`V!rw$r`9uF`nRRK@#!o9V=tgLN<@8uy^Q(KcWV6# zK3|T9QTwEpE`=H+x)ghUkK;bTy(^mE0~O`i=aWu5zHUByt|9T5UY z$MTTFxe;T_)8QIoi2_pz^l&@&GrsZJyf~qED4Z2Fle?Uq!26X!e>#uX_s}2nd)0Id zyAHQPjhd2AQTbWNbHS+vBL`AqA>EpqxmZYD{REPG39hl<{t6sAa>6&J-zv<4stc!y z&7ysfy*}!Jt8IBWNL@@-zn+q?_jJ9vx2w{mL|JB=5Ux`Z5@S^XtJrzrkgWTpHtnd2DMIr*AU-QG5bdLf=Ks zcyY+JX7qd+7aK)S+9AI zQWHZJv>-X~Q#ad$Utr;JF8mO=mpq~H6f9)xTKV>*O1+x*2@o15bBsQqZ1=8=d$0+a zAucS(>ao-V*|t`XP<(}wmUuWMr%uvnSt2b4C)72wg2FzzZD?tzC8RGG`OMHHJ(s3Q?F!1 z1-;M6g^k*qqW}XAsg)lR#eMU6#Bck29*F`l<9fmOHjL)S4_%utW9ZnBZ7c17QjUX7pzxFa^Ib z5kBVbrlE*F?rrXE@QlcWP*u*1F41?vn3^jbrC+mYNWWOm#?lNQ<-}b>VcsIn``mq- z&H9t^A&(lf;QGFJ4COc|5rvxL1LKe1e_v-)BjIjqwbr4!rj7x*(c;K!6Ux{aAwqvM zv5vvXwLe`8Ibk9ws(3|s3MJ3yI?8OHrebB?l0eGq+dd4kI`%{Tg!Gd}9f!uCvL=yd z5`(>7F_tRu6Y}Otk4<=NNs7_=u6{BkmI30jlhHLlk+Grz3<{(iPx6bJe5-e zLf9d2H}xpw97m0UfdEM2fh1o+AC~SRf*0wlAc^M#;foYPReQ84U#x@~R@XH|n74f(=DksSVj!^V?|5#`q!-<9N-TcHIoe}oBrAy0LVkaNaTg|q1*&S zd@utg1<@A3n&7_MFPIv@6(YHor} z`-gY;UzEFlcy~dNp1u(EUK5{gvj0xm`xkEyLd^SbyuJT7%L9sGnn@kKgcm^ydVP~8UQ_X0oz3yJS-kn{;8}s|#fklf%9pb^3ejK2s$Tmz z<7xwQg-81eC-pPJ>qF(+g}3S2D*1;MieO(jk0VjseP9yYOkv_t6%j}w8SVe4>F1YH zOQ--5kQbR9??-P?SS$ZGMFQC_o+qN~*3=U?o?&BVp#$kThoeR)bU7o2J|BPD-$_-# zxB%F{Omsay*gv_Kk4}4-NU(p{^#>ZYT<^H-Uo4JX>XG-$6(%mmi$T@~pauTL^HXxc z-c#Z&M;Y?>8FfYJE)f%nUcPpaEw8ph`4yugKf;0p628XBb77!SxufwbnZ_-LM>(-j$+?J%)6%IjhAoym3o_KfRLABD6)M7+j zpQ*EuL%3tJ#8B`hncZYzo*YTe15&noj&@m8v!20>a8{LbOmI;>*Z5Q@_Gjxp$YnCG zIHG9xEvkf?pHBAx@ujXw93P>|M5!{^qJPzj>d~Hg%@CpHZ1IA?YMH?0$?M~xY5Zv6 zriWbboEEP|mwMQ4NVsP=UBHVAMx^`kE&0)Riui3V(5A$DIt{rQt;HUJB4xW|=`@e| zSb^V@=L1(P@+NfC9X&3eQ&gLmh5ICWKYYuuj4FIQxPr$U5nAn1u^f~=q})!?Yiu3GAR^$VcLPn49WH$T4Y^B{v`p9OTX6N z!G=LX+O~R-H2M7!`+S<`O+cL*2AwsB2a9YGU8#E4)$$?!xf?qSl?3*fLb1?eBI4HR zUrsEErS4;|1Fo`>3^TpJ?>(p1m2L}Cgwmdi99H+_abB}!lQvg+-X;v`wXJygsO&<) z4QG6*GKD|cE)6VhD<|f)YZN7`(rcM9AQzidi(G>BqU=WMf>z0oJX(@j?xEV>LlhGN z5e5aP_HiXsZ-pDv)?Qc*PAl*&masR=G){DeDr9p@OgU^@Z-v{pW_^MLS)TLae4lc0 zJXan)PMN(=2^L&L zWi@3V3#KYJjoW3M^Ero@S@TwWyTcCic0yeBNYA6UT}vEc|qgC9R@-!g(Uv*acZK;gY@$G`|1$FB;C z1-g@>Zf2i!evj|@m#re0xoLRZ6WV#Hk`>uTPrFTN8$S&GyIV)Bn1k)CX88W`(9<4S zRlSb)-XLm>L&^oKL^I&PW@tG4kgLvbes0+fjo4m4zhJF<47&SUc5dgE5xYc5w(M-2 zN&}Y<9I}r=Y&xivBof-#SN(`p606SO5~4P?f6ofLkZH;1HKlTA{=Cj5Wlbp^xB7Ry z^4porv!1EnfTs@Kjab=o7OlG1`$h;QSH~grE#J=rx!!up^ATUF;_c^3<`Z?KJUWG# z-v_G%0e7B7w;rlyIG&^bGiD|kR)kCiEl*#SJ*~|cm-o0p)Vd+|0e-;*+Dbn%rq!^I zDUOh_!g?ma!uQDreH0E!l`?&|z`Xc^bmeFD?jCVJT}PsSZ8)?NOHcHFjg(iVmuRDS zOckUoAix$A2m%R43R4w%AI!H-JWDJ|vtL(wIZ;drf%KbuZ(7=5lD=CMkXQq6I#|{LsL9KC;D_60ER~60M@dc6my@p#)fLL4K^`l=@Ue z%--lOy1%z?NxhzXTtj&1bdDKER)VZCTc00Q30n^8IV&E*srGGviQ1oTCw^)M>c&X* zK^T{*97GZ^1Snq5f+jzLA=byMN8NNpflae4`k)WXjX#olG_HW;ZDgQRibOnx!w4=V5=uYmC?LLY! z>AWx0JEH{)k7;!Oj1vm*8fL3LIQ;T2sySBn*{6O1kYdq}Xy5O8T}sn@$2u*nqr~wO zy(t2|2vr9hJFNHG+|bq+yXh_)+)c)86t|B^bP!&@oobf7p#m`}h7v_)6s$z% z>5&zE>{G}t{wVgsD|uxGkW?Cfmt0^=h?)A{tm6Q`6@UHo~hP91c(|?JzJ~p21 ziw-t;8c%65Ip~mY%grTnNlh#DXg14(u6*!mq*XP)F_lO&G(E^2-zKvg=*063XUT6; zSGGFQJ8-$wr)LSNNTi#{FBl^YHtMk$eBpMACZAOYoORW9eaw%c2$*4OEOvX`GHO$g zWQdgh=xKBMx1l(aAy3k_zCegt?ygvJRg2kl5kqUhv>> zf(>lFu#>%4cms~P|ww2P1 zvTEgNBhx9vCb}aSsCdF2C@&-rG;eEyH|Eqdt4U0LU}%(Fe+C66+|>;)@hmgWM^%xA zRe7l9>2L0k#7Za?&D(cLY|REL8U$1hy8KfQgv_H9s-Yh8b>==e6;X9q?)b#{^a1tR zxE_ULGcX(QuH8~Md(8IF+o7t8uYbhoYVu^VYWM+p;wB==_#oe`zqWkb9L#^4Z-v5n zWk*{9&s6z@+tV5YeOq-gzo*sNE!&v&wxKTfn^caAA&U~i0;=a4k<%czP8)oddx^gb z0Sgn?w}x&VXuuabN-vaZ#dW{;S{v&}r728>OPaY4UC#BKH>(v|K;-dS~7=6ZEFU4K0G3QwG90lVH|qy9^_+;#b#R^=R}D<7Hj zpO(2hTvw5Ja~&N%Z3Ok{)W0%*w42(!yq}BhGBa})-$GU&InyC=X7=&@E`_(UgkBGu z^iuC`VqUv}Mp*y)mFQG_oC~A(*_wt8h=EG^uOylW^6NjgHzmsdL3wMz|NR4AAN3zo|Mk~@nfk9rzX&KA63zL4*MR@u zm4EHYe+Ka1?H3B6*S$L8`CZ6ib8)lk@XQPM%^oHxk)a!&6aYBg6=|~J$)W}ze-Xpm zJs6E8fg-l$Nw(kZ0&A>i1?FDy$^BIv0LyNQ$bmx$Hg&7s-|<1B&yqsprWdLObBezW0=m3vP%QQrOn&zI>B zCn};|I1f3yj(q8gedo{bf%(#e&tDL=r-Ihqv(O*ku!a34eMl$W>o^g=wLHNRRdV}& zPbS>mC?%zhwnKvdL(NSHKYW#@R~Sk-P%(cJd_lg^F62eENf3C9bPB!NMR9|#iyNxg z-tuWJhS;v08x%ZpE+#CQ+k6V}Aj$1rP+02|&CYM^1>fDbKnLZfWNShTBjOd69d}fw z->ByS^JnR!+aoG#m2kQ*?mR?;PbWD^TEuL|rp_z@z7}n@yU#ftK*5cd=3jSxzoUZP z*H(Vk#c4seI@tel9E32|oKb%rCeX45%5z!0a-0WvI+0yDN0lyc2rU^ zDXt-`36eZ`Q~|{Q+^dpF{<-ER{Af2(&Yfm)bR{hvjYPe>G_4}<3Qg^X!}KBZ@J*)+ zo(8|&<;5_qcH154c5hCU3G3^sxQ0pY#7hPC<@?843ba5!i9}K!k@%{KgVs=-4<2Qy z@OGHKH7Pzkoy)h5J2yL8JdM%N`exNO7IP=EdgNy@Gq1F@iRkR8WiB<_9Zx-^ zPsdh^{slvZ{s@5#T$RO_p^ivmm{g}G?1y2h`V)u3m5Op&!{~dTNCLTo);)O&QG&dK zgF;cl`jQO)ii*ul!`X#^hQf(*uJqD=C=aPvesy&%i*&I)UwZmzf{Qn2!UP>Uw3f`n z*P&h@`l`XO^;yw!yTgw;GsJv-B}!&ys#UuNC(N7F`O@IYnouud?Iagc_3N`iHB!bA z5g+_1OM)}`nc+$?F&RJ`=mb>TJ_=9skmGQDES!|{6tePsvp<5ASV4c)-&V&~Vb`~^ zJJ$LntjjMPrW3U-e9k;PI+~`Doawi6Y1|Q!IiNb_<(UuoQ9kj~U>y zRn{#*2B$lBBv)pyt;2rr2<4tuW-X1aL*5|P1qZiFe!=gVkwALoxOdVHVTK||)03CH zxJB>cH3OWbW6{fY(RB^G!8BZ-TP zHpgI79OvMB3Ww-9GzxHX+T{Mlw}}+uV$&gln8{JJPA}X@IETELmzAe~5#c5{YO;xSfi8BlupuXO?b%P}kSBy}%9Hu|aw|a4W zhKzKeY_O36)39>Pa*2*S7(d3jAb}5vQCO!vVjW?#nRsQ~rbn$z&ij*M9=3HRc(NRW z=3wkgBepNV)vm(G!_+U?5E%{=3R?e9KV3=QAXG&x3Xe-I{NMXX2tb$)JsL->0opB4*137?|Kmu_7=0 zVvgEMny^A(5wj&twp#4?MyDGRgv+L!&}myznT^C4WN>v&R}Y%nto>|_Z!BK38`$YGyVR1`cu9a$E3(%)*a zDY)kLemLnoIA5U{qB$<}@Hjq&c7n40esXd;A0PE`Y$z~;UUzPQk18vgqRaX2F)@>owj zGP3@4S5y0~`PNF{L>X%6Qr|z7KKxx@(%Uz`T6H;1UCMgnYl27RDDsn3idfMQEEp18 zDK*b=BMs$>=sX5!c%%CyAczEDLPfSe7>7a8Zm$tc*1H;>#DN3Q+qeBTZ4I7VrxzM}V+#|7i(%yUBc&xP-Vka{Iy=%FR$8*Rz4zVGBsA=SmNy)yY~myvS_7r`n_Mjeio;|5|9l4IS~Il?tK=A9W2P!;z`}v zVSnwY6Q(pyWGVOpduVQPIiUFv#a|zzBd+^6h9$vdLlpADgWMK9d+>?=J2XIC2ac>d zZ_s+gxKl&oB=@5|GG{FuwUxBXuXZ_O#xH&|med?R-q$_rB2YJbtpD3z{1T!UY41se3KA2kLO! zd5)2+pQp4C=zMXtaZS9POUhWr3F#;b`gR7dma`$M9uOMb=G4(FM- zQV&t(I_j>9A4|#vQc_cR?|1ms0)1KP?Vs1+;zsvDzZ^=FwVmzta-W)BZl+#z#97{^ig^UyLVD z#nFB{oxE%@Yy0!uAp){_6_KSR!;mpI-yIvT{Hj!-lIixG&omD&wz5h|YCg*xe%!>- z!)awDi%WDLB3F-;48!O6IxmQdTXdhc8N%1TGe9d1rVT*H)(=uO$bT4};|k&2!(g_97Yt>nO2lQlSNSP>HXx z$4zjrQb=5+)L8O`d#@XddlH{;Z7vAjq%XACrobR*;%)yzKJAjs%i@a}`;t`Ogm#r! z+^bs2DK3w9Ahw$huPBQR>^@QUOOT*+iDcbzZAHMT+!o#IPan3T>W^pO4)(E}#-&8~G`i%>FK7{O&57f0o_d#{Oa(v%`L1bnu`CIZm3t!X>PFjau5T=LztGRM z1MSkWxq3?CH+Sp^4SNu?Z`L_VIjAfLWolSr^iE;hpl{(v?3L;N+0T(LNj^{Ew7mYR1#oZq#pFBT2 z-sue^)ftKyf%u@c7Qfi1ZoDv$(WO&48Yz*%skqYWD7y&r6)OvHkuny&XmFq8MuJqP zFmoEs8KM;f`Mg}D8m0(ZYfpqkg@1KUbKUWnDxSr~4=1ke2yUqC_9Z`*sixN3SgasK z-rwp)tjsNo*jzJmV!rrR!c!}?3Y^?wR}~Xi)<~qd!!bkL#6fyRpX69DiAEN#dYRtX zBvwmks<7S8oS<3P*h<2_(FrJ8pglvZx7Q16aNx%F=65+-svgg~6;^ugvB3Gw(q{iW zCO;OWEvWaTf45gX9nT3?N~cuZGJhvdPsgKOzkM$%huRe zD7D?~bVwY7Lb@%fox8cB!q)6`3QR>J$p2_-CrX%SVX=1q?e1s`ZqL1~4%@KdQ;^mI(YS z((7=#MXYw)=CbXIOZyQ#S;b@qjuSWFftk1gLrf@OUBH=E^e&V6;K*P`x5pStG=C7PedXLd*PF!uh7{~KFwFM`>Ts%|bT))$w=+T| ztZb}Yhp?0Vyk47~TQM`*&BIjfIO1+&_CnBQC)ws|-vYOfuLFJAos+w6>Y)upe^|hV*kXk z~l@kz(=fLu9i?vqs(zeZeF6tk=lr0HaLSY--fF zFZJk{Q4L-$PeyJ?P^5=2S>X$hl6i(s=wb#|XX=a1oxSvSQaNdnk{K6jbP434AYfvt z9Z@Y;cl(aQcwOz+x$en@!!+ex;F^7@Vd6Swj7zNn8DJ4NGTcPgga zMnv>*GR1uN)f<8`AP{|-&d}gPDapMWZ+ell&@Zw}764*)4ZZW4Xz z@flkTce5*^$nTU(E>yd2J-jCkRNt8rnFJUZ02A@Y$~LvHGfS{_;c@1RGu0V5XmoK3 zs-b9h)`=QlBK7-FvbW!#k8`h}(wDFrT%I^Kr);hR%SK3w(RY6tFkn0)YNCsq32;bw z=lB5D_moHFxHhVjSYtYKZYM^$7rGfZk^GF(Ile3|T$>D0zeD7w@0%pVg))1$bMRAF zV(GGYD2#r567#G6)67)JZevl6=}p)zlF?&I+j)M*ZNhI7CPU0t-zC%f@^^3sR`oaQ zmw2HhdXG0oQvp$4t>Nw+mp7w0LBJdEL>JgWZ9}n?q4bspo4G`a{rHqU{7q{z$hsfkerKdu%e*#5H-ChjKHi0k5fGXO8L0~+%`1%AOvR@t17ZsUk zG7AK44#VkO{TzUX2Eclv$yT(fnY=5N*6vf+nlKc1F0Nl& zoAD;!T>wEmP!mX2s0g{$u*V=LVdnR@FE&UOZ$bj3F|>*~eg}TqiTuPQRoTeFn>RDb zV^&DK4W&6E*JQ;G3gqi7ykC^OkCbuahx!v~6+?N?zi5=>qmKdRcn{7d0YFg$7CXNS zBBEVV7b8coUS2kvuL$8PV<6q_wPMA@iJHOMZ*l-n+j`>$q~sPhH~D;}BrK$JcUdw? z=rTnBzWHLTbzOWCE|t7uk*BeO{Hp~;A5mOj)>C`g%?n5$8MKMpKPh&e8UUe0!RswB zu%c;UOld8A*Wl;I-DBj7l9eWp#|ud_*vIXehufRX+zarbG*XV*whc1biE!q3$8-N; z96+{BQ-%)W9g{>cvx%s-I0n>n&TZ68;MZ;!P{$s~et2SH!tz&sUwy^RP4B~@@HIobtFl_}M^tnV{J5H`oHBXWAY@cveo$Oq&isC#|AHI@J3g--XB|!P z9cBDhp}e~_xS>=HM2Ht!s4D>wk(*{f6=wByEsWTLCzW%(RwLs|fJ4kiGaFHzf*$OG z?6`s;*N@4(Q!*QRe%pZqQ;MN$72K9|_gkaUl_j3#`KwITa9x6p8@Gy~0JW(6&nh3A zhKYU98I7Z}OC#m~xu=#1Ke)eEL#@xM) zUfUAr*5p4}Spw5AYi%Ud5q!+7GG$G$8FUU(t6emUoC@}6(o~j)h2oc+f`#5ktHYOf zQAoIU9egsCY)cD8blU!i@-?G@f65PXDv1f}R@9;rQ>L_FM%~wTz3QBdMI9Ttc`(}T z=&I%>8Tlm4_mF>EJ%uXXmb}kRqL*#D%`B0Fv|cF9y%YF{b2GKc?jEGifvF(4>L8bC z$N`PEdwV_|mNU*ppyT1{HotQoQTDjw{lp~F9-aZL+}0Dq5LB72zcOZN*w%b{*fvEP zla>hoM^j5bD)FSm>9WlSL&Q?3Vqt(D?+F9(pXp9=XUY;QoFO51lOzJ9%9I zjzTo_V-*2 zwAO;E^k+Qc?CKiC0$_Q?m0(J@x(oaGP>^Rnsd@@z}EWMRF99)Ei zrV2fZ?kU+@MC;e8QFbBIPR4K2w8^cQXb?7z9j{uJbM2@+6>WrY%>NkZDK^CXLE8M) zYgK;Cv{**CEQ!GDkQ@xSdAgV@xmU+_sfi$dN;YS(E-hqB>U(<+=N7$QwXZ4T-epu5 z%NL;?9}E~@s+2(J9VHx1`%+sfVc5V1otj;}=e%?THdLq5`Xf^mk~Ac6s9dQ;M`B4W z{v|fV8VFT5J`AUYx{B3;`G|I}G9)AnE2Zew;$}fTqkq%=2$q(w9v|xVys^N^a63yJ z8Uz0Mn;500Haa}aq^thj-r6i~RIou<{Huzs_2rCZIenAm;qXJ|*w}}3o<=t(JFC5; zS}pmqu0$Kp8}NES(CiW89T;?p`n(#QAIf=1f%fwD!TbF zy7e;f8hJStd0T#jToW>~l^vf*Po)<=Gv(}#baomBTq=g^YITEwK?VF2ajkZ`;*WL? zIY9{I>Yee#%CWg@379$ND0wK0pqTDLR`|sr7{pGU@Meaie_+09_F4vo5@bc z?dtH>X6Xpf?lioC26USa*qcQrBkj1LFN#XC=Hv1NY!wL#)TLncrag^*UAgCn!m-~r z4@WDN#V_9@3tor_9UidH5G|vsfchcJi6iS~ReAMHzVQ)7&pN}O1>2DjdV{O61 zdl$<=-i>aLqdCdHjvw|^ya8P6?BhejJzhUT{&eQtAaH#s*A-x6bKBb6o7@fJNNcP7 zAicxYC!g~a&RYBS9|WrJ8Yfai?A{U)ur3Zm*87dEUsH_!OkLbk03^fNXZITg3B&qq zW8|Zy%+nqX7cTdhV){~O!|u3qJiFuOx6lEFT+swx-NSXWfZxfnD!7V_IU;PEl?+jH z-&ApP#x1!BG=`W6o)^d!qj*-Z`RVc8$U+YY<@X}Ld|mZl#UmyKE0X+n>? zxQ-3{RBuif>(L|Cs44;L{9f+Vix~8&;(Ka|hSj&$)gk5Z@o@e*F{o&sq`s;Timf45 z7{C&WWVyW+*Y2427(-68w+f#9S(^L=~;YzM?143~dWsJ=~-tF@A)Ds)1wswC=yr!+BN zq!XKHgJmqmqagn*p{(^rtcGQ5n6t&=Bo+J7BRzilSgiupF=N71+V$&20hed^^{KR# zOM?vz4{%wk2n`8szt+ssYZVy+5$1FawlS*&LQPe zGR3pVo6V{oPP?c0Ss`h$^9Qj7^d7( z4XaP>Tr7LG6@EC=c;u)`v-kLP!|+c@tnc5$ksjH213N<22*zoZ2(jpvaU&+2a&mIS zRmygw_Rm2x9O+G%sS#tA3Vl7O^$Cn0#&4SDqRI*b#&2fEPh&1CgZ)N=eO@7!)o{e+ z6-`&LS?qBg(q?hBKM#DXqF9>+{gURRs2vfk;YJ9y1jwOZSNp3~$0^()^ba-HM~FXp zNmaDt+Fu*Np5nLYV*ikf*QKKWAMblru{Nik`hx_X1Vc&8SZ&57={5J;I^$8((e`}P zRj;8EdH}>_nm_sIlG&n{L8(-}@ILr-=-U1J(WNwGq=bn&6FI2@rpXCVpKD}lv$qIq z+^QRGb&&!|^nF)uR@un&7kaBw6KkzMPxiQ25&_mp}At!C$Mi!7LdN*7`8 z>lyyC`}?O%vkSz>3F8SG?N-SxcWI@lCT}E;CWCyn-o8+Kq>l;y9V90VLSKXsabR8; zGY|sE%lF~`Jur|qgy17$ouvsOvKYy6LUNEE3id!)xjqbIQ!i0>+-B|_<;fuOud5T= zR|#T}?0-&U_gU-dzP#k}3~x`{F>Di7@rBgDQ^(rYHu)sH&{Xr*@TJP#N8I+zS)|Wl XWA+{QB9jm<7eH20QKC%jtMC5>{!;MX diff --git a/wp-content/plugins/two-factor/assets/screenshot-3.png b/wp-content/plugins/two-factor/assets/screenshot-3.png deleted file mode 100644 index b866bbb0c0bf3dfa76566cf261adda1fa5cc58e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42368 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 diff --git a/wp-content/plugins/two-factor/class-two-factor-compat.php b/wp-content/plugins/two-factor/class-two-factor-compat.php index d7b4f46a..94e47f4d 100644 --- a/wp-content/plugins/two-factor/class-two-factor-compat.php +++ b/wp-content/plugins/two-factor/class-two-factor-compat.php @@ -11,11 +11,15 @@ * Should be used with care because ideally we wouldn't need * any integration specific code for this plugin. Everything should * be handled through clever use of hooks and best practices. + * + * @since 0.5.0 */ class Two_Factor_Compat { /** * Initialize all the custom hooks as necessary. * + * @since 0.5.0 + * * @return void */ public function init() { @@ -30,6 +34,8 @@ class Two_Factor_Compat { /** * Jetpack single sign-on wants long-lived sessions for users. * + * @since 0.5.0 + * * @param boolean $rememberme Current state of the "remember me" toggle. * * @return boolean @@ -47,6 +53,8 @@ class Two_Factor_Compat { /** * Helper to detect the presence of the active SSO module. * + * @since 0.5.0 + * * @return boolean */ public function jetpack_is_sso_active() { diff --git a/wp-content/plugins/two-factor/class-two-factor-core.php b/wp-content/plugins/two-factor/class-two-factor-core.php index 5eaa765a..d98cbfe6 100644 --- a/wp-content/plugins/two-factor/class-two-factor-core.php +++ b/wp-content/plugins/two-factor/class-two-factor-core.php @@ -1,6 +1,6 @@ init(); } + /** + * Register login page scripts. + * + * @since 0.10.0 + * + * @codeCoverageIgnore + */ + public static function login_enqueue_scripts() { + $environment_prefix = file_exists( TWO_FACTOR_DIR . '/dist' ) ? '/dist' : ''; + + wp_register_script( + 'two-factor-login', + plugins_url( $environment_prefix . '/providers/js/two-factor-login.js', __FILE__ ), + array(), + TWO_FACTOR_VERSION, + true + ); + + wp_register_script( + 'two-factor-login-authcode', + plugins_url( $environment_prefix . '/providers/js/two-factor-login-authcode.js', __FILE__ ), + array(), + TWO_FACTOR_VERSION, + true + ); + } + /** * Delete all plugin data on uninstall. * + * @since 0.10.0 + * * @return void */ public static function uninstall() { @@ -167,8 +209,7 @@ class Two_Factor_Core { $user_meta_keys, call_user_func( array( $provider_class, 'uninstall_user_meta_keys' ) ) ); - } catch ( Exception $e ) { - // Do nothing. + } catch ( Exception $e ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch -- Intentionally empty, provider may not implement this method. } } @@ -179,8 +220,7 @@ class Two_Factor_Core { $option_keys, call_user_func( array( $provider_class, 'uninstall_options' ) ) ); - } catch ( Exception $e ) { - // Do nothing. + } catch ( Exception $e ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch -- Intentionally empty, provider may not implement this method. } } } @@ -200,13 +240,14 @@ class Two_Factor_Core { /** * Get the registered providers of which some might not be enabled. * + * @since 0.11.0 + * * @return array List of provider keys and paths to class files. */ private static function get_default_providers() { return array( 'Two_Factor_Email' => TWO_FACTOR_DIR . 'providers/class-two-factor-email.php', 'Two_Factor_Totp' => TWO_FACTOR_DIR . 'providers/class-two-factor-totp.php', - 'Two_Factor_FIDO_U2F' => TWO_FACTOR_DIR . 'providers/class-two-factor-fido-u2f.php', 'Two_Factor_Backup_Codes' => TWO_FACTOR_DIR . 'providers/class-two-factor-backup-codes.php', 'Two_Factor_Dummy' => TWO_FACTOR_DIR . 'providers/class-two-factor-dummy.php', ); @@ -215,6 +256,8 @@ class Two_Factor_Core { /** * Get the classnames for specific providers. * + * @since 0.10.0 + * * @param array $providers List of paths to provider class files indexed by class names. * * @return array List of provider keys and classnames. @@ -230,6 +273,8 @@ class Two_Factor_Core { /** * Filters the classname for a provider. The dynamic portion of the filter is the defined providers key. * + * @since 0.9.0 + * * @param string $class The PHP Classname of the provider. * @param string $path The provided provider path to be included. */ @@ -255,9 +300,9 @@ class Two_Factor_Core { * @see Two_Factor_Core::get_enabled_providers_for_user() * @see Two_Factor_Core::get_supported_providers_for_user() * - * @since 0.1-dev + * @since 0.2.0 * - * @return array + * @return Two_Factor_Provider[] */ public static function get_providers() { $providers = self::get_default_providers(); @@ -268,23 +313,13 @@ class Two_Factor_Core { * This lets third-parties either remove providers (such as Email), or * add their own providers (such as text message or Clef). * + * @since 0.1-dev + * * @param array $providers A key-value array where the key is the class name, and * the value is the path to the file containing the class. */ $providers = apply_filters( 'two_factor_providers', $providers ); - // FIDO U2F is PHP 5.3+ only. - if ( isset( $providers['Two_Factor_FIDO_U2F'] ) && version_compare( PHP_VERSION, '5.3.0', '<' ) ) { - unset( $providers['Two_Factor_FIDO_U2F'] ); - trigger_error( // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error - sprintf( - /* translators: %s: version number */ - __( 'FIDO U2F is not available because you are using PHP %s. (Requires 5.3 or greater)', 'two-factor' ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped - PHP_VERSION - ) - ); - } - // Map provider keys to classes so that we can instantiate them. $providers = self::get_providers_classes( $providers ); @@ -303,11 +338,14 @@ class Two_Factor_Core { /** * Get providers available for user which may not be enabled or configured. * + * @since 0.13.0 + * * @see Two_Factor_Core::get_enabled_providers_for_user() * @see Two_Factor_Core::get_available_providers_for_user() * * @param WP_User|int|null $user User ID. - * @return array List of provider instances indexed by provider key. + * + * @return Two_Factor_Provider[] List of provider instances indexed by provider key. */ public static function get_supported_providers_for_user( $user = null ) { $user = self::fetch_user( $user ); @@ -325,6 +363,8 @@ class Two_Factor_Core { /** * Enable the dummy method only during debugging. * + * @since 0.5.2 + * * @param array $methods List of enabled methods. * * @return array @@ -337,9 +377,74 @@ class Two_Factor_Core { return $methods; } + /** + * Add Plugin and User Settings link to the plugin action links on the Plugins screen. + * + * @since 0.14.3 + * + * @param string[] $links An array of plugin action links. + * @return string[] Modified array with the User Settings link added. + */ + public static function add_settings_action_link( $links ) { + $plugin_settings_url = admin_url( 'options-general.php?page=two-factor-settings' ); + $plugin_settings_link = sprintf( + '%s', + esc_url( $plugin_settings_url ), + esc_html__( 'Plugin Settings', 'two-factor' ) + ); + + $user_settings_url = admin_url( 'profile.php#application-passwords-section' ); + $user_settings_link = sprintf( + '%s', + esc_url( $user_settings_url ), + esc_html__( 'User Settings', 'two-factor' ) + ); + + // Show plugin settings first, then user settings. + array_unshift( $links, $user_settings_link ); + + if ( current_user_can( 'manage_options' ) ) { + array_unshift( $links, $plugin_settings_link ); + } + + return $links; + } + + /** + * Register an error associated with the current request. + * + * @param WP_Error $error Error instance. + + * @return void + */ + private static function add_error( WP_Error $error ) { + self::$profile_errors[ $error->get_error_code() ] = $error; + } + + /** + * Attach Two-Factor profile errors to WordPress core profile update errors. + * + * @since NEXT + * + * @param WP_Error $errors WP_Error object passed by core. + * + * @return void + */ + public static function action_user_profile_update_errors( WP_Error $errors ) { + foreach ( self::$profile_errors as $profile_error ) { + foreach ( $profile_error->get_error_codes() as $code ) { + foreach ( $profile_error->get_error_messages( $code ) as $message ) { + $errors->add( $code, $message ); + } + } + } + } + /** * Check if the debug mode is enabled. * + * @since 0.5.2 + * * @return boolean */ protected static function is_wp_debug() { @@ -352,6 +457,8 @@ class Two_Factor_Core { * Fetch this from the plugin core after we introduce proper dependency injection * and get away from the singletons at the provider level (should be handled by core). * + * @since 0.5.2 + * * @param integer $user_id User ID. * * @return string @@ -372,6 +479,8 @@ class Two_Factor_Core { /** * Get the URL for resetting the secret token. * + * @since 0.5.2 + * * @param integer $user_id User ID. * @param string $action Custom two factor action key. * @@ -393,6 +502,8 @@ class Two_Factor_Core { /** * Get the two-factor revalidate URL. * + * @since 0.9.0 + * * @param bool $interim If the URL should load the interim login iframe modal. * @return string */ @@ -410,6 +521,8 @@ class Two_Factor_Core { /** * Check if a user action is valid. * + * @since 0.5.2 + * * @param integer $user_id User ID. * @param string $action User action ID. * @@ -431,6 +544,8 @@ class Two_Factor_Core { /** * Get the ID of the user being edited. * + * @since 0.5.2 + * * @return integer */ public static function current_user_being_edited() { @@ -450,6 +565,8 @@ class Two_Factor_Core { * Trigger our custom update action if a valid * action request is detected and passes the nonce check. * + * @since 0.5.2 + * * @return void */ public static function trigger_user_settings_action() { @@ -472,6 +589,8 @@ class Two_Factor_Core { * Keep track of all the authentication cookies that need to be * invalidated before the second factor authentication. * + * @since 0.5.1 + * * @param string $cookie Cookie string. * * @return void @@ -511,11 +630,14 @@ class Two_Factor_Core { * Get two-factor providers that are enabled for the specified (or current) user * but might not be configured, yet. * + * @since 0.2.0 + * * @see Two_Factor_Core::get_supported_providers_for_user() * @see Two_Factor_Core::get_available_providers_for_user() * * @param int|WP_User $user Optional. User ID, or WP_User object of the the user. Defaults to current user. - * @return array + * + * @return string[] List of keys of enabled providers for the user. */ public static function get_enabled_providers_for_user( $user = null ) { $user = self::fetch_user( $user ); @@ -533,6 +655,8 @@ class Two_Factor_Core { /** * Filter the enabled two-factor authentication providers for this user. * + * @since 0.5.2 + * * @param array $enabled_providers The enabled providers. * @param int $user_id The user ID. */ @@ -543,11 +667,13 @@ class Two_Factor_Core { * Get all two-factor providers that are both enabled and configured * for the specified (or current) user. * + * @since 0.2.0 + * * @see Two_Factor_Core::get_supported_providers_for_user() * @see Two_Factor_Core::get_enabled_providers_for_user() * * @param int|WP_User $user Optional. User ID, or WP_User object of the the user. Defaults to current user. - * @return array List of provider instances. + * @return Two_Factor_Provider[]|WP_Error List of provider instances, or a WP_Error if all configured providers are unavailable. */ public static function get_available_providers_for_user( $user = null ) { $user = self::fetch_user( $user ); @@ -558,6 +684,31 @@ class Two_Factor_Core { $providers = self::get_supported_providers_for_user( $user ); // Returns full objects. $enabled_providers = self::get_enabled_providers_for_user( $user ); // Returns just the keys. $configured_providers = array(); + $user_providers_raw = get_user_meta( $user->ID, self::ENABLED_PROVIDERS_USER_META_KEY, true ); + + /** + * If the user had enabled providers, but none of them exist currently, + * if emailed codes is available force it to be on, so that deprecated + * or removed providers don't result in the two-factor requirement being + * removed and 'failing open'. + * + * Possible enhancement: add a filter to change the fallback method? + */ + if ( empty( $enabled_providers ) && $user_providers_raw ) { + if ( isset( $providers['Two_Factor_Email'] ) ) { + // Force Emailed codes to 'on'. + $enabled_providers[] = 'Two_Factor_Email'; + } else { + return new WP_Error( + 'no_available_2fa_methods', + __( 'Error: You have Two Factor method(s) enabled, but the provider(s) no longer exist. Please contact a site administrator for assistance.', 'two-factor' ), + array( + 'user_providers_raw' => $user_providers_raw, + 'available_providers' => array_keys( $providers ), + ) + ); + } + } foreach ( $providers as $provider_key => $provider ) { if ( in_array( $provider_key, $enabled_providers, true ) && $provider->is_available_for_user( $user ) ) { @@ -571,6 +722,8 @@ class Two_Factor_Core { /** * Fetch the provider for the request based on the user preferences. * + * @since 0.9.0 + * * @param int|WP_User $user Optional. User ID, or WP_User object of the the user. Defaults to current user. * @param null|string|object $preferred_provider Optional. The name of the provider, the provider, or empty. * @return null|object The provider @@ -596,7 +749,7 @@ class Two_Factor_Core { if ( is_string( $preferred_provider ) ) { $providers = self::get_available_providers_for_user( $user ); - if ( isset( $providers[ $preferred_provider ] ) ) { + if ( ! is_wp_error( $providers ) && isset( $providers[ $preferred_provider ] ) ) { return $providers[ $preferred_provider ]; } } @@ -608,6 +761,8 @@ class Two_Factor_Core { * Get the name of the primary provider selected by the user * and enabled for the user. * + * @since 0.12.0 + * * @param WP_User|int $user User ID or instance. * * @return string|null @@ -626,7 +781,7 @@ class Two_Factor_Core { /** * Gets the Two-Factor Auth provider for the specified|current user. * - * @since 0.1-dev + * @since 0.2.0 * * @param int|WP_User $user Optional. User ID, or WP_User object of the the user. Defaults to current user. * @return object|null @@ -643,13 +798,16 @@ class Two_Factor_Core { // If there's only one available provider, force that to be the primary. if ( empty( $available_providers ) ) { return null; + } elseif ( is_wp_error( $available_providers ) ) { + // If it returned an error, the configured methods don't exist, and it couldn't swap in a replacement. + wp_die( $available_providers ); } elseif ( 1 === count( $available_providers ) ) { $provider = key( $available_providers ); } else { $provider = self::get_primary_provider_key_selected_for_user( $user ); // If the provider specified isn't enabled, just grab the first one that is. - if ( ! isset( $available_providers[ $provider ] ) ) { + if ( empty( $provider ) || ! isset( $available_providers[ $provider ] ) ) { $provider = key( $available_providers ); } } @@ -657,6 +815,8 @@ class Two_Factor_Core { /** * Filter the two-factor authentication provider used for this user. * + * @since 0.2.0 + * * @param string $provider The provider currently being used. * @param int $user_id The user ID. */ @@ -672,7 +832,7 @@ class Two_Factor_Core { /** * Quick boolean check for whether a given user is using two-step. * - * @since 0.1-dev + * @since 0.2.0 * * @param int|WP_User $user Optional. User ID, or WP_User object of the the user. Defaults to current user. * @return bool @@ -685,7 +845,9 @@ class Two_Factor_Core { /** * Handle the browser-based login. * - * @since 0.1-dev + * @since 0.2.0 + * + * @see https://developer.wordpress.org/reference/hooks/wp_login/ * * @param string $user_login Username. * @param WP_User $user WP_User object of the logged-in user. @@ -712,6 +874,8 @@ class Two_Factor_Core { * having access to the authentication cookies which are just being set * on the first password-based authentication request. * + * @since 0.5.1 + * * @param \WP_User $user User object. * * @return void @@ -725,63 +889,70 @@ class Two_Factor_Core { } /** - * Prevent login through XML-RPC and REST API for users with at least one - * two-factor method enabled. + * Disable WP core login cookies for users that require second factor. Disable + * authenticated API requests unless explicitly enabled for the user (disabled by default). * - * @param WP_User|WP_Error $user Valid WP_User only if the previous filters + * @since 0.4.0 + * + * @param WP_User|WP_Error $user Valid WP_User only if the previous filters * have verified and confirmed the * authentication credentials. * * @return WP_User|WP_Error */ public static function filter_authenticate( $user ) { - if ( $user instanceof WP_User && self::is_api_request() && self::is_user_using_two_factor( $user->ID ) && ! self::is_user_api_login_enabled( $user->ID ) ) { - return new WP_Error( - 'invalid_application_credentials', - __( 'Error: API login for user disabled.', 'two-factor' ) - ); - } - - return $user; - } - - /** - * Prevent login cookies being set on login for Two Factor users. - * - * This makes it so that Core never sends the auth cookies. `login_form_validate_2fa()` will send them manually once the 2nd factor has been verified. - * - * @param WP_User|WP_Error $user Valid WP_User only if the previous filters - * have verified and confirmed the - * authentication credentials. - * - * @return WP_User|WP_Error - */ - public static function filter_authenticate_block_cookies( $user ) { - /* - * NOTE: The `login_init` action is checked for here to ensure we're within the regular login flow, - * rather than through an unsupported 3rd-party login process which this plugin doesn't support. - */ - if ( $user instanceof WP_User && self::is_user_using_two_factor( $user->ID ) && did_action( 'login_init' ) ) { + if ( $user instanceof WP_User && self::is_user_using_two_factor( $user->ID ) ) { + /** + * Prevent WP core from sending login cookies during `wp_set_auth_cookie()` and + * let two-factor do it after validating the second factor. + */ add_filter( 'send_auth_cookies', '__return_false', PHP_INT_MAX ); + + // Disable authentication requests for API requests for users with two-factor enabled. + if ( self::is_api_request() && ! self::is_user_api_login_enabled( $user->ID ) ) { + return new WP_Error( + 'invalid_application_credentials', + __( 'Error: API login for user disabled.', 'two-factor' ) + ); + } } return $user; } /** - * If the current user can login via API requests such as XML-RPC and REST. + * If the user can login via API requests such as XML-RPC and REST. + * + * Only logins with application passwords are permitted by default. + * + * @since 0.4.0 * * @param integer $user_id User ID. * * @return boolean */ public static function is_user_api_login_enabled( $user_id ) { - return (bool) apply_filters( 'two_factor_user_api_login_enable', false, $user_id ); + /** + * Allow or prevent logins without two-factor during + * API requests such as XML-RPC and REST. + * + * @since 0.4.0 + * + * @param boolean $enabled Whether the user can login via API requests. + * @param integer $user_id User ID. + */ + return (bool) apply_filters( + 'two_factor_user_api_login_enable', + (bool) did_action( 'application_password_did_authenticate' ), + $user_id + ); } /** * Is the current request an XML-RPC or REST request. * + * @since 0.4.0 + * * @return boolean */ public static function is_api_request() { @@ -799,7 +970,7 @@ class Two_Factor_Core { /** * Display the login form. * - * @since 0.1-dev + * @since 0.2.0 * * @param WP_User $user WP_User object of the logged-in user. */ @@ -821,6 +992,8 @@ class Two_Factor_Core { /** * Displays a message informing the user that their account has had failed login attempts. * + * @since 0.8.0 + * * @param WP_User $user WP_User object of the logged-in user. */ public static function maybe_show_last_login_failure_notice( $user ) { @@ -830,14 +1003,17 @@ class Two_Factor_Core { if ( $last_failed_two_factor_login ) { echo '

'; printf( - _n( - 'WARNING: Your account has attempted to login without providing a valid two factor token. The last failed login occurred %2$s ago. If this wasn\'t you, you should reset your password.', - 'WARNING: Your account has attempted to login %1$s times without providing a valid two factor token. The last failed login occurred %2$s ago. If this wasn\'t you, you should reset your password.', - $failed_login_count, - 'two-factor' + esc_html( + /* translators: 1: number of failed login attempts, 2: time since last failed attempt */ + _n( + 'WARNING: Your account has attempted to login %1$s time without providing a valid two factor token. The last failed login occurred %2$s ago. If this wasn\'t you, you should reset your password.', + 'WARNING: Your account has attempted to login %1$s times without providing a valid two factor token. The last failed login occurred %2$s ago. If this wasn\'t you, you should reset your password.', + $failed_login_count, + 'two-factor' + ) ), - number_format_i18n( $failed_login_count ), - human_time_diff( $last_failed_two_factor_login, time() ) + esc_html( number_format_i18n( $failed_login_count ) ), + esc_html( human_time_diff( $last_failed_two_factor_login, time() ) ) ); echo '
'; } @@ -849,7 +1025,9 @@ class Two_Factor_Core { * They were also sent an email notification in `send_password_reset_email()`, but email sent from a typical * web server is not reliable enough to trust completely. * - * @param WP_Error $errors + * @since 0.8.0 + * + * @param WP_Error $errors Error object. */ public static function maybe_show_reset_password_notice( $errors ) { if ( 'incorrect_password' !== $errors->get_error_code() ) { @@ -880,6 +1058,7 @@ class Two_Factor_Core { $errors->add( 'two_factor_password_reset', sprintf( + /* translators: %s: URL to create a new password. */ __( 'Your password was reset because of too many failed Two Factor attempts. You will need to create a new password to regain access. Please check your email for more information.', 'two-factor' ), esc_url( add_query_arg( 'action', 'lostpassword', wp_login_url() ) ) ) @@ -891,7 +1070,9 @@ class Two_Factor_Core { /** * Clear the password reset notice after the user resets their password. * - * @param WP_User $user + * @since 0.8.0 + * + * @param WP_User $user User object. */ public static function clear_password_reset_notice( $user ) { delete_user_meta( $user->ID, self::USER_PASSWORD_WAS_RESET_KEY ); @@ -900,18 +1081,19 @@ class Two_Factor_Core { /** * Generates the html form for the second step of the authentication process. * - * @since 0.1-dev + * @since 0.9.0 * * @param WP_User $user WP_User object of the logged-in user. * @param string $login_nonce A string nonce stored in usermeta. * @param string $redirect_to The URL to which the user would like to be redirected. * @param string $error_msg Optional. Login error message. * @param string|object $provider An override to the provider. + * @param string $action Action to perform. */ public static function login_html( $user, $login_nonce, $redirect_to, $error_msg = '', $provider = null, $action = 'validate_2fa' ) { $provider = self::get_provider_for_user( $user, $provider ); if ( ! $provider ) { - wp_die( __( 'Cheatin’ uh?', 'two-factor' ) ); + wp_die( esc_html__( 'Two-factor provider not available for this user.', 'two-factor' ) ); } $provider_key = $provider->get_key(); @@ -921,6 +1103,11 @@ class Two_Factor_Core { $rememberme = intval( self::rememberme() ); + if ( is_wp_error( $available_providers ) ) { + // If it returned an error, the configured methods don't exist, and it couldn't swap in a replacement. + wp_die( $available_providers ); + } + if ( ! function_exists( 'login_header' ) ) { // We really should migrate login_header() out of `wp-login.php` so it can be called from an includes file. require_once TWO_FACTOR_DIR . 'includes/function.login-header.php'; @@ -929,6 +1116,8 @@ class Two_Factor_Core { // Disable the language switcher. add_filter( 'login_display_language_dropdown', '__return_false' ); + wp_enqueue_style( 'user-edit-2fa', plugins_url( 'user-edit.css', __FILE__ ), array(), TWO_FACTOR_VERSION ); + login_header(); if ( ! empty( $error_msg ) ) { @@ -952,7 +1141,10 @@ class Two_Factor_Core { authentication_page( $user ); ?> - $action, 'wp-auth-id' => $user->ID, @@ -967,22 +1159,40 @@ class Two_Factor_Core { if ( $interim_login ) { $backup_link_args['interim-login'] = 1; } - ?> + + foreach ( $backup_providers as $backup_provider_key => $backup_provider ) { + $backup_link_args['provider'] = $backup_provider_key; + $links[] = array( + 'url' => self::login_url( $backup_link_args ), + 'label' => $backup_provider->get_alternative_provider_label(), + ); + } + } + + /** + * Filters the links displayed on the two-factor login form. + * + * Plugins can use this filter to modify or add links to the two-factor authentication + * login form, allowing users to select backup methods for authentication or provide documentation links. + * + * @since 0.16.0 + * + * @param array $links An array of links displayed on the two-factor login form, each with `url` and `label` keys. + */ + $links = apply_filters( 'two_factor_login_backup_links', $links ); + ?> + +

@@ -1014,41 +1224,7 @@ class Two_Factor_Core { opacity: 0.5; } - + ID, $nonce ) ) { wp_safe_redirect( home_url() ); - return; + exit; } $provider = self::get_provider_for_user( $user, $provider ); if ( ! $provider ) { - wp_die( __( 'Cheatin’ uh?', 'two-factor' ) ); + wp_die( esc_html__( 'Two-factor provider not available for this user.', 'two-factor' ) ); } // Run the provider processing. @@ -1405,7 +1605,7 @@ class Two_Factor_Core { if ( true !== $result ) { $error = ''; if ( is_wp_error( $result ) ) { - do_action( 'wp_login_failed', $user->user_login, $result ); + do_action( 'wp_login_failed', $user->user_login, $result ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Core WordPress action. $error = $result->get_error_message(); } @@ -1428,7 +1628,7 @@ class Two_Factor_Core { $rememberme = true; } - $session_information_callback = static function( $session, $user_id ) use( $provider, $user ) { + $session_information_callback = static function ( $session, $user_id ) use ( $provider, $user ) { if ( $user->ID === $user_id ) { $session['two-factor-login'] = time(); $session['two-factor-provider'] = $provider->get_key(); @@ -1442,12 +1642,20 @@ class Two_Factor_Core { /* * NOTE: This filter removal is not normally required, this is included for protection against * a plugin/two factor provider which runs the `authenticate` filter during it's validation. - * Such a plugin would cause self::filter_authenticate_block_cookies() to run and add this filter. + * Such a plugin would cause self::filter_authenticate() to run and add this filter. */ remove_filter( 'send_auth_cookies', '__return_false', PHP_INT_MAX ); wp_set_auth_cookie( $user->ID, $rememberme ); + /** + * Fires after a user has been authenticated via two-factor. + * + * @since 0.5.2 + * + * @param WP_User $user The authenticated user. + * @param Two_Factor_Provider $provider The two-factor provider used for authentication. + */ do_action( 'two_factor_user_authenticated', $user, $provider ); remove_filter( 'attach_session_information', $session_information_callback ); @@ -1460,6 +1668,10 @@ class Two_Factor_Core { $customize_login = isset( $_REQUEST['customize-login'] ); if ( $customize_login ) { wp_enqueue_script( 'customize-base' ); + wp_add_inline_script( + 'customize-base', + 'setTimeout( function(){ new wp.customize.Messenger({ url: ' . wp_json_encode( esc_url( wp_customize_url() ) ) . ', channel: \'login\' }).send(\'login\') }, 1000 );' + ); } $message = '

' . __( 'You have logged in successfully.', 'two-factor' ) . '

'; $interim_login = 'success'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited @@ -1468,18 +1680,16 @@ class Two_Factor_Core { - - - ID ) ) { wp_safe_redirect( home_url() ); - return; + exit; } $provider = self::get_provider_for_user( $user, $provider ); if ( ! $provider ) { - wp_die( __( 'Cheatin’ uh?', 'two-factor' ) ); + wp_die( esc_html__( 'Two-factor provider not available for this user.', 'two-factor' ) ); } // Run the provider processing. @@ -1536,7 +1746,7 @@ class Two_Factor_Core { if ( true !== $result ) { $error = ''; if ( is_wp_error( $result ) ) { - do_action( 'wp_login_failed', $user->user_login, $result ); + do_action( 'wp_login_failed', $user->user_login, $result ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Core WordPress action. $error = $result->get_error_message(); } @@ -1555,6 +1765,14 @@ class Two_Factor_Core { ) ); + /** + * Fires after a user has been revalidated via two-factor. + * + * @since 0.8.0 + * + * @param WP_User $user The revalidated user. + * @param Two_Factor_Provider $provider The two-factor provider used for revalidation. + */ do_action( 'two_factor_user_revalidated', $user, $provider ); // Must be global because that's how login_header() uses it. @@ -1569,21 +1787,23 @@ class Two_Factor_Core { user_login ), home_url(), 'https://wordpress.org/documentation/article/password-best-practices/', @@ -1742,30 +1974,36 @@ class Two_Factor_Core { ); $user_message = str_replace( "\t", '', $user_message ); - return wp_mail( $user->user_email, 'Your password was compromised and has been reset', $user_message ); + return wp_mail( $user->user_email, __( 'Your password was compromised and has been reset', 'two-factor' ), $user_message ); } /** * Notify the admin that a user's password was compromised and reset. * + * @since 0.8.0 + * * @param WP_User $user The user whose password was reset. * * @return bool `true` if the email was sent, `false` if it failed. */ public static function notify_admin_user_password_reset( $user ) { $admin_email = get_option( 'admin_email' ); - $subject = sprintf( 'Compromised password for %s has been reset', esc_html( $user->user_login ) ); + $subject = sprintf( + /* translators: %s: username */ + __( 'Compromised password for %s has been reset', 'two-factor' ), + esc_html( $user->user_login ) + ); $message = sprintf( - 'Hello, this is a notice from the Two Factor plugin to inform you that an unusually high number of failed login attempts have been detected on the %1$s account (ID %2$d). - - Those attempts successfully entered the user\'s password, and were only blocked because they entered invalid second authentication factors. - - To protect their account, the password has automatically been reset, and they have been notified that they will need to create a new one. - - If you do not wish to receive these notifications, you can disable them with the `two_factor_notify_admin_user_password_reset` filter. See %3$s for more information. - - Thank you', + /* translators: 1: username, 2: user ID, 3: URL to developer docs */ + __( + 'Hello, this is a notice from the Two Factor plugin to inform you that an unusually high number of failed login attempts have been detected on the %1$s account (ID %2$d). + Those attempts successfully entered the user\'s password, and were only blocked because they entered invalid second authentication factors. + To protect their account, the password has automatically been reset, and they have been notified that they will need to create a new one. + If you do not wish to receive these notifications, you can disable them with the `two_factor_notify_admin_user_password_reset` filter. See %3$s for more information. + Thank you', + 'two-factor' + ), esc_html( $user->user_login ), $user->ID, 'https://developer.wordpress.org/plugins/hooks/' @@ -1777,6 +2015,8 @@ class Two_Factor_Core { /** * Show the password reset error when on the login screen. + * + * @since 0.8.0 */ public static function show_password_reset_error() { $error = new WP_Error( @@ -1796,6 +2036,8 @@ class Two_Factor_Core { /** * Filter the columns on the Users admin screen. * + * @since 0.2.0 + * * @param array $columns Available columns. * @return array Updated array of columns. */ @@ -1807,6 +2049,8 @@ class Two_Factor_Core { /** * Output the 2FA column data on the Users screen. * + * @since 0.2.0 + * * @param string $output The column output. * @param string $column_name The column ID. * @param int $user_id The user ID. @@ -1824,7 +2068,6 @@ class Two_Factor_Core { $provider = self::get_primary_provider_for_user( $user_id ); return esc_html( $provider->get_label() ); } - } /** @@ -1832,13 +2075,11 @@ class Two_Factor_Core { * * This executes during the `show_user_profile` & `edit_user_profile` actions. * - * @since 0.1-dev + * @since 0.2.0 * * @param WP_User $user WP_User object of the logged-in user. */ public static function user_two_factor_options( $user ) { - $notices = []; - $providers = self::get_supported_providers_for_user( $user ); wp_enqueue_style( 'user-edit-2fa', plugins_url( 'user-edit.css', __FILE__ ), array(), TWO_FACTOR_VERSION ); @@ -1855,31 +2096,61 @@ class Two_Factor_Core { self::get_user_two_factor_revalidate_url() ); - $notices['warning two-factor-warning-revalidate-session'] = sprintf( - esc_html__( 'To update your Two-Factor options, you must first revalidate your session.', 'two-factor' ) . - ' ' . esc_html__( 'Revalidate now', 'two-factor' ) . '', - esc_url( $url ) + self::add_error( + new WP_Error( + 'two_factor_revalidate_session', + sprintf( + __( 'To update your Two-Factor options, you must first revalidate your session.', 'two-factor' ) . + ' ' . esc_html__( 'Revalidate now', 'two-factor' ) . '', + esc_url( $url ) + ), + array( + 'type' => 'warning', + ) + ) ); } if ( empty( $providers ) ) { - $notices['notice two-factor-notice-no-providers-supported'] = esc_html__( 'No providers are available for your account.', 'two-factor' ); + self::add_error( + new WP_Error( + 'two_factor_no_providers_supported', + __( 'No providers are available for your account.', 'two-factor' ), + array( + 'type' => 'notice', + ) + ) + ); } // Suggest enabling a backup method if only one method is enabled and there are more available. if ( count( $providers ) > 1 && 1 === count( $enabled_providers ) ) { - $notices['warning two-factor-warning-suggest-backup'] = esc_html__( 'To prevent being locked out of your account, consider enabling a backup method like Recovery Codes in case you lose access to your primary authentication method.', 'two-factor' ); + self::add_error( + new WP_Error( + 'two_factor_suggest_backup', + __( 'To prevent being locked out of your account, consider enabling a backup method like Recovery Codes in case you lose access to your primary authentication method.', 'two-factor' ), + array( + 'type' => 'warning', + ) + ) + ); } + + $generic_errors = array_filter( + self::$profile_errors, + static function ( WP_Error $error ) { + $error_data = $error->get_error_data(); + return empty( $error_data['provider'] ); // Where the associated provider is not set. + } + ); + ?>

- $notice ) : ?> -
-

-
- +
> + has_errors() ) { + $error_type = $error->get_error_data()['type'] ?? null; + + wp_admin_notice( + implode( '

', $error->get_error_messages() ), + array( + 'type' => is_string( $error_type ) ? $error_type : 'error', + 'additional_classes' => array( 'inline' ), + ) + ); + } + } + } + + /** + * Render the user settings. + * + * @since 0.13.0 + * + * @param WP_User $user User instance. + * @param array $providers List of available providers. + */ private static function render_user_providers_form( $user, $providers ) { - $primary_provider_key = self::get_primary_provider_key_selected_for_user( $user ); - $enabled_providers = self::get_enabled_providers_for_user( $user ); + $primary_provider_key = self::get_primary_provider_key_selected_for_user( $user ); + $available_providers = self::get_available_providers_for_user( $user ); + $recommended_provider_keys = self::get_recommended_providers( $user ); + + // Move the recommended providers first. + $recommended_providers = array_intersect_key( $providers, array_flip( $recommended_provider_keys ) ); + $providers = array_merge( $recommended_providers, $providers ); ?>

- +

+ +

+ +

+ + @@ -1919,9 +2256,14 @@ class Two_Factor_Core { get_label() ); ?> + - + - $object ) : ?> - @@ -1963,11 +2305,31 @@ class Two_Factor_Core { get_error_data(); // Return the data for the first error. + + return isset( $error_data['provider'] ) && $error_data['provider'] === $provider_key; + } + ); + } + /** * Enable a provider for a user. * * The caller is responsible for checking the user has permission to do this. * + * @since 0.8.0 + * * @param int $user_id The ID of the user. * @param string $new_provider The name of the provider class. * @@ -1999,8 +2361,10 @@ class Two_Factor_Core { * * The caller is responsible for checking the user has permission to do this. * - * @param int $user_id The ID of the user. - * @param string $provider The name of the provider class. + * @since 0.9.0 + * + * @param int $user_id The ID of the user. + * @param string $provider_to_delete The name of the provider class. * * @return bool True if the provider was disabled, false otherwise. */ @@ -2033,7 +2397,7 @@ class Two_Factor_Core { * * This executes during the `personal_options_update` & `edit_user_profile_update` actions. * - * @since 0.1-dev + * @since 0.2.0 * * @param int $user_id User ID. */ @@ -2050,48 +2414,75 @@ class Two_Factor_Core { return; } + $user = self::fetch_user( $user_id ); $providers = self::get_supported_providers_for_user( $user_id ); $enabled_providers = $_POST[ self::ENABLED_PROVIDERS_USER_META_KEY ]; $existing_providers = self::get_enabled_providers_for_user( $user_id ); // Enable only the available providers. - $enabled_providers = array_intersect( $enabled_providers, array_keys( $providers ) ); - update_user_meta( $user_id, self::ENABLED_PROVIDERS_USER_META_KEY, $enabled_providers ); + $enabled_providers = array_intersect_key( $providers, array_flip( $enabled_providers ) ); + + // Ensure the enabled providers are configured and can be enabled. + foreach ( $enabled_providers as $provider_key => $provider ) { + if ( ! $provider->is_available_for_user( $user ) ) { + unset( $enabled_providers[ $provider_key ] ); + + self::add_error( + new WP_Error( + 'two_factor_provider_not_configured_' . $provider_key, + sprintf( + /* translators: %s: provider label. */ + __( 'The %s method must be configured before it can be enabled.', 'two-factor' ), + esc_html( $provider->get_label() ) + ), + array( + 'provider' => $provider_key, + ) + ) + ); + } + } + + update_user_meta( $user_id, self::ENABLED_PROVIDERS_USER_META_KEY, array_keys( $enabled_providers ) ); // Primary provider must be enabled. $new_provider = isset( $_POST[ self::PROVIDER_USER_META_KEY ] ) ? $_POST[ self::PROVIDER_USER_META_KEY ] : ''; - if ( ! empty( $new_provider ) && in_array( $new_provider, $enabled_providers, true ) ) { + if ( ! empty( $new_provider ) && isset( $enabled_providers[ $new_provider ] ) ) { update_user_meta( $user_id, self::PROVIDER_USER_META_KEY, $new_provider ); } else { delete_user_meta( $user_id, self::PROVIDER_USER_META_KEY ); } // Have we changed the two-factor settings for the current user? Alter their session metadata. - if ( $user_id === get_current_user_id() ) { + if ( get_current_user_id() === $user_id ) { if ( $enabled_providers && ! $existing_providers && ! self::is_current_user_session_two_factor() ) { // We've enabled two-factor from a non-two-factor session, set the key but not the provider, as no provider has been used yet. - self::update_current_user_session( array( - 'two-factor-provider' => '', - 'two-factor-login' => time(), - ) ); + self::update_current_user_session( + array( + 'two-factor-provider' => '', + 'two-factor-login' => time(), + ) + ); } elseif ( $existing_providers && ! $enabled_providers ) { // We've disabled two-factor, remove session metadata. - self::update_current_user_session( array( - 'two-factor-provider' => null, - 'two-factor-login' => null, - ) ); + self::update_current_user_session( + array( + 'two-factor-provider' => null, + 'two-factor-login' => null, + ) + ); } } - // Destroy other sessions if setup 2FA for the first time, or deactivated a provider + // Destroy other sessions if setup 2FA for the first time, or deactivated a provider. if ( - // No providers, enabling one (or more) + // No providers, enabling one (or more). ( ! $existing_providers && $enabled_providers ) || // Has providers, and is disabling one (or more), but remaining with 2FA. - ( $existing_providers && $enabled_providers && array_diff( $existing_providers, $enabled_providers ) ) + ( $existing_providers && $enabled_providers && array_diff( $existing_providers, array_keys( $enabled_providers ) ) ) ) { - if ( $user_id === get_current_user_id() ) { + if ( get_current_user_id() === $user_id ) { // Keep the current session, destroy others sessions for this user. wp_destroy_other_sessions(); } else { @@ -2107,6 +2498,8 @@ class Two_Factor_Core { * * Any values set in $data that are null will be removed from the user session metadata. * + * @since 0.9.0 + * * @param array $data The data to append/remove from the current session. * @return bool */ @@ -2134,6 +2527,8 @@ class Two_Factor_Core { /** * Fetch the current user session metadata. * + * @since 0.9.0 + * * @return false|array The session array, false on error. */ public static function get_current_user_session() { @@ -2151,6 +2546,8 @@ class Two_Factor_Core { /** * Should the login session persist between sessions. * + * @since 0.5.0 + * * @return boolean */ public static function rememberme() { @@ -2160,6 +2557,13 @@ class Two_Factor_Core { $rememberme = true; } + /** + * Filters whether the login session should persist between browser sessions. + * + * @since 0.5.0 + * + * @param bool $rememberme Whether to remember the user. Default false. + */ return (bool) apply_filters( 'two_factor_rememberme', $rememberme ); } @@ -2170,12 +2574,14 @@ class Two_Factor_Core { * * @see https://core.trac.wordpress.org/ticket/58427 * + * @since 0.9.0 + * * @param array $session The Session information. * @param int $user_id The User ID for the session. * @return array */ public static function filter_session_information( $session, $user_id ) { - if ( $user_id !== get_current_user_id() ) { + if ( get_current_user_id() !== $user_id ) { return $session; } @@ -2191,3 +2597,4 @@ class Two_Factor_Core { return $session; } } + diff --git a/wp-content/plugins/two-factor/includes/Google/u2f-api.js b/wp-content/plugins/two-factor/includes/Google/u2f-api.js deleted file mode 100644 index 1036b920..00000000 --- a/wp-content/plugins/two-factor/includes/Google/u2f-api.js +++ /dev/null @@ -1,748 +0,0 @@ -//Copyright 2014-2015 Google Inc. All rights reserved. - -//Use of this source code is governed by a BSD-style -//license that can be found in the LICENSE file or at -//https://developers.google.com/open-source/licenses/bsd - -/** - * @fileoverview The U2F api. - */ -'use strict'; - - -/** - * Namespace for the U2F api. - * @type {Object} - */ -var u2f = u2f || {}; - -/** - * FIDO U2F Javascript API Version - * @number - */ -var js_api_version; - -/** - * The U2F extension id - * @const {string} - */ -// The Chrome packaged app extension ID. -// Uncomment this if you want to deploy a server instance that uses -// the package Chrome app and does not require installing the U2F Chrome extension. - u2f.EXTENSION_ID = 'kmendfapggjehodndflmmgagdbamhnfd'; -// The U2F Chrome extension ID. -// Uncomment this if you want to deploy a server instance that uses -// the U2F Chrome extension to authenticate. -// u2f.EXTENSION_ID = 'pfboblefjcgdjicmnffhdgionmgcdmne'; - - -/** - * Message types for messages to/from the extension - * @const - * @enum {string} - */ -u2f.MessageTypes = { - 'U2F_REGISTER_REQUEST': 'u2f_register_request', - 'U2F_REGISTER_RESPONSE': 'u2f_register_response', - 'U2F_SIGN_REQUEST': 'u2f_sign_request', - 'U2F_SIGN_RESPONSE': 'u2f_sign_response', - 'U2F_GET_API_VERSION_REQUEST': 'u2f_get_api_version_request', - 'U2F_GET_API_VERSION_RESPONSE': 'u2f_get_api_version_response' -}; - - -/** - * Response status codes - * @const - * @enum {number} - */ -u2f.ErrorCodes = { - 'OK': 0, - 'OTHER_ERROR': 1, - 'BAD_REQUEST': 2, - 'CONFIGURATION_UNSUPPORTED': 3, - 'DEVICE_INELIGIBLE': 4, - 'TIMEOUT': 5 -}; - - -/** - * A message for registration requests - * @typedef {{ - * type: u2f.MessageTypes, - * appId: ?string, - * timeoutSeconds: ?number, - * requestId: ?number - * }} - */ -u2f.U2fRequest; - - -/** - * A message for registration responses - * @typedef {{ - * type: u2f.MessageTypes, - * responseData: (u2f.Error | u2f.RegisterResponse | u2f.SignResponse), - * requestId: ?number - * }} - */ -u2f.U2fResponse; - - -/** - * An error object for responses - * @typedef {{ - * errorCode: u2f.ErrorCodes, - * errorMessage: ?string - * }} - */ -u2f.Error; - -/** - * Data object for a single sign request. - * @typedef {enum {BLUETOOTH_RADIO, BLUETOOTH_LOW_ENERGY, USB, NFC}} - */ -u2f.Transport; - - -/** - * Data object for a single sign request. - * @typedef {Array} - */ -u2f.Transports; - -/** - * Data object for a single sign request. - * @typedef {{ - * version: string, - * challenge: string, - * keyHandle: string, - * appId: string - * }} - */ -u2f.SignRequest; - - -/** - * Data object for a sign response. - * @typedef {{ - * keyHandle: string, - * signatureData: string, - * clientData: string - * }} - */ -u2f.SignResponse; - - -/** - * Data object for a registration request. - * @typedef {{ - * version: string, - * challenge: string - * }} - */ -u2f.RegisterRequest; - - -/** - * Data object for a registration response. - * @typedef {{ - * version: string, - * keyHandle: string, - * transports: Transports, - * appId: string - * }} - */ -u2f.RegisterResponse; - - -/** - * Data object for a registered key. - * @typedef {{ - * version: string, - * keyHandle: string, - * transports: ?Transports, - * appId: ?string - * }} - */ -u2f.RegisteredKey; - - -/** - * Data object for a get API register response. - * @typedef {{ - * js_api_version: number - * }} - */ -u2f.GetJsApiVersionResponse; - - -//Low level MessagePort API support - -/** - * Sets up a MessagePort to the U2F extension using the - * available mechanisms. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - */ -u2f.getMessagePort = function(callback) { - if (typeof chrome != 'undefined' && chrome.runtime) { - // The actual message here does not matter, but we need to get a reply - // for the callback to run. Thus, send an empty signature request - // in order to get a failure response. - var msg = { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: [] - }; - chrome.runtime.sendMessage(u2f.EXTENSION_ID, msg, function() { - if (!chrome.runtime.lastError) { - // We are on a whitelisted origin and can talk directly - // with the extension. - u2f.getChromeRuntimePort_(callback); - } else { - // chrome.runtime was available, but we couldn't message - // the extension directly, use iframe - u2f.getIframePort_(callback); - } - }); - } else if (u2f.isAndroidChrome_()) { - u2f.getAuthenticatorPort_(callback); - } else if (u2f.isIosChrome_()) { - u2f.getIosPort_(callback); - } else { - // chrome.runtime was not available at all, which is normal - // when this origin doesn't have access to any extensions. - u2f.getIframePort_(callback); - } -}; - -/** - * Detect chrome running on android based on the browser's useragent. - * @private - */ -u2f.isAndroidChrome_ = function() { - var userAgent = navigator.userAgent; - return userAgent.indexOf('Chrome') != -1 && - userAgent.indexOf('Android') != -1; -}; - -/** - * Detect chrome running on iOS based on the browser's platform. - * @private - */ -u2f.isIosChrome_ = function() { - return ["iPhone", "iPad", "iPod"].indexOf(navigator.platform) > -1; -}; - -/** - * Connects directly to the extension via chrome.runtime.connect. - * @param {function(u2f.WrappedChromeRuntimePort_)} callback - * @private - */ -u2f.getChromeRuntimePort_ = function(callback) { - var port = chrome.runtime.connect(u2f.EXTENSION_ID, - {'includeTlsChannelId': true}); - setTimeout(function() { - callback(new u2f.WrappedChromeRuntimePort_(port)); - }, 0); -}; - -/** - * Return a 'port' abstraction to the Authenticator app. - * @param {function(u2f.WrappedAuthenticatorPort_)} callback - * @private - */ -u2f.getAuthenticatorPort_ = function(callback) { - setTimeout(function() { - callback(new u2f.WrappedAuthenticatorPort_()); - }, 0); -}; - -/** - * Return a 'port' abstraction to the iOS client app. - * @param {function(u2f.WrappedIosPort_)} callback - * @private - */ -u2f.getIosPort_ = function(callback) { - setTimeout(function() { - callback(new u2f.WrappedIosPort_()); - }, 0); -}; - -/** - * A wrapper for chrome.runtime.Port that is compatible with MessagePort. - * @param {Port} port - * @constructor - * @private - */ -u2f.WrappedChromeRuntimePort_ = function(port) { - this.port_ = port; -}; - -/** - * Format and return a sign request compliant with the JS API version supported by the extension. - * @param {Array} signRequests - * @param {number} timeoutSeconds - * @param {number} reqId - * @return {Object} - */ -u2f.formatSignRequest_ = - function(appId, challenge, registeredKeys, timeoutSeconds, reqId) { - if (js_api_version === undefined || js_api_version < 1.1) { - // Adapt request to the 1.0 JS API. - var signRequests = []; - for (var i = 0; i < registeredKeys.length; i++) { - signRequests[i] = { - version: registeredKeys[i].version, - challenge: challenge, - keyHandle: registeredKeys[i].keyHandle, - appId: appId - }; - } - return { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: signRequests, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - } - // JS 1.1 API. - return { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - appId: appId, - challenge: challenge, - registeredKeys: registeredKeys, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; -}; - -/** - * Format and return a register request compliant with the JS API version supported by the extension.. - * @param {Array} signRequests - * @param {Array} signRequests - * @param {number} timeoutSeconds - * @param {number} reqId - * @return {Object} - */ -u2f.formatRegisterRequest_ = - function(appId, registeredKeys, registerRequests, timeoutSeconds, reqId) { - if (js_api_version === undefined || js_api_version < 1.1) { - // Adapt request to the 1.0 JS API. - for (var i = 0; i < registerRequests.length; i++) { - registerRequests[i].appId = appId; - } - var signRequests = []; - for (var i = 0; i < registeredKeys.length; i++) { - signRequests[i] = { - version: registeredKeys[i].version, - challenge: registerRequests[0], - keyHandle: registeredKeys[i].keyHandle, - appId: appId - }; - } - return { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - signRequests: signRequests, - registerRequests: registerRequests, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - } - // JS 1.1 API. - return { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - appId: appId, - registerRequests: registerRequests, - registeredKeys: registeredKeys, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; -}; - - -/** - * Posts a message on the underlying channel. - * @param {Object} message - */ -u2f.WrappedChromeRuntimePort_.prototype.postMessage = function(message) { - this.port_.postMessage(message); -}; - - -/** - * Emulates the HTML 5 addEventListener interface. Works only for the - * onmessage event, which is hooked up to the chrome.runtime.Port.onMessage. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedChromeRuntimePort_.prototype.addEventListener = - function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message' || name == 'onmessage') { - this.port_.onMessage.addListener(function(message) { - // Emulate a minimal MessageEvent object. - handler({'data': message}); - }); - } else { - console.error('WrappedChromeRuntimePort only supports onMessage'); - } -}; - -/** - * Wrap the Authenticator app with a MessagePort interface. - * @constructor - * @private - */ -u2f.WrappedAuthenticatorPort_ = function() { - this.requestId_ = -1; - this.requestObject_ = null; -} - -/** - * Launch the Authenticator intent. - * @param {Object} message - */ -u2f.WrappedAuthenticatorPort_.prototype.postMessage = function(message) { - var intentUrl = - u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ + - ';S.request=' + encodeURIComponent(JSON.stringify(message)) + - ';end'; - document.location = intentUrl; -}; - -/** - * Tells what type of port this is. - * @return {String} port type - */ -u2f.WrappedAuthenticatorPort_.prototype.getPortType = function() { - return "WrappedAuthenticatorPort_"; -}; - - -/** - * Emulates the HTML 5 addEventListener interface. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedAuthenticatorPort_.prototype.addEventListener = function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message') { - var self = this; - /* Register a callback to that executes when - * chrome injects the response. */ - window.addEventListener( - 'message', self.onRequestUpdate_.bind(self, handler), false); - } else { - console.error('WrappedAuthenticatorPort only supports message'); - } -}; - -/** - * Callback invoked when a response is received from the Authenticator. - * @param function({data: Object}) callback - * @param {Object} message message Object - */ -u2f.WrappedAuthenticatorPort_.prototype.onRequestUpdate_ = - function(callback, message) { - var messageObject = JSON.parse(message.data); - var intentUrl = messageObject['intentURL']; - - var errorCode = messageObject['errorCode']; - var responseObject = null; - if (messageObject.hasOwnProperty('data')) { - responseObject = /** @type {Object} */ ( - JSON.parse(messageObject['data'])); - } - - callback({'data': responseObject}); -}; - -/** - * Base URL for intents to Authenticator. - * @const - * @private - */ -u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ = - 'intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE'; - -/** - * Wrap the iOS client app with a MessagePort interface. - * @constructor - * @private - */ -u2f.WrappedIosPort_ = function() {}; - -/** - * Launch the iOS client app request - * @param {Object} message - */ -u2f.WrappedIosPort_.prototype.postMessage = function(message) { - var str = JSON.stringify(message); - var url = "u2f://auth?" + encodeURI(str); - location.replace(url); -}; - -/** - * Tells what type of port this is. - * @return {String} port type - */ -u2f.WrappedIosPort_.prototype.getPortType = function() { - return "WrappedIosPort_"; -}; - -/** - * Emulates the HTML 5 addEventListener interface. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedIosPort_.prototype.addEventListener = function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name !== 'message') { - console.error('WrappedIosPort only supports message'); - } -}; - -/** - * Sets up an embedded trampoline iframe, sourced from the extension. - * @param {function(MessagePort)} callback - * @private - */ -u2f.getIframePort_ = function(callback) { - // Create the iframe - var iframeOrigin = 'chrome-extension://' + u2f.EXTENSION_ID; - var iframe = document.createElement('iframe'); - iframe.src = iframeOrigin + '/u2f-comms.html'; - iframe.setAttribute('style', 'display:none'); - document.body.appendChild(iframe); - - var channel = new MessageChannel(); - var ready = function(message) { - if (message.data == 'ready') { - channel.port1.removeEventListener('message', ready); - callback(channel.port1); - } else { - console.error('First event on iframe port was not "ready"'); - } - }; - channel.port1.addEventListener('message', ready); - channel.port1.start(); - - iframe.addEventListener('load', function() { - // Deliver the port to the iframe and initialize - iframe.contentWindow.postMessage('init', iframeOrigin, [channel.port2]); - }); -}; - - -//High-level JS API - -/** - * Default extension response timeout in seconds. - * @const - */ -u2f.EXTENSION_TIMEOUT_SEC = 30; - -/** - * A singleton instance for a MessagePort to the extension. - * @type {MessagePort|u2f.WrappedChromeRuntimePort_} - * @private - */ -u2f.port_ = null; - -/** - * Callbacks waiting for a port - * @type {Array} - * @private - */ -u2f.waitingForPort_ = []; - -/** - * A counter for requestIds. - * @type {number} - * @private - */ -u2f.reqCounter_ = 0; - -/** - * A map from requestIds to client callbacks - * @type {Object.} - * @private - */ -u2f.callbackMap_ = {}; - -/** - * Creates or retrieves the MessagePort singleton to use. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - * @private - */ -u2f.getPortSingleton_ = function(callback) { - if (u2f.port_) { - callback(u2f.port_); - } else { - if (u2f.waitingForPort_.length == 0) { - u2f.getMessagePort(function(port) { - u2f.port_ = port; - u2f.port_.addEventListener('message', - /** @type {function(Event)} */ (u2f.responseHandler_)); - - // Careful, here be async callbacks. Maybe. - while (u2f.waitingForPort_.length) - u2f.waitingForPort_.shift()(u2f.port_); - }); - } - u2f.waitingForPort_.push(callback); - } -}; - -/** - * Handles response messages from the extension. - * @param {MessageEvent.} message - * @private - */ -u2f.responseHandler_ = function(message) { - var response = message.data; - var reqId = response['requestId']; - if (!reqId || !u2f.callbackMap_[reqId]) { - console.error('Unknown or missing requestId in response.'); - return; - } - var cb = u2f.callbackMap_[reqId]; - delete u2f.callbackMap_[reqId]; - cb(response['responseData']); -}; - -/** - * Dispatches an array of sign requests to available U2F tokens. - * If the JS API version supported by the extension is unknown, it first sends a - * message to the extension to find out the supported API version and then it sends - * the sign request. - * @param {string=} appId - * @param {string=} challenge - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sign = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) { - if (js_api_version === undefined) { - // Send a message to get the extension to JS API version, then send the actual sign request. - u2f.getApiVersion( - function (response) { - js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version']; - console.log("Extension JS API Version: ", js_api_version); - u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds); - }); - } else { - // We know the JS API version. Send the actual sign request in the supported API version. - u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds); - } -}; - -/** - * Dispatches an array of sign requests to available U2F tokens. - * @param {string=} appId - * @param {string=} challenge - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sendSignRequest = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC); - var req = u2f.formatSignRequest_(appId, challenge, registeredKeys, timeoutSeconds, reqId); - port.postMessage(req); - }); -}; - -/** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * If the JS API version supported by the extension is unknown, it first sends a - * message to the extension to find out the supported API version and then it sends - * the register request. - * @param {string=} appId - * @param {Array} registerRequests - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.register = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) { - if (js_api_version === undefined) { - // Send a message to get the extension to JS API version, then send the actual register request. - u2f.getApiVersion( - function (response) { - js_api_version = response['js_api_version'] === undefined ? 0: response['js_api_version']; - console.log("Extension JS API Version: ", js_api_version); - u2f.sendRegisterRequest(appId, registerRequests, registeredKeys, - callback, opt_timeoutSeconds); - }); - } else { - // We know the JS API version. Send the actual register request in the supported API version. - u2f.sendRegisterRequest(appId, registerRequests, registeredKeys, - callback, opt_timeoutSeconds); - } -}; - -/** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * @param {string=} appId - * @param {Array} registerRequests - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sendRegisterRequest = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC); - var req = u2f.formatRegisterRequest_( - appId, registeredKeys, registerRequests, timeoutSeconds, reqId); - port.postMessage(req); - }); -}; - - -/** - * Dispatches a message to the extension to find out the supported - * JS API version. - * If the user is on a mobile phone and is thus using Google Authenticator instead - * of the Chrome extension, don't send the request and simply return 0. - * @param {function((u2f.Error|u2f.GetJsApiVersionResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.getApiVersion = function(callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - // If we are using Android Google Authenticator or iOS client app, - // do not fire an intent to ask which JS API version to use. - if (port.getPortType) { - var apiVersion; - switch (port.getPortType()) { - case 'WrappedIosPort_': - case 'WrappedAuthenticatorPort_': - apiVersion = 1.1; - break; - - default: - apiVersion = 0; - break; - } - callback({ 'js_api_version': apiVersion }); - return; - } - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var req = { - type: u2f.MessageTypes.U2F_GET_API_VERSION_REQUEST, - timeoutSeconds: (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC), - requestId: reqId - }; - port.postMessage(req); - }); -}; diff --git a/wp-content/plugins/two-factor/includes/Yubico/U2F.php b/wp-content/plugins/two-factor/includes/Yubico/U2F.php deleted file mode 100644 index bbb6e9a0..00000000 --- a/wp-content/plugins/two-factor/includes/Yubico/U2F.php +++ /dev/null @@ -1,507 +0,0 @@ -appId = $appId; - $this->attestDir = $attestDir; - } - - /** - * Called to get a registration request to send to a user. - * Returns an array of one registration request and a array of sign requests. - * - * @param array $registrations List of current registrations for this - * user, to prevent the user from registering the same authenticator several - * times. - * @return array An array of two elements, the first containing a - * RegisterRequest the second being an array of SignRequest - * @throws Error - */ - public function getRegisterData(array $registrations = array()) - { - $challenge = $this->createChallenge(); - $request = new RegisterRequest($challenge, $this->appId); - $signs = $this->getAuthenticateData($registrations); - return array($request, $signs); - } - - /** - * Called to verify and unpack a registration message. - * - * @param RegisterRequest $request this is a reply to - * @param object $response response from a user - * @param bool $includeCert set to true if the attestation certificate should be - * included in the returned Registration object - * @return Registration - * @throws Error - */ - public function doRegister($request, $response, $includeCert = true) - { - if( !is_object( $request ) ) { - throw new \InvalidArgumentException('$request of doRegister() method only accepts object.'); - } - - if( !is_object( $response ) ) { - throw new \InvalidArgumentException('$response of doRegister() method only accepts object.'); - } - - if( property_exists( $response, 'errorCode') && $response->errorCode !== 0 ) { - throw new Error('User-agent returned error. Error code: ' . $response->errorCode, ERR_BAD_UA_RETURNING ); - } - - if( !is_bool( $includeCert ) ) { - throw new \InvalidArgumentException('$include_cert of doRegister() method only accepts boolean.'); - } - - $rawReg = $this->base64u_decode($response->registrationData); - $regData = array_values(unpack('C*', $rawReg)); - $clientData = $this->base64u_decode($response->clientData); - $cli = json_decode($clientData); - - if($cli->challenge !== $request->challenge) { - throw new Error('Registration challenge does not match', ERR_UNMATCHED_CHALLENGE ); - } - - $registration = new Registration(); - $offs = 1; - $pubKey = substr($rawReg, $offs, PUBKEY_LEN); - $offs += PUBKEY_LEN; - // Decode the pubKey to make sure it's good. - $tmpKey = $this->pubkey_to_pem($pubKey); - if($tmpKey === null) { - throw new Error('Decoding of public key failed', ERR_PUBKEY_DECODE ); - } - $registration->publicKey = base64_encode($pubKey); - $khLen = $regData[$offs++]; - $kh = substr($rawReg, $offs, $khLen); - $offs += $khLen; - $registration->keyHandle = $this->base64u_encode($kh); - - // length of certificate is stored in byte 3 and 4 (excluding the first 4 bytes). - $certLen = 4; - $certLen += ($regData[$offs + 2] << 8); - $certLen += $regData[$offs + 3]; - - $rawCert = $this->fixSignatureUnusedBits(substr($rawReg, $offs, $certLen)); - $offs += $certLen; - $pemCert = "-----BEGIN CERTIFICATE-----\r\n"; - $pemCert .= chunk_split(base64_encode($rawCert), 64); - $pemCert .= "-----END CERTIFICATE-----"; - if($includeCert) { - $registration->certificate = base64_encode($rawCert); - } - if($this->attestDir) { - if(openssl_x509_checkpurpose($pemCert, -1, $this->get_certs()) !== true) { - throw new Error('Attestation certificate can not be validated', ERR_ATTESTATION_VERIFICATION ); - } - } - - if(!openssl_pkey_get_public($pemCert)) { - throw new Error('Decoding of public key failed', ERR_PUBKEY_DECODE ); - } - $signature = substr($rawReg, $offs); - - $dataToVerify = chr(0); - $dataToVerify .= hash('sha256', $request->appId, true); - $dataToVerify .= hash('sha256', $clientData, true); - $dataToVerify .= $kh; - $dataToVerify .= $pubKey; - - if(openssl_verify($dataToVerify, $signature, $pemCert, 'sha256') === 1) { - return $registration; - } else { - throw new Error('Attestation signature does not match', ERR_ATTESTATION_SIGNATURE ); - } - } - - /** - * Called to get an authentication request. - * - * @param array $registrations An array of the registrations to create authentication requests for. - * @return array An array of SignRequest - * @throws Error - */ - public function getAuthenticateData(array $registrations) - { - $sigs = array(); - $challenge = $this->createChallenge(); - foreach ($registrations as $reg) { - if( !is_object( $reg ) ) { - throw new \InvalidArgumentException('$registrations of getAuthenticateData() method only accepts array of object.'); - } - - $sig = new SignRequest(); - $sig->appId = $this->appId; - $sig->keyHandle = $reg->keyHandle; - $sig->challenge = $challenge; - $sigs[] = $sig; - } - return $sigs; - } - - /** - * Called to verify an authentication response - * - * @param array $requests An array of outstanding authentication requests - * @param array $registrations An array of current registrations - * @param object $response A response from the authenticator - * @return Registration - * @throws Error - * - * The Registration object returned on success contains an updated counter - * that should be saved for future authentications. - * If the Error returned is ERR_COUNTER_TOO_LOW this is an indication of - * token cloning or similar and appropriate action should be taken. - */ - public function doAuthenticate(array $requests, array $registrations, $response) - { - if( !is_object( $response ) ) { - throw new \InvalidArgumentException('$response of doAuthenticate() method only accepts object.'); - } - - if( property_exists( $response, 'errorCode') && $response->errorCode !== 0 ) { - throw new Error('User-agent returned error. Error code: ' . $response->errorCode, ERR_BAD_UA_RETURNING ); - } - - /** @var object|null $req */ - $req = null; - - /** @var object|null $reg */ - $reg = null; - - $clientData = $this->base64u_decode($response->clientData); - $decodedClient = json_decode($clientData); - foreach ($requests as $req) { - if( !is_object( $req ) ) { - throw new \InvalidArgumentException('$requests of doAuthenticate() method only accepts array of object.'); - } - - if($req->keyHandle === $response->keyHandle && $req->challenge === $decodedClient->challenge) { - break; - } - - $req = null; - } - if($req === null) { - throw new Error('No matching request found', ERR_NO_MATCHING_REQUEST ); - } - foreach ($registrations as $reg) { - if( !is_object( $reg ) ) { - throw new \InvalidArgumentException('$registrations of doAuthenticate() method only accepts array of object.'); - } - - if($reg->keyHandle === $response->keyHandle) { - break; - } - $reg = null; - } - if($reg === null) { - throw new Error('No matching registration found', ERR_NO_MATCHING_REGISTRATION ); - } - $pemKey = $this->pubkey_to_pem($this->base64u_decode($reg->publicKey)); - if($pemKey === null) { - throw new Error('Decoding of public key failed', ERR_PUBKEY_DECODE ); - } - - $signData = $this->base64u_decode($response->signatureData); - $dataToVerify = hash('sha256', $req->appId, true); - $dataToVerify .= substr($signData, 0, 5); - $dataToVerify .= hash('sha256', $clientData, true); - $signature = substr($signData, 5); - - if(openssl_verify($dataToVerify, $signature, $pemKey, 'sha256') === 1) { - $ctr = unpack("Nctr", substr($signData, 1, 4)); - $counter = $ctr['ctr']; - /* TODO: wrap-around should be handled somehow.. */ - if($counter > $reg->counter) { - $reg->counter = $counter; - return $reg; - } else { - throw new Error('Counter too low.', ERR_COUNTER_TOO_LOW ); - } - } else { - throw new Error('Authentication failed', ERR_AUTHENTICATION_FAILURE ); - } - } - - /** - * @return array - */ - private function get_certs() - { - $files = array(); - $dir = $this->attestDir; - if($dir && $handle = opendir($dir)) { - while(false !== ($entry = readdir($handle))) { - if(is_file("$dir/$entry")) { - $files[] = "$dir/$entry"; - } - } - closedir($handle); - } - return $files; - } - - /** - * @param string $data - * @return string - */ - private function base64u_encode($data) - { - return trim(strtr(base64_encode($data), '+/', '-_'), '='); - } - - /** - * @param string $data - * @return string - */ - private function base64u_decode($data) - { - return base64_decode(strtr($data, '-_', '+/')); - } - - /** - * @param string $key - * @return null|string - */ - private function pubkey_to_pem($key) - { - if(strlen($key) !== PUBKEY_LEN || $key[0] !== "\x04") { - return null; - } - - /* - * Convert the public key to binary DER format first - * Using the ECC SubjectPublicKeyInfo OIDs from RFC 5480 - * - * SEQUENCE(2 elem) 30 59 - * SEQUENCE(2 elem) 30 13 - * OID1.2.840.10045.2.1 (id-ecPublicKey) 06 07 2a 86 48 ce 3d 02 01 - * OID1.2.840.10045.3.1.7 (secp256r1) 06 08 2a 86 48 ce 3d 03 01 07 - * BIT STRING(520 bit) 03 42 ..key.. - */ - $der = "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01"; - $der .= "\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42"; - $der .= "\0".$key; - - $pem = "-----BEGIN PUBLIC KEY-----\r\n"; - $pem .= chunk_split(base64_encode($der), 64); - $pem .= "-----END PUBLIC KEY-----"; - - return $pem; - } - - /** - * @return string - * @throws Error - */ - private function createChallenge() - { - $challenge = openssl_random_pseudo_bytes(32, $crypto_strong ); - if( $crypto_strong !== true ) { - throw new Error('Unable to obtain a good source of randomness', ERR_BAD_RANDOM); - } - - $challenge = $this->base64u_encode( $challenge ); - - return $challenge; - } - - /** - * Fixes a certificate where the signature contains unused bits. - * - * @param string $cert - * @return mixed - */ - private function fixSignatureUnusedBits($cert) - { - if(in_array(hash('sha256', $cert), $this->FIXCERTS)) { - $cert[strlen($cert) - 257] = "\0"; - } - return $cert; - } -} - -/** - * Class for building a registration request - * - * @package u2flib_server - */ -class RegisterRequest -{ - /** Protocol version */ - public $version = U2F_VERSION; - - /** Registration challenge */ - public $challenge; - - /** Application id */ - public $appId; - - /** - * @param string $challenge - * @param string $appId - * @internal - */ - public function __construct($challenge, $appId) - { - $this->challenge = $challenge; - $this->appId = $appId; - } -} - -/** - * Class for building up an authentication request - * - * @package u2flib_server - */ -class SignRequest -{ - /** Protocol version */ - public $version = U2F_VERSION; - - /** Authentication challenge */ - public $challenge; - - /** Key handle of a registered authenticator */ - public $keyHandle; - - /** Application id */ - public $appId; -} - -/** - * Class returned for successful registrations - * - * @package u2flib_server - */ -class Registration -{ - /** The key handle of the registered authenticator */ - public $keyHandle; - - /** The public key of the registered authenticator */ - public $publicKey; - - /** The attestation certificate of the registered authenticator */ - public $certificate; - - /** The counter associated with this registration */ - public $counter = -1; -} - -/** - * Error class, returned on errors - * - * @package u2flib_server - */ -class Error extends \Exception -{ - /** - * Override constructor and make message and code mandatory - * @param string $message - * @param int $code - * @param \Exception|null $previous - */ - public function __construct($message, $code, ?\Exception $previous = null) { - parent::__construct($message, $code, $previous); - } -} diff --git a/wp-content/plugins/two-factor/providers/class-two-factor-backup-codes.php b/wp-content/plugins/two-factor/providers/class-two-factor-backup-codes.php index 2a3345b4..465e1f8f 100644 --- a/wp-content/plugins/two-factor/providers/class-two-factor-backup-codes.php +++ b/wp-content/plugins/two-factor/providers/class-two-factor-backup-codes.php @@ -39,13 +39,36 @@ class Two_Factor_Backup_Codes extends Two_Factor_Provider { add_action( 'rest_api_init', array( $this, 'register_rest_routes' ) ); add_action( 'two_factor_user_options_' . __CLASS__, array( $this, 'user_options' ) ); add_action( 'admin_notices', array( $this, 'admin_notices' ) ); + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) ); + add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_assets' ) ); parent::__construct(); } + /** + * Enqueue scripts for backup codes. + * + * @since 0.10.0 + * + * @codeCoverageIgnore + * + * @param string $hook_suffix Optional. The current admin page hook suffix. + */ + public function enqueue_assets( $hook_suffix = '' ) { + wp_register_script( + 'two-factor-backup-codes-admin', + plugins_url( 'js/backup-codes-admin.js', __FILE__ ), + array( 'jquery', 'wp-api-request' ), + TWO_FACTOR_VERSION, + true + ); + } + /** * Register the rest-api endpoints required for this provider. * + * @since 0.8.0 + * * @codeCoverageIgnore */ public function register_rest_routes() { @@ -55,11 +78,11 @@ class Two_Factor_Backup_Codes extends Two_Factor_Provider { array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'rest_generate_codes' ), - 'permission_callback' => function( $request ) { + 'permission_callback' => function ( $request ) { return Two_Factor_Core::rest_api_can_edit_user_and_update_two_factor_options( $request['user_id'] ); }, 'args' => array( - 'user_id' => array( + 'user_id' => array( 'required' => true, 'type' => 'integer', ), @@ -106,7 +129,7 @@ class Two_Factor_Backup_Codes extends Two_Factor_Provider { array( 'a' => array( 'href' => true ) ) ); ?> - +

Two_Factor_Core::REST_NAMESPACE . '/generate-backup-codes', + 'userId' => $user->ID, + ) + ); + wp_enqueue_script( 'two-factor-backup-codes-admin' ); $count = self::codes_remaining_for_user( $user ); ?> -

+

+ +

-

+
- self::NUMBER_OF_CODES, 'method' => 'replace', ); @@ -304,7 +318,7 @@ class Two_Factor_Backup_Codes extends Two_Factor_Provider { $i = 1; foreach ( $codes as $code ) { $download_link .= rawurlencode( "{$i}. {$code}\r\n" ); - $i++; + ++$i; } $i18n = array( @@ -327,6 +341,8 @@ class Two_Factor_Backup_Codes extends Two_Factor_Provider { /** * Returns the number of unused codes for the specified user * + * @since 0.2.0 + * * @param WP_User $user WP_User object of the logged-in user. * @return int $int The number of unused codes remaining */ @@ -348,17 +364,47 @@ class Two_Factor_Backup_Codes extends Two_Factor_Provider { public function authentication_page( $user ) { require_once ABSPATH . '/wp-admin/includes/template.php'; - $code_length = $this->get_backup_code_length( $user ); + $code_length = $this->get_backup_code_length( $user ); $code_placeholder = str_repeat( 'X', $code_length ); + ?> +

+

+ +

+ + generate_token( $user->ID ); + $token = $this->generate_token( $user->ID ); + $remote_ip = $this->get_client_ip(); + $ttl_minutes = (int) ceil( $this->user_token_ttl( $user->ID ) / MINUTE_IN_SECONDS ); - /* translators: %s: site name */ - $subject = wp_strip_all_tags( sprintf( __( 'Your login confirmation code for %s', 'two-factor' ), wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ) ) ); - /* translators: %s: token */ - $message = wp_strip_all_tags( sprintf( __( 'Enter %s to log in.', 'two-factor' ), $token ) ); + $subject = wp_strip_all_tags( + sprintf( + /* translators: %s: site name */ + __( '[%s] Login confirmation code', 'two-factor' ), + wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ) + ) + ); + + $message_parts = array( + __( 'Please complete the login by entering the verification code below:', 'two-factor' ), + $token, + sprintf( + /* translators: %d: number of minutes */ + __( 'This code will expire in %d minutes.', 'two-factor' ), + $ttl_minutes + ), + sprintf( + /* translators: %1$s: IP address of user, %2$s: user login */ + __( 'A user from IP address %1$s has successfully authenticated as %2$s. If this wasn\'t you, please change your password.', 'two-factor' ), + $remote_ip, + $user->user_login + ), + ); + + $message = wp_strip_all_tags( implode( "\n\n", $message_parts ) ); /** - * Filter the token email subject. + * Filters the token email subject. + * + * @since 0.5.2 * * @param string $subject The email subject line. * @param int $user_id The ID of the user. @@ -259,7 +319,9 @@ class Two_Factor_Email extends Two_Factor_Provider { $subject = apply_filters( 'two_factor_token_email_subject', $subject, $user->ID ); /** - * Filter the token email message. + * Filters the token email message. + * + * @since 0.5.2 * * @param string $message The email message. * @param string $token The token. @@ -286,30 +348,33 @@ class Two_Factor_Email extends Two_Factor_Provider { $this->generate_and_email_token( $user ); } - $token_length = $this->get_token_length(); + $token_length = $this->get_token_length(); $token_placeholder = str_repeat( 'X', $token_length ); require_once ABSPATH . '/wp-admin/includes/template.php'; ?> +

+

-

+ +

- + ID ) && isset( $_REQUEST[ self::INPUT_NAME_RESEND_CODE ] ) ) { + if ( isset( $user->ID ) && isset( $_REQUEST[ self::INPUT_NAME_RESEND_CODE ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- non-distructive option that relies on user state. $this->generate_and_email_token( $user ); return true; } @@ -368,7 +435,7 @@ class Two_Factor_Email extends Two_Factor_Provider { public function user_options( $user ) { $email = $user->user_email; ?> -
+

-

+

wp_strip_all_tags( __( 'Name', 'two-factor' ) ), - 'added' => wp_strip_all_tags( __( 'Added', 'two-factor' ) ), - 'last_used' => wp_strip_all_tags( __( 'Last Used', 'two-factor' ) ), - ); - } - - /** - * Prepares the list of items for displaying. - * - * @since 0.1-dev - */ - public function prepare_items() { - $columns = $this->get_columns(); - $hidden = array(); - $sortable = array(); - $primary = 'name'; - $this->_column_headers = array( $columns, $hidden, $sortable, $primary ); - } - - /** - * Generates content for a single row of the table - * - * @since 0.1-dev - * @access protected - * - * @param object $item The current item. - * @param string $column_name The current column name. - * @return string - */ - protected function column_default( $item, $column_name ) { - switch ( $column_name ) { - case 'name': - $out = ''; - - $actions = array( - 'rename hide-if-no-js' => Two_Factor_FIDO_U2F_Admin::rename_link( $item ), - 'delete' => Two_Factor_FIDO_U2F_Admin::delete_link( $item ), - ); - - return esc_html( $item->name ) . $out . self::row_actions( $actions ); - case 'added': - return gmdate( get_option( 'date_format', 'r' ), $item->added ); - case 'last_used': - return gmdate( get_option( 'date_format', 'r' ), $item->last_used ); - default: - return 'WTF^^?'; - } - } - - /** - * Generates custom table navigation to prevent conflicting nonces. - * - * @since 0.1-dev - * @access protected - * - * @param string $which The location of the bulk actions: 'top' or 'bottom'. - */ - protected function display_tablenav( $which ) { - // Not used for the Security key list. - } - - /** - * Generates content for a single row of the table - * - * @since 0.1-dev - * @access public - * - * @param object $item The current item. - */ - public function single_row( $item ) { - ?> - - single_row_columns( $item ); ?> - - - - - - - - -
- getRegisterData( $security_keys ); - list( $req,$sigs ) = $data; - - update_user_meta( $user_id, self::REGISTER_DATA_USER_META_KEY, $req ); - } catch ( Exception $e ) { - return false; - } - - wp_enqueue_style( - 'fido-u2f-admin', - plugins_url( 'css/fido-u2f-admin.css', __FILE__ ), - null, - self::asset_version() - ); - - wp_enqueue_script( - 'fido-u2f-admin', - plugins_url( 'js/fido-u2f-admin.js', __FILE__ ), - array( 'jquery', 'fido-u2f-api' ), - self::asset_version(), - true - ); - - /** - * Pass a U2F challenge and user data to our scripts - */ - - $translation_array = array( - 'user_id' => $user_id, - 'register' => array( - 'request' => $req, - 'sigs' => $sigs, - ), - 'text' => array( - 'insert' => esc_html__( 'Now insert (and tap) your Security Key.', 'two-factor' ), - 'error' => esc_html__( 'U2F request failed.', 'two-factor' ), - 'error_codes' => array( - // Map u2f.ErrorCodes to error messages. - 0 => esc_html__( 'Request OK.', 'two-factor' ), - 1 => esc_html__( 'Other U2F error.', 'two-factor' ), - 2 => esc_html__( 'Bad U2F request.', 'two-factor' ), - 3 => esc_html__( 'Unsupported U2F configuration.', 'two-factor' ), - 4 => esc_html__( 'U2F device ineligible.', 'two-factor' ), - 5 => esc_html__( 'U2F request timeout reached.', 'two-factor' ), - ), - 'u2f_not_supported' => esc_html__( 'FIDO U2F appears to be not supported by your web browser. Try using Google Chrome or Firefox.', 'two-factor' ), - ), - ); - - wp_localize_script( - 'fido-u2f-admin', - 'u2fL10n', - $translation_array - ); - - /** - * Script for admin UI - */ - - wp_enqueue_script( - 'inline-edit-key', - plugins_url( 'js/fido-u2f-admin-inline-edit.js', __FILE__ ), - array( 'jquery' ), - self::asset_version(), - true - ); - - wp_localize_script( - 'inline-edit-key', - 'inlineEditL10n', - array( - 'error' => esc_html__( 'Error while saving the changes.', 'two-factor' ), - ) - ); - } - - /** - * Return the current asset version number. - * - * Added as own helper to allow swapping the implementation once we inject - * it as a dependency. - * - * @return string - */ - protected static function asset_version() { - return Two_Factor_FIDO_U2F::asset_version(); - } - - /** - * Display the security key section in a users profile. - * - * This executes during the `show_user_security_settings` action. - * - * @since 0.1-dev - * - * @access public - * @static - * - * @param WP_User $user WP_User object of the logged-in user. - */ - public static function show_user_profile( $user ) { - if ( ! Two_Factor_FIDO_U2F::is_supported_for_user( $user ) ) { - return; - } - - wp_nonce_field( "user_security_keys-{$user->ID}", '_nonce_user_security_keys' ); - $new_key = false; - - $security_keys = Two_Factor_FIDO_U2F::get_security_keys( $user->ID ); - if ( $security_keys ) { - foreach ( $security_keys as &$security_key ) { - if ( property_exists( $security_key, 'new' ) ) { - $new_key = true; - unset( $security_key->new ); - - // If we've got a new one, update the db record to not save it there any longer. - Two_Factor_FIDO_U2F::update_security_key( $user->ID, $security_key ); - } - } - unset( $security_key ); - } - - ?> -
-

- - -

- -

- - -
- - - - - -
- - -
-

-
- - -

- - items = $security_keys; - $u2f_list_table->prepare_items(); - $u2f_list_table->display(); - $u2f_list_table->inline_edit(); - ?> -
- doRegister( get_user_meta( $user_id, self::REGISTER_DATA_USER_META_KEY, true ), $response ); - $reg->new = true; - - Two_Factor_FIDO_U2F::add_security_key( $user_id, $reg ); - } catch ( Exception $e ) { - return; - } - - delete_user_meta( $user_id, self::REGISTER_DATA_USER_META_KEY ); - - wp_safe_redirect( - add_query_arg( - array( - 'new_app_pass' => 1, - ), - wp_get_referer() - ) . '#security-keys-section' - ); - exit; - } - } - - /** - * Catch the delete security key request. - * - * This executes during the `load-profile.php` & `load-user-edit.php` actions. - * - * @since 0.1-dev - * - * @access public - * @static - */ - public static function catch_delete_security_key() { - $user_id = Two_Factor_Core::current_user_being_edited(); - - if ( ! empty( $user_id ) && ! empty( $_REQUEST['delete_security_key'] ) ) { - $slug = $_REQUEST['delete_security_key']; - - check_admin_referer( "delete_security_key-{$slug}", '_nonce_delete_security_key' ); - - Two_Factor_FIDO_U2F::delete_security_key( $user_id, $slug ); - - wp_safe_redirect( remove_query_arg( 'new_app_pass', wp_get_referer() ) . '#security-keys-section' ); - exit; - } - } - - /** - * Generate a link to rename a specified security key. - * - * @since 0.1-dev - * - * @access public - * @static - * - * @param array $item The current item. - * @return string - */ - public static function rename_link( $item ) { - return sprintf( '%s', esc_html__( 'Rename', 'two-factor' ) ); - } - - /** - * Generate a link to delete a specified security key. - * - * @since 0.1-dev - * - * @access public - * @static - * - * @param array $item The current item. - * @return string - */ - public static function delete_link( $item ) { - $delete_link = add_query_arg( 'delete_security_key', $item->keyHandle ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase - $delete_link = wp_nonce_url( $delete_link, "delete_security_key-{$item->keyHandle}", '_nonce_delete_security_key' ); - return sprintf( '%2$s', esc_url( $delete_link ), esc_html__( 'Delete', 'two-factor' ) ); - } - - /** - * Ajax handler for quick edit saving for a security key. - * - * @since 0.1-dev - * - * @access public - * @static - */ - public static function wp_ajax_inline_save() { - check_ajax_referer( 'keyinlineeditnonce', '_inline_edit' ); - - require_once TWO_FACTOR_DIR . 'providers/class-two-factor-fido-u2f-admin-list-table.php'; - $wp_list_table = new Two_Factor_FIDO_U2F_Admin_List_Table(); - - if ( ! isset( $_POST['keyHandle'] ) ) { - wp_die(); - } - - $user_id = Two_Factor_Core::current_user_being_edited(); - $security_keys = Two_Factor_FIDO_U2F::get_security_keys( $user_id ); - if ( ! $security_keys ) { - wp_die(); - } - - foreach ( $security_keys as &$key ) { - if ( $key->keyHandle === $_POST['keyHandle'] ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase - break; - } - } - - $key->name = $_POST['name']; - - $updated = Two_Factor_FIDO_U2F::update_security_key( $user_id, $key ); - if ( ! $updated ) { - wp_die( esc_html__( 'Item not updated.', 'two-factor' ) ); - } - $wp_list_table->single_row( $key ); - wp_die(); - } -} diff --git a/wp-content/plugins/two-factor/providers/class-two-factor-fido-u2f.php b/wp-content/plugins/two-factor/providers/class-two-factor-fido-u2f.php deleted file mode 100644 index cd569997..00000000 --- a/wp-content/plugins/two-factor/providers/class-two-factor-fido-u2f.php +++ /dev/null @@ -1,404 +0,0 @@ - -

- ID ); - $data = self::$u2f->getAuthenticateData( $keys ); - update_user_meta( $user->ID, self::AUTH_DATA_USER_META_KEY, $data ); - } catch ( Exception $e ) { - ?> -

- $data, - ) - ); - - wp_enqueue_script( 'fido-u2f-login' ); - - ?> -

- - ID, self::AUTH_DATA_USER_META_KEY, true ); - - $response = json_decode( stripslashes( $_REQUEST['u2f_response'] ) ); - - $keys = self::get_security_keys( $user->ID ); - - try { - $reg = self::$u2f->doAuthenticate( $requests, $keys, $response ); - - $reg->last_used = time(); - - self::update_security_key( $user->ID, $reg ); - - return true; - } catch ( Exception $e ) { - return false; - } - } - - /** - * Whether this Two Factor provider is configured and available for the user specified. - * - * @since 0.1-dev - * - * @param WP_User $user WP_User object of the logged-in user. - * @return boolean - */ - public function is_available_for_user( $user ) { - return (bool) self::get_security_keys( $user->ID ); - } - - /** - * Inserts markup at the end of the user profile field for this provider. - * - * @since 0.1-dev - * - * @param WP_User $user WP_User object of the logged-in user. - */ - public function user_options( $user ) { - ?> -

- -

- keyHandle ) // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase - || ! property_exists( $register, 'publicKey' ) || empty( $register->publicKey ) // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase - || ! property_exists( $register, 'certificate' ) || empty( $register->certificate ) - || ! property_exists( $register, 'counter' ) || ( -1 > $register->counter ) - ) { - return false; - } - - $register = array( - 'keyHandle' => $register->keyHandle, // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase - 'publicKey' => $register->publicKey, // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase - 'certificate' => $register->certificate, - 'counter' => $register->counter, - ); - - $register['name'] = __( 'New Security Key', 'two-factor' ); - $register['added'] = time(); - $register['last_used'] = $register['added']; - - return add_user_meta( $user_id, self::REGISTERED_KEY_USER_META_KEY, $register ); - } - - /** - * Retrieve registered security keys for a user. - * - * @since 0.1-dev - * - * @param int $user_id User ID. - * @return array|bool Array of keys on success, false on failure. - */ - public static function get_security_keys( $user_id ) { - if ( ! is_numeric( $user_id ) ) { - return false; - } - - $keys = get_user_meta( $user_id, self::REGISTERED_KEY_USER_META_KEY ); - if ( $keys ) { - foreach ( $keys as &$key ) { - $key = (object) $key; - } - unset( $key ); - } - - return $keys; - } - - /** - * Update registered security key. - * - * Use the $prev_value parameter to differentiate between meta fields with the - * same key and user ID. - * - * If the meta field for the user does not exist, it will be added. - * - * @since 0.1-dev - * - * @param int $user_id User ID. - * @param object $data The data of registered security key. - * @return int|bool Meta ID if the key didn't exist, true on successful update, false on failure. - */ - public static function update_security_key( $user_id, $data ) { - if ( ! is_numeric( $user_id ) ) { - return false; - } - - if ( - ! is_object( $data ) - || ! property_exists( $data, 'keyHandle' ) || empty( $data->keyHandle ) // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase - || ! property_exists( $data, 'publicKey' ) || empty( $data->publicKey ) // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase - || ! property_exists( $data, 'certificate' ) || empty( $data->certificate ) - || ! property_exists( $data, 'counter' ) || ( -1 > $data->counter ) - ) { - return false; - } - - $keys = self::get_security_keys( $user_id ); - if ( $keys ) { - foreach ( $keys as $key ) { - if ( $key->keyHandle === $data->keyHandle ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase - return update_user_meta( $user_id, self::REGISTERED_KEY_USER_META_KEY, (array) $data, (array) $key ); - } - } - } - - return self::add_security_key( $user_id, $data ); - } - - /** - * Remove registered security key matching criteria from a user. - * - * @since 0.1-dev - * - * @param int $user_id User ID. - * @param string $keyHandle Optional. Key handle. - * @return bool True on success, false on failure. - */ - public static function delete_security_key( $user_id, $keyHandle = null ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase - global $wpdb; - - if ( ! is_numeric( $user_id ) ) { - return false; - } - - $user_id = absint( $user_id ); - if ( ! $user_id ) { - return false; - } - - $keyHandle = wp_unslash( $keyHandle ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase - $keyHandle = maybe_serialize( $keyHandle ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase - - $query = $wpdb->prepare( "SELECT umeta_id FROM {$wpdb->usermeta} WHERE meta_key = %s AND user_id = %d", self::REGISTERED_KEY_USER_META_KEY, $user_id ); - - if ( $keyHandle ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase - $key_handle_lookup = sprintf( ':"%s";s:', $keyHandle ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase - - $query .= $wpdb->prepare( - ' AND meta_value LIKE %s', - '%' . $wpdb->esc_like( $key_handle_lookup ) . '%' - ); - } - - $meta_ids = $wpdb->get_col( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared - if ( ! count( $meta_ids ) ) { - return false; - } - - foreach ( $meta_ids as $meta_id ) { - delete_metadata_by_mid( 'user', $meta_id ); - } - - return true; - } - - /** - * Return user meta keys to delete during plugin uninstall. - * - * @return array - */ - public static function uninstall_user_meta_keys() { - return array( - self::REGISTERED_KEY_USER_META_KEY, - self::AUTH_DATA_USER_META_KEY, - '_two_factor_fido_u2f_register_request', // From Two_Factor_FIDO_U2F_Admin which is not loaded during uninstall. - ); - } -} diff --git a/wp-content/plugins/two-factor/providers/class-two-factor-provider.php b/wp-content/plugins/two-factor/providers/class-two-factor-provider.php index b780c4a7..275cbae7 100644 --- a/wp-content/plugins/two-factor/providers/class-two-factor-provider.php +++ b/wp-content/plugins/two-factor/providers/class-two-factor-provider.php @@ -25,7 +25,7 @@ abstract class Two_Factor_Provider { $class_name = static::class; if ( ! isset( $instances[ $class_name ] ) ) { - $instances[ $class_name ] = new $class_name; + $instances[ $class_name ] = new $class_name(); } return $instances[ $class_name ]; @@ -37,7 +37,6 @@ abstract class Two_Factor_Provider { * @since 0.1-dev */ protected function __construct() { - return $this; } /** @@ -68,6 +67,8 @@ abstract class Two_Factor_Provider { * Prints the name of the provider. * * @since 0.1-dev + * + * @codeCoverageIgnore */ public function print_label() { echo esc_html( $this->get_label() ); @@ -98,6 +99,8 @@ abstract class Two_Factor_Provider { * Return `true` to prevent the authentication and render the * authentication page. * + * @since 0.2.0 + * * @param WP_User $user WP_User object of the logged-in user. * @return boolean */ @@ -118,6 +121,8 @@ abstract class Two_Factor_Provider { /** * Whether this Two Factor provider is configured and available for the user specified. * + * @since 0.7.0 + * * @param WP_User $user WP_User object of the logged-in user. * @return boolean */ @@ -126,6 +131,8 @@ abstract class Two_Factor_Provider { /** * If this provider should be available for the user. * + * @since 0.13.0 + * * @param WP_User|int $user WP_User object, user ID or null to resolve the current user. * * @return bool @@ -159,6 +166,8 @@ abstract class Two_Factor_Provider { /** * Sanitizes a numeric code to be used as an auth code. * + * @since 0.8.0 + * * @param string $field The _REQUEST field to check for the code. * @param int $length The valid expected length of the field. * @return false|string Auth code on success, false if the field is not set or not expected length. @@ -182,6 +191,8 @@ abstract class Two_Factor_Provider { /** * Return the user meta keys that need to be deletated on plugin uninstall. * + * @since 0.10.0 + * * @return array */ public static function uninstall_user_meta_keys() { @@ -191,6 +202,8 @@ abstract class Two_Factor_Provider { /** * Return the option keys that need to be deleted on plugin uninstall. * + * @since 0.10.0 + * * Note: this method doesn't have access to the instantiated provider object. * * @return array diff --git a/wp-content/plugins/two-factor/providers/class-two-factor-totp.php b/wp-content/plugins/two-factor/providers/class-two-factor-totp.php index 9b3dd084..8c47d74a 100644 --- a/wp-content/plugins/two-factor/providers/class-two-factor-totp.php +++ b/wp-content/plugins/two-factor/providers/class-two-factor-totp.php @@ -7,6 +7,8 @@ /** * Class Two_Factor_Totp + * + * @since 0.2.0 */ class Two_Factor_Totp extends Two_Factor_Provider { @@ -40,6 +42,8 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Class constructor. Sets up hooks, etc. * + * @since 0.2.0 + * * @codeCoverageIgnore */ protected function __construct() { @@ -51,9 +55,40 @@ class Two_Factor_Totp extends Two_Factor_Provider { parent::__construct(); } + /** + * Timestamp returned by time() + * + * @var int $now + */ + private static $now; + + /** + * Override time() in the current object for testing. + * + * @since 0.15.0 + * + * @return int + */ + private static function time() { + return self::$now ? self::$now : time(); + } + + /** + * Set up the internal state of time() invocations for deterministic generation. + * + * @since 0.15.0 + * + * @param int $now Timestamp to use when overriding time(). + */ + public static function set_time( $now ) { + self::$now = $now; + } + /** * Register the rest-api endpoints required for this provider. * + * @since 0.8.0 + * * @codeCoverageIgnore */ public function register_rest_routes() { @@ -64,7 +99,7 @@ class Two_Factor_Totp extends Two_Factor_Provider { array( 'methods' => WP_REST_Server::DELETABLE, 'callback' => array( $this, 'rest_delete_totp' ), - 'permission_callback' => function( $request ) { + 'permission_callback' => function ( $request ) { return Two_Factor_Core::rest_api_can_edit_user_and_update_two_factor_options( $request['user_id'] ); }, 'args' => array( @@ -77,20 +112,20 @@ class Two_Factor_Totp extends Two_Factor_Provider { array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'rest_setup_totp' ), - 'permission_callback' => function( $request ) { + 'permission_callback' => function ( $request ) { return Two_Factor_Core::rest_api_can_edit_user_and_update_two_factor_options( $request['user_id'] ); }, 'args' => array( - 'user_id' => array( + 'user_id' => array( 'required' => true, 'type' => 'integer', ), - 'key' => array( + 'key' => array( 'type' => 'string', 'default' => '', 'validate_callback' => null, // Note: validation handled in ::rest_setup_totp(). ), - 'code' => array( + 'code' => array( 'type' => 'string', 'default' => '', 'validate_callback' => null, // Note: validation handled in ::rest_setup_totp(). @@ -108,6 +143,8 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Returns the name of the provider. + * + * @since 0.2.0 */ public function get_label() { return _x( 'Authenticator App', 'Provider Label', 'two-factor' ); @@ -125,7 +162,10 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Enqueue scripts * + * @since 0.8.0 + * * @codeCoverageIgnore + * @param string $hook_suffix Hook suffix. */ public function enqueue_assets( $hook_suffix ) { $environment_prefix = file_exists( TWO_FACTOR_DIR . '/dist' ) ? '/dist' : ''; @@ -137,37 +177,57 @@ class Two_Factor_Totp extends Two_Factor_Provider { TWO_FACTOR_VERSION, true ); + + wp_register_script( + 'two-factor-totp-qrcode', + plugins_url( 'js/totp-admin-qrcode.js', __FILE__ ), + array( 'two-factor-qr-code-generator' ), + TWO_FACTOR_VERSION, + true + ); + + wp_register_script( + 'two-factor-totp-admin', + plugins_url( 'js/totp-admin.js', __FILE__ ), + array( 'jquery', 'wp-api-request', 'two-factor-qr-code-generator' ), + TWO_FACTOR_VERSION, + true + ); } /** * Rest API endpoint for handling deactivation of TOTP. * + * @since 0.8.0 + * * @param WP_REST_Request $request The Rest Request object. - * @return array Success array. + * @return WP_Error|array Array of data on success, WP_Error on error. */ public function rest_delete_totp( $request ) { $user_id = $request['user_id']; $user = get_user_by( 'id', $user_id ); - $this->delete_user_totp_key( $user_id ); - if ( ! Two_Factor_Core::disable_provider_for_user( $user_id, 'Two_Factor_Totp' ) ) { return new WP_Error( 'db_error', __( 'Unable to disable TOTP provider for this user.', 'two-factor' ), array( 'status' => 500 ) ); } + $this->delete_user_totp_key( $user_id ); + ob_start(); $this->user_two_factor_options( $user ); $html = ob_get_clean(); - return [ + return array( 'success' => true, 'html' => $html, - ]; + ); } /** * REST API endpoint for setting up TOTP. * + * @since 0.8.0 + * * @param WP_REST_Request $request The Rest Request object. * @return WP_Error|array Array of data on success, WP_Error on error. */ @@ -198,15 +258,17 @@ class Two_Factor_Totp extends Two_Factor_Provider { $this->user_two_factor_options( $user ); $html = ob_get_clean(); - return [ + return array( 'success' => true, 'html' => $html, - ]; + ); } /** * Generates a URL that can be used to create a QR code. * + * @since 0.8.0 + * * @param WP_User $user The user to generate a URL for. * @param string $secret_key The secret key. * @@ -216,21 +278,27 @@ class Two_Factor_Totp extends Two_Factor_Provider { $issuer = get_bloginfo( 'name', 'display' ); /** - * Filter the Issuer for the TOTP. + * Filters the Issuer for the TOTP. * * Must follow the TOTP format for a "issuer". Do not URL Encode. * + * @since 0.8.0 + * * @see https://github.com/google/google-authenticator/wiki/Key-Uri-Format#issuer + * * @param string $issuer The issuer for TOTP. */ $issuer = apply_filters( 'two_factor_totp_issuer', $issuer ); /** - * Filter the Label for the TOTP. + * Filters the Label for the TOTP. * * Must follow the TOTP format for a "label". Do not URL Encode. * + * @since 0.4.7 + * * @see https://github.com/google/google-authenticator/wiki/Key-Uri-Format#label + * * @param string $totp_title The label for the TOTP. * @param WP_User $user The User object. * @param string $issuer The issuer of the TOTP. This should be the prefix of the result. @@ -246,16 +314,19 @@ class Two_Factor_Totp extends Two_Factor_Provider { ); /** - * Filter the TOTP generated URL. + * Filters the TOTP generated URL. * * Must follow the TOTP format. Do not URL Encode. * + * @since 0.8.0 + * * @see https://github.com/google/google-authenticator/wiki/Key-Uri-Format + * * @param string $totp_url The TOTP URL. * @param WP_User $user The user object. */ $totp_url = apply_filters( 'two_factor_totp_url', $totp_url, $user ); - $totp_url = esc_url( $totp_url, array( 'otpauth' ) ); + $totp_url = esc_url_raw( $totp_url, array( 'otpauth' ) ); return $totp_url; } @@ -263,6 +334,8 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Display TOTP options on the user settings page. * + * @since 0.2.0 + * * @param WP_User $user The current user being edited. * @return void * @@ -275,132 +348,92 @@ class Two_Factor_Totp extends Two_Factor_Provider { $key = $this->get_user_totp_key( $user->ID ); - wp_enqueue_script( 'two-factor-qr-code-generator' ); - wp_enqueue_script( 'wp-api-request' ); - wp_enqueue_script( 'jquery' ); + wp_localize_script( + 'two-factor-totp-admin', + 'twoFactorTotpAdmin', + array( + 'restPath' => Two_Factor_Core::REST_NAMESPACE . '/totp', + 'userId' => $user->ID, + 'qrCodeAriaLabel' => __( 'Authenticator App QR Code', 'two-factor' ), + ) + ); + wp_enqueue_script( 'two-factor-totp-admin' ); ?>
generate_key(); $totp_url = $this->generate_qr_code_url( $user, $key ); - ?> -

- +

-

- - Loading... - - -

- - - - - -

- -

-

- - - -

- - - +
    +
  1. + +
  2. +
  3. + +

    + + + + +

    +

    + +

    +

    + +

    +
  4. +
  5. +

    +

    + + + +

    +

    + %2$s (%3$s)', + esc_attr( wp_date( 'c' ) ), + esc_html( wp_date( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ) ) ), + esc_html( wp_timezone_string() ) + ) + ); + ?> +

    +
  6. +
+ $totp_url, + 'qrCodeLabel' => __( 'Authenticator App QR Code', 'two-factor' ), + ) + ); + wp_enqueue_script( 'two-factor-totp-qrcode' ); + ?>

@@ -409,24 +442,6 @@ class Two_Factor_Totp extends Two_Factor_Provider { -

@@ -436,6 +451,8 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Get the TOTP secret key for a user. * + * @since 0.2.0 + * * @param int $user_id User ID. * * @return string @@ -447,6 +464,8 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Set the TOTP secret key for a user. * + * @since 0.2.0 + * * @param int $user_id User ID. * @param string $key TOTP secret key. * @@ -459,6 +478,8 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Delete the TOTP secret key for a user. * + * @since 0.2.0 + * * @param int $user_id User ID. * * @return boolean If the key was deleted successfully. @@ -471,6 +492,8 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Check if the TOTP secret key has a proper format. * + * @since 0.2.0 + * * @param string $key TOTP secret key. * * @return boolean @@ -488,6 +511,8 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Validates authentication. * + * @since 0.2.0 + * * @param WP_User $user WP_User object of the logged-in user. * * @return bool Whether the user gave a valid code @@ -504,6 +529,8 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Validates an authentication code for a given user, preventing re-use and older TOTP keys. * + * @since 0.8.0 + * * @param WP_User $user WP_User object of the logged-in user. * @param int $code The TOTP token to validate. * @@ -535,48 +562,70 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Checks if a given code is valid for a given key, allowing for a certain amount of time drift. * + * @since 0.15.0 + * * @param string $key The share secret key to use. * @param string $authcode The code to test. + * @param string $hash The hash used to calculate the code. + * @param int $time_step The size of the time step. * * @return bool Whether the code is valid within the time frame. */ - public static function is_valid_authcode( $key, $authcode ) { - return (bool) self::get_authcode_valid_ticktime( $key, $authcode ); + public static function is_valid_authcode( $key, $authcode, $hash = self::DEFAULT_CRYPTO, $time_step = self::DEFAULT_TIME_STEP_SEC ) { + return (bool) self::get_authcode_valid_ticktime( $key, $authcode, $hash, $time_step ); } /** * Checks if a given code is valid for a given key, allowing for a certain amount of time drift. * + * @since 0.15.0 + * * @param string $key The share secret key to use. * @param string $authcode The code to test. + * @param string $hash The hash used to calculate the code. + * @param int $time_step The size of the time step. * * @return false|int Returns the timestamp of the authcode on success, False otherwise. */ - public static function get_authcode_valid_ticktime( $key, $authcode ) { + public static function get_authcode_valid_ticktime( $key, $authcode, $hash = self::DEFAULT_CRYPTO, $time_step = self::DEFAULT_TIME_STEP_SEC ) { /** * Filter the maximum ticks to allow when checking valid codes. * * Ticks are the allowed offset from the correct time in 30 second increments, - * so the default of 4 allows codes that are two minutes to either side of server time + * so the default of 4 allows codes that are two minutes to either side of server time. * + * @since 0.2.0 * @deprecated 0.7.0 Use {@see 'two_factor_totp_time_step_allowance'} instead. + * * @param int $max_ticks Max ticks of time correction to allow. Default 4. */ $max_ticks = apply_filters_deprecated( 'two-factor-totp-time-step-allowance', array( self::DEFAULT_TIME_STEP_ALLOWANCE ), '0.7.0', 'two_factor_totp_time_step_allowance' ); + /** + * Filters the maximum ticks to allow when checking valid codes. + * + * Ticks are the allowed offset from the correct time in 30 second increments, + * so the default of 4 allows codes that are two minutes to either side of server time. + * + * @since 0.7.0 + * + * @param int $max_ticks Max ticks of time correction to allow. Default 4. + */ $max_ticks = apply_filters( 'two_factor_totp_time_step_allowance', self::DEFAULT_TIME_STEP_ALLOWANCE ); // Array of all ticks to allow, sorted using absolute value to test closest match first. $ticks = range( - $max_ticks, $max_ticks ); usort( $ticks, array( __CLASS__, 'abssort' ) ); - $time = floor( time() / self::DEFAULT_TIME_STEP_SEC ); + $time = (int) floor( self::time() / $time_step ); + + $digits = strlen( $authcode ); foreach ( $ticks as $offset ) { - $log_time = $time + $offset; - if ( hash_equals( self::calc_totp( $key, $log_time ), $authcode ) ) { + $log_time = (int) ( $time + $offset ); + if ( hash_equals( self::calc_totp( $key, $log_time, $digits, $hash, $time_step ), $authcode ) ) { // Return the tick timestamp. - return $log_time * self::DEFAULT_TIME_STEP_SEC; + return (int) ( $log_time * self::DEFAULT_TIME_STEP_SEC ); } } @@ -586,6 +635,8 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Generates key * + * @since 0.2.0 + * * @param int $bitsize Nume of bits to use for key. * * @return string $bitsize long string composed of available base32 chars. @@ -598,58 +649,94 @@ class Two_Factor_Totp extends Two_Factor_Provider { } /** - * Pack stuff + * Pack stuff. We're currently only using this to pack integers, however the generic `pack` method can handle mixed. * - * @param string $value The value to be packed. + * @since 0.2.0 + * + * @param int $value The value to be packed. * * @return string Binary packed string. */ - public static function pack64( $value ) { - // 64bit mode (PHP_INT_SIZE == 8). - if ( PHP_INT_SIZE >= 8 ) { - // If we're on PHP 5.6.3+ we can use the new 64bit pack functionality. - if ( version_compare( PHP_VERSION, '5.6.3', '>=' ) && PHP_INT_SIZE >= 8 ) { - return pack( 'J', $value ); // phpcs:ignore PHPCompatibility.ParameterValues.NewPackFormat.NewFormatFound - } - $highmap = 0xffffffff << 32; - $higher = ( $value & $highmap ) >> 32; - } else { - /* - * 32bit PHP can't shift 32 bits like that, so we have to assume 0 for the higher - * and not pack anything beyond it's limits. - */ - $higher = 0; + public static function pack64( int $value ): string { + // Native 64-bit support (modern PHP on 64-bit builds). + if ( 8 === PHP_INT_SIZE ) { + return pack( 'J', $value ); } - - $lowmap = 0xffffffff; - $lower = $value & $lowmap; - + + // 32-bit PHP fallback + $higher = ( $value >> 32 ) & 0xFFFFFFFF; + $lower = $value & 0xFFFFFFFF; + return pack( 'NN', $higher, $lower ); } + /** + * Pad a short secret with bytes from the same until it's the correct length + * for hashing. + * + * @since 0.15.0 + * + * @param string $secret Secret key to pad. + * @param int $length Byte length of the desired padded secret. + * + * @throws InvalidArgumentException If the secret or length are invalid. + * + * @return string + */ + protected static function pad_secret( $secret, $length ) { + if ( empty( $secret ) ) { + throw new InvalidArgumentException( 'Secret must be non-empty!' ); + } + + $length = intval( $length ); + if ( $length <= 0 ) { + throw new InvalidArgumentException( 'Padding length must be non-zero' ); + } + + return str_pad( $secret, $length, $secret, STR_PAD_RIGHT ); + } + /** * Calculate a valid code given the shared secret key * + * @since 0.2.0 + * * @param string $key The shared secret key to use for calculating code. * @param mixed $step_count The time step used to calculate the code, which is the floor of time() divided by step size. * @param int $digits The number of digits in the returned code. * @param string $hash The hash used to calculate the code. * @param int $time_step The size of the time step. * + * @throws InvalidArgumentException If the hash type is invalid. + * * @return string The totp code */ public static function calc_totp( $key, $step_count = false, $digits = self::DEFAULT_DIGIT_COUNT, $hash = self::DEFAULT_CRYPTO, $time_step = self::DEFAULT_TIME_STEP_SEC ) { $secret = self::base32_decode( $key ); + switch ( $hash ) { + case 'sha1': + $secret = self::pad_secret( $secret, 20 ); + break; + case 'sha256': + $secret = self::pad_secret( $secret, 32 ); + break; + case 'sha512': + $secret = self::pad_secret( $secret, 64 ); + break; + default: + throw new InvalidArgumentException( 'Invalid hash type specified!' ); + } + if ( false === $step_count ) { - $step_count = floor( time() / $time_step ); + $step_count = floor( self::time() / $time_step ); } $timestamp = self::pack64( $step_count ); $hash = hash_hmac( $hash, $timestamp, $secret, true ); - $offset = ord( $hash[19] ) & 0xf; + $offset = ord( $hash[ strlen( $hash ) - 1 ] ) & 0xf; $code = ( ( ( ord( $hash[ $offset + 0 ] ) & 0x7f ) << 24 ) | @@ -664,6 +751,8 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Whether this Two Factor provider is configured and available for the user specified. * + * @since 0.2.0 + * * @param WP_User $user WP_User object of the logged-in user. * * @return boolean @@ -678,6 +767,8 @@ class Two_Factor_Totp extends Two_Factor_Provider { /** * Prints the form that prompts the user to authenticate. * + * @since 0.2.0 + * * @param WP_User $user WP_User object of the logged-in user. * * @codeCoverageIgnore @@ -685,41 +776,48 @@ class Two_Factor_Totp extends Two_Factor_Provider { public function authentication_page( $user ) { require_once ABSPATH . '/wp-admin/includes/template.php'; ?> +

+

- +

- + ' ).val( csvCodes ).css( { position: 'absolute', left: '-9999px' } ); + $( 'body' ).append( $temp ); + $temp[0].select(); + document.execCommand( 'copy' ); + $temp.remove(); + } ); + + $( '.button-two-factor-backup-codes-generate' ).click( function() { + wp.apiRequest( { + method: 'POST', + path: twoFactorBackupCodes.restPath, + data: { + user_id: parseInt( twoFactorBackupCodes.userId, 10 ) + } + } ).then( function( response ) { + var $codesList = $( '.two-factor-backup-codes-unused-codes' ), + i; + + $( '.two-factor-backup-codes-wrapper' ).show(); + $codesList.html( '' ); + $codesList.css( { 'column-count': 2, 'column-gap': '80px', 'max-width': '420px' } ); + $( '.two-factor-backup-codes-wrapper' ).data( 'codesCsv', response.codes.join( ',' ) ); + + // Append the codes. + for ( i = 0; i < response.codes.length; i++ ) { + $codesList.append( '
  • ' + response.codes[ i ] + '
  • ' ); + } + + // Update counter. + $( '.two-factor-backup-codes-count' ).html( response.i18n.count ); + $( '#two-factor-backup-codes-download-link' ).attr( 'href', response.download_link ); + } ); + } ); +}( jQuery ) ); diff --git a/wp-content/plugins/two-factor/providers/js/fido-u2f-admin-inline-edit.js b/wp-content/plugins/two-factor/providers/js/fido-u2f-admin-inline-edit.js deleted file mode 100644 index b7b0123e..00000000 --- a/wp-content/plugins/two-factor/providers/js/fido-u2f-admin-inline-edit.js +++ /dev/null @@ -1,150 +0,0 @@ -/* global window, document, jQuery, inlineEditL10n, ajaxurl */ -var inlineEditKey; - -( function( $ ) { - inlineEditKey = { - - init: function() { - var t = this, - row = $( '#security-keys-section #inline-edit' ); - - t.what = '#key-'; - - $( '#security-keys-section #the-list' ).on( 'click', 'a.editinline', function() { - inlineEditKey.edit( this ); - return false; - } ); - - // Prepare the edit row. - row.keyup( function( event ) { - if ( 27 === event.which ) { - return inlineEditKey.revert(); - } - } ); - - $( 'a.cancel', row ).click( function() { - return inlineEditKey.revert(); - } ); - - $( 'a.save', row ).click( function() { - return inlineEditKey.save( this ); - } ); - - $( 'input, select', row ).keydown( function( event ) { - if ( 13 === event.which ) { - return inlineEditKey.save( this ); - } - } ); - }, - - toggle: function( el ) { - var t = this; - - if ( 'none' === $( t.what + t.getId( el ) ).css( 'display' ) ) { - t.revert(); - } else { - t.edit( el ); - } - }, - - edit: function( id ) { - var editRow, rowData, val, - t = this; - t.revert(); - - if ( 'object' === typeof id ) { - id = t.getId( id ); - } - - editRow = $( '#inline-edit' ).clone( true ); - rowData = $( '#inline_' + id ); - - $( 'td', editRow ).attr( 'colspan', $( 'th:visible, td:visible', '#security-keys-section .widefat thead' ).length ); - - $( t.what + id ).hide().after( editRow ).after( '' ); - - val = $( '.name', rowData ); - val.find( 'img' ).replaceWith( function() { - return this.alt; - } ); - val = val.text(); - $( ':input[name="name"]', editRow ).val( val ); - - $( editRow ).attr( 'id', 'edit-' + id ).addClass( 'inline-editor' ).show(); - $( '.ptitle', editRow ).eq( 0 ).focus(); - - return false; - }, - - save: function( id ) { - var params, fields; - - if ( 'object' === typeof id ) { - id = this.getId( id ); - } - - $( '#security-keys-section table.widefat .spinner' ).addClass( 'is-active' ); - - params = { - action: 'inline-save-key', - keyHandle: id, - user_id: window.u2fL10n.user_id - }; - - fields = $( '#edit-' + id ).find( ':input' ).serialize(); - params = fields + '&' + $.param( params ); - - // Make ajax request. - $.post( ajaxurl, params, - function( r ) { - var row, newID; - $( '#security-keys-section table.widefat .spinner' ).removeClass( 'is-active' ); - - if ( r ) { - if ( -1 !== r.indexOf( '' )[0].submit.call( $( '#your-profile' )[0] ); - } ); - } ); -}( jQuery ) ); diff --git a/wp-content/plugins/two-factor/providers/js/fido-u2f-login.js b/wp-content/plugins/two-factor/providers/js/fido-u2f-login.js deleted file mode 100644 index 28295307..00000000 --- a/wp-content/plugins/two-factor/providers/js/fido-u2f-login.js +++ /dev/null @@ -1,16 +0,0 @@ -/* global window, u2f, u2fL10n, jQuery */ -( function( $ ) { - if ( ! window.u2fL10n ) { - window.console.error( 'u2fL10n is not defined' ); - return; - } - - u2f.sign( u2fL10n.request[0].appId, u2fL10n.request[0].challenge, u2fL10n.request, function( data ) { - if ( data.errorCode ) { - window.console.error( 'Registration Failed', data.errorCode ); - } else { - $( '#u2f_response' ).val( JSON.stringify( data ) ); - $( '#loginform' ).submit(); - } - } ); -}( jQuery ) ); diff --git a/wp-content/plugins/two-factor/providers/js/totp-admin-qrcode.js b/wp-content/plugins/two-factor/providers/js/totp-admin-qrcode.js new file mode 100644 index 00000000..bb2cf4ef --- /dev/null +++ b/wp-content/plugins/two-factor/providers/js/totp-admin-qrcode.js @@ -0,0 +1,35 @@ +/* global twoFactorTotpQrcode, qrcode, document, window */ +( function() { + var qrGenerator = function() { + /* + * 0 = Automatically select the version, to avoid going over the limit of URL + * length. + * L = Least amount of error correction, because it's not needed when scanning + * on a monitor, and it lowers the image size. + */ + var qr = qrcode( 0, 'L' ), + svg, + title; + + qr.addData( twoFactorTotpQrcode.totpUrl ); + qr.make(); + + document.querySelector( '#two-factor-qr-code a' ).innerHTML = qr.createSvgTag( 5 ); + + // For accessibility, markup the SVG with a title and role. + svg = document.querySelector( '#two-factor-qr-code a svg' ); + title = document.createElement( 'title' ); + + svg.setAttribute( 'role', 'img' ); + svg.setAttribute( 'aria-label', twoFactorTotpQrcode.qrCodeLabel ); + title.innerText = twoFactorTotpQrcode.qrCodeLabel; + svg.appendChild( title ); + }; + + // Run now if the document is loaded, otherwise on DOMContentLoaded. + if ( document.readyState === 'complete' ) { + qrGenerator(); + } else { + window.addEventListener( 'DOMContentLoaded', qrGenerator ); + } +}() ); diff --git a/wp-content/plugins/two-factor/providers/js/totp-admin.js b/wp-content/plugins/two-factor/providers/js/totp-admin.js new file mode 100644 index 00000000..4d59e800 --- /dev/null +++ b/wp-content/plugins/two-factor/providers/js/totp-admin.js @@ -0,0 +1,95 @@ +/* global twoFactorTotpAdmin, qrcode, wp, document, jQuery */ +( function( $ ) { + var generateQrCode = function( totpUrl ) { + var $qrLink = $( '#two-factor-qr-code a' ), + qr, + svg, + title; + + if ( ! $qrLink.length || typeof qrcode === 'undefined' ) { + return; + } + + qr = qrcode( 0, 'L' ); + + qr.addData( totpUrl ); + qr.make(); + $qrLink.html( qr.createSvgTag( 5 ) ); + + svg = $qrLink.find( 'svg' )[ 0 ]; + if ( svg ) { + var ariaLabel = ( typeof twoFactorTotpAdmin !== 'undefined' && twoFactorTotpAdmin && twoFactorTotpAdmin.qrCodeAriaLabel ) ? twoFactorTotpAdmin.qrCodeAriaLabel : 'Authenticator App QR Code'; + title = document.createElement( 'title' ); + svg.setAttribute( 'role', 'img' ); + svg.setAttribute( 'aria-label', ariaLabel ); + title.innerText = ariaLabel; + svg.appendChild( title ); + } + }; + + var checkbox = document.getElementById( 'enabled-Two_Factor_Totp' ); + + // Focus the auth code input when the checkbox is clicked. + if ( checkbox ) { + checkbox.addEventListener( 'click', function( e ) { + if ( e.target.checked ) { + document.getElementById( 'two-factor-totp-authcode' ).focus(); + } + } ); + } + + $( '.totp-submit' ).click( function( e ) { + var key = $( '#two-factor-totp-key' ).val(), + code = $( '#two-factor-totp-authcode' ).val(); + + e.preventDefault(); + + wp.apiRequest( { + method: 'POST', + path: twoFactorTotpAdmin.restPath, + data: { + user_id: parseInt( twoFactorTotpAdmin.userId, 10 ), + key: key, + code: code, + enable_provider: true + } + } ).fail( function( response, status ) { + var errorMessage = ( response && response.responseJSON && response.responseJSON.message ) || ( response && response.statusText ) || status || '', + $error = $( '#totp-setup-error' ); + + if ( ! $error.length ) { + $error = $( '

    ' ).insertAfter( $( '.totp-submit' ) ); + } + + $error.find( 'p' ).text( errorMessage ); + + $( '#enabled-Two_Factor_Totp' ).prop( 'checked', false ).trigger( 'change' ); + $( '#two-factor-totp-authcode' ).val( '' ); + } ).then( function( response ) { + $( '#enabled-Two_Factor_Totp' ).prop( 'checked', true ).trigger( 'change' ); + $( '#two-factor-totp-options' ).html( response.html ); + } ); + } ); + + $( '.button.reset-totp-key' ).click( function( e ) { + e.preventDefault(); + + wp.apiRequest( { + method: 'DELETE', + path: twoFactorTotpAdmin.restPath, + data: { + user_id: parseInt( twoFactorTotpAdmin.userId, 10 ) + } + } ).then( function( response ) { + var totpUrl; + + $( '#enabled-Two_Factor_Totp' ).prop( 'checked', false ); + $( '#two-factor-totp-options' ).html( response.html ); + + totpUrl = $( '#two-factor-qr-code a' ).attr( 'href' ); + if ( totpUrl ) { + generateQrCode( totpUrl ); + } + } ); + } ); +}( jQuery ) ); diff --git a/wp-content/plugins/two-factor/providers/js/two-factor-login-authcode.js b/wp-content/plugins/two-factor/providers/js/two-factor-login-authcode.js new file mode 100644 index 00000000..f7e6e7aa --- /dev/null +++ b/wp-content/plugins/two-factor/providers/js/two-factor-login-authcode.js @@ -0,0 +1,38 @@ +/* global document */ +( function() { + // Enforce numeric-only input for numeric inputmode elements. + var form = document.querySelector( '#loginform' ), + inputEl = document.querySelector( 'input.authcode[inputmode="numeric"]' ), + expectedLength = ( inputEl && inputEl.dataset ) ? inputEl.dataset.digits : 0, + spaceInserted = false; + + if ( inputEl ) { + inputEl.addEventListener( + 'input', + function() { + var value = this.value.replace( /[^0-9 ]/g, '' ).replace( /^\s+/, '' ), + submitControl; + + if ( ! spaceInserted && expectedLength && value.length === Math.floor( expectedLength / 2 ) ) { + value += ' '; + spaceInserted = true; + } else if ( spaceInserted && ! this.value ) { + spaceInserted = false; + } + + this.value = value; + + // Auto-submit if it's the expected length. + if ( expectedLength && value.replace( / /g, '' ).length === parseInt( expectedLength, 10 ) ) { + if ( form && typeof form.requestSubmit === 'function' ) { + form.requestSubmit(); + submitControl = form.querySelector( '[type="submit"]' ); + if ( submitControl ) { + submitControl.disabled = true; + } + } + } + } + ); + } +}() ); diff --git a/wp-content/plugins/two-factor/providers/js/two-factor-login.js b/wp-content/plugins/two-factor/providers/js/two-factor-login.js new file mode 100644 index 00000000..6526581f --- /dev/null +++ b/wp-content/plugins/two-factor/providers/js/two-factor-login.js @@ -0,0 +1,11 @@ +/* global document, setTimeout */ +( function() { + setTimeout( function() { + var d; + try { + d = document.getElementById( 'authcode' ); + d.value = ''; + d.focus(); + } catch ( e ) {} + }, 200 ); +}() ); diff --git a/wp-content/plugins/two-factor/readme.txt b/wp-content/plugins/two-factor/readme.txt index 8143c1c4..54cd2558 100644 --- a/wp-content/plugins/two-factor/readme.txt +++ b/wp-content/plugins/two-factor/readme.txt @@ -1,22 +1,87 @@ -=== Two-Factor === -Contributors: georgestephanis, valendesigns, stevenkword, extendwings, sgrant, aaroncampbell, johnbillion, stevegrunwell, netweb, kasparsd, alihusnainarshad, passoniate +=== Two Factor === +Contributors: georgestephanis, kasparsd, masteradhoc, valendesigns, stevenkword, extendwings, sgrant, aaroncampbell, johnbillion, stevegrunwell, netweb, alihusnainarshad, passoniate Tags: 2fa, mfa, totp, authentication, security -Tested up to: 6.7 -Stable tag: 0.13.0 +Tested up to: 6.9 +Stable tag: 0.16.0 License: GPL-2.0-or-later License URI: https://spdx.org/licenses/GPL-2.0-or-later.html -Enable Two-Factor Authentication (2FA) using time-based one-time passwords (TOTP), Universal 2nd Factor (U2F), email, and backup verification codes. +Enable Two-Factor Authentication (2FA) using time-based one-time passwords (TOTP), email, and backup verification codes. == Description == -Use the "Two-Factor Options" section under "Users" → "Your Profile" to enable and configure one or multiple two-factor authentication providers for your account: +The Two-Factor plugin adds an extra layer of security to your WordPress login by requiring users to provide a second form of authentication in addition to their password. This helps protect against unauthorized access even if passwords are compromised. -- Email codes -- Time Based One-Time Passwords (TOTP) -- FIDO Universal 2nd Factor (U2F) -- Backup Codes -- Dummy Method (only for testing purposes) +## Setup Instructions + +**Important**: Each user must individually configure their two-factor authentication settings. + +### For Individual Users + +1. **Navigate to your profile**: Go to "Users" → "Your Profile" in the WordPress admin +2. **Find Two-Factor Options**: Scroll down to the "Two-Factor Options" section +3. **Choose your methods**: Enable one or more authentication providers (noting a site admin may have hidden one or more so what is available could vary): + - **Authenticator App (TOTP)** - Use apps like Google Authenticator, Authy, or 1Password + - **Email Codes** - Receive one-time codes via email + - **Backup Codes** - Generate one-time backup codes for emergencies + - **Dummy Method** - For testing purposes only (requires WP_DEBUG) +4. **Configure each method**: Follow the setup instructions for each enabled provider +5. **Set primary method**: Choose which method to use as your default authentication +6. **Save changes**: Click "Update Profile" to save your settings + +### For Site Administrators + +- **Plugin settings**: The plugin provides a settings page under "Settings → Two-Factor" to configure which providers should be disabled site-wide. +- **User management**: Administrators can configure 2FA for other users by editing their profiles +- **Security recommendations**: Encourage users to enable backup methods to prevent account lockouts + +## Available Authentication Methods + +### Authenticator App (TOTP) - Recommended +- **Security**: High - Time-based one-time passwords +- **Setup**: Scan QR code with authenticator app +- **Compatibility**: Works with Google Authenticator, Authy, 1Password, and other TOTP apps +- **Best for**: Most users, provides excellent security with good usability + +### Backup Codes - Recommended +- **Security**: Medium - One-time use codes +- **Setup**: Generate 10 backup codes for emergency access +- **Compatibility**: Works everywhere, no special hardware needed +- **Best for**: Emergency access when other methods are unavailable + +### Email Codes +- **Security**: Medium - One-time codes sent via email +- **Setup**: Automatic - uses your WordPress email address +- **Compatibility**: Works with any email-capable device +- **Best for**: Users who prefer email-based authentication + +### FIDO U2F Security Keys +- Deprecated and removed due to loss of browser support. + +### Dummy Method +- **Security**: None - Always succeeds +- **Setup**: Only available when WP_DEBUG is enabled +- **Purpose**: Testing and development only +- **Best for**: Developers testing the plugin + +## Important Notes + +### HTTPS Requirement +- All methods work on both HTTP and HTTPS sites + +### Browser Compatibility +- TOTP and email methods work on all devices and browsers + +### Account Recovery +- Always enable backup codes to prevent being locked out of your account +- If you lose access to all authentication methods, contact your site administrator + +### Security Best Practices +- Use multiple authentication methods when possible +- Keep backup codes in a secure location +- Regularly review and update your authentication settings + +For more information about two-factor authentication in WordPress, see the [WordPress Advanced Administration Security Guide](https://developer.wordpress.org/advanced-administration/security/mfa/). For more history, see [this post](https://georgestephanis.wordpress.com/2013/08/14/two-cents-on-two-factor/). @@ -28,12 +93,30 @@ Here is a list of action and filter hooks provided by the plugin: - `two_factor_providers_for_user` filter overrides the available two-factor providers for a specific user. Array values are instances of provider classes and the user object `WP_User` is available as the second argument. - `two_factor_enabled_providers_for_user` filter overrides the list of two-factor providers enabled for a user. First argument is an array of enabled provider classnames as values, the second argument is the user ID. - `two_factor_user_authenticated` action which receives the logged in `WP_User` object as the first argument for determining the logged in user right after the authentication workflow. +- `two_factor_user_api_login_enable` filter restricts authentication for REST API and XML-RPC to application passwords only. Provides the user ID as the second argument. - `two_factor_email_token_ttl` filter overrides the time interval in seconds that an email token is considered after generation. Accepts the time in seconds as the first argument and the ID of the `WP_User` object being authenticated. - `two_factor_email_token_length` filter overrides the default 8 character count for email tokens. -- `two_factor_backup_code_length` filter overrides the default 8 character count for backup codes. Providers the `WP_User` of the associated user as the second argument. +- `two_factor_backup_code_length` filter overrides the default 8 character count for backup codes. Provides the `WP_User` of the associated user as the second argument. +- `two_factor_rest_api_can_edit_user` filter overrides whether a user’s Two-Factor settings can be edited via the REST API. First argument is the current `$can_edit` boolean, the second argument is the user ID. +- `two_factor_before_authentication_prompt` action which receives the provider object and fires prior to the prompt shown on the authentication input form. +- `two_factor_after_authentication_prompt` action which receives the provider object and fires after the prompt shown on the authentication input form. +- `two_factor_after_authentication_input` action which receives the provider object and fires after the input shown on the authentication input form (if form contains no input, action fires immediately after `two_factor_after_authentication_prompt`). +- `two_factor_login_backup_links` filters the backup links displayed on the two-factor login form. + +== Redirect After the Two-Factor Challenge == + +To redirect users to a specific URL after completing the two-factor challenge, use WordPress Core built-in login_redirect filter. The filter works the same way as in a standard WordPress login flow: + + add_filter( 'login_redirect', function( $redirect_to, $requested_redirect_to, $user ) { + return home_url( '/dashboard/' ); + }, 10, 3 ); == Frequently Asked Questions == += What PHP and WordPress versions does the Two-Factor plugin support? = + +This plugin supports the last two major versions of WordPress and the minimum PHP version supported by those WordPress versions. + = How can I send feedback or get help with a bug? = The best place to report bugs, feature suggestions, or any other (non-security) feedback is at the Two Factor GitHub issues page. Before submitting a new issue, please search the existing issues to check if someone else has reported the same feedback. @@ -44,12 +127,133 @@ The plugin contributors and WordPress community take security bugs seriously. We To report a security issue, please visit the [WordPress HackerOne](https://hackerone.com/wordpress) program. += What if I lose access to all my authentication methods? = + +If you have backup codes enabled, you can use one of those to regain access. If you don't have backup codes or have used them all, you'll need to contact your site administrator to reset your account. This is why it's important to always enable backup codes and keep them in a secure location. + += Can I use this plugin with WebAuthn? = + +The plugin previously supported FIDO U2F, which was a predecessor to WebAuthn. There is an open issue to add WebAuthn support here: https://github.com/WordPress/two-factor/pull/427 + += Is there a recommended way to use passkeys or hardware security keys with Two-Factor? = + +Yes. For passkeys and hardware security keys, you can install the Two-Factor Provider: WebAuthn plugin: https://wordpress.org/plugins/two-factor-provider-webauthn/ +. It integrates directly with Two-Factor and adds WebAuthn-based authentication as an additional two-factor option for users. + == Screenshots == -1. Two-factor options under User Profile. -2. U2F Security Keys section under User Profile. -3. Email Code Authentication during WordPress Login. +1. Two-factor options under User Profile - Shows the main configuration area where users can enable different authentication methods. +2. Email Code Authentication during WordPress Login - Shows the email verification screen that appears during login. +3. Authenticator App (TOTP) setup with QR code - Demonstrates the QR code generation and manual key entry for TOTP setup. +4. Backup codes generation and management - Shows the backup codes interface for generating and managing emergency access codes. == Changelog == -See the [release history](https://github.com/wordpress/two-factor/releases). += 0.16.0 - 2026-03-27 = + +* **Breaking Changes:** Remove legacy FIDO U2F provider support by [#439](https://github.com/WordPress/two-factor/pull/439). +* **New Features:** Add a dedicated settings page for plugin configuration in wp-admin by [#764](https://github.com/WordPress/two-factor/pull/764). +* **New Features:** Add a support links filter so consumers can customize contextual recovery/help links by [#615](https://github.com/WordPress/two-factor/pull/615). +* **New Features:** Refresh backup codes UI styling and behavior by [#804](https://github.com/WordPress/two-factor/pull/804). +* **Bug Fixes:** Delete stored TOTP secrets when the TOTP provider is disabled by [#802](https://github.com/WordPress/two-factor/pull/802). +* **Bug Fixes:** Harden provider handling so login/settings checks do not fail open when expected providers disappear by [#586](https://github.com/WordPress/two-factor/pull/586). +* **Bug Fixes:** Ensure only configured providers are saved and enabled in user settings by [#798](https://github.com/WordPress/two-factor/pull/798). +* **Bug Fixes:** Improve settings-page accessibility and fix profile settings link behavior by [#828](https://github.com/WordPress/two-factor/pull/828) and [#830](https://github.com/WordPress/two-factor/pull/830). +* **Bug Fixes:** Resolve PHPCS violations in provider files by [#851](https://github.com/WordPress/two-factor/pull/851). +* **Development Updates:** Move login styles and provider scripts from inline output to enqueued/external assets by [#807](https://github.com/WordPress/two-factor/pull/807) and [#814](https://github.com/WordPress/two-factor/pull/814). +* **Development Updates:** Improve inline docs and static-analysis compatibility (WPCS/phpstan) by [#810](https://github.com/WordPress/two-factor/pull/810), [#815](https://github.com/WordPress/two-factor/pull/815), and [#817](https://github.com/WordPress/two-factor/pull/817). +* **Development Updates:** Improve unit test reliability and integrate CI code coverage reporting by [#825](https://github.com/WordPress/two-factor/pull/825), [#841](https://github.com/WordPress/two-factor/pull/841), and [#842](https://github.com/WordPress/two-factor/pull/842). +* **Development Updates:** Update readme docs and modernize CI workflow infrastructure by [#835](https://github.com/WordPress/two-factor/pull/835), [#837](https://github.com/WordPress/two-factor/pull/837), [#843](https://github.com/WordPress/two-factor/pull/843), and [#849](https://github.com/WordPress/two-factor/pull/849). +* **Dependency Updates:** Bump `qs` from 6.14.1 to 6.14.2 by [#794](https://github.com/WordPress/two-factor/pull/794). +* **Dependency Updates:** Bump `basic-ftp` from 5.0.5 to 5.2.0 by [#816](https://github.com/WordPress/two-factor/pull/816). +* **Dependency Updates:** Apply automatic lint/format updates and associated Composer package refreshes by [#799](https://github.com/WordPress/two-factor/pull/799). + += 0.15.0 - 2026-02-13 = + +* **Breaking Changes:** Trigger two-factor flow only when expected by @kasparsd in [#660](https://github.com/WordPress/two-factor/pull/660) and [#793](https://github.com/WordPress/two-factor/pull/793). +* **New Features:** Include user IP address and contextual warning in two-factor code emails by @todeveni in [#728](https://github.com/WordPress/two-factor/pull/728) +* **New Features:** Optimize email text for TOTP by @masteradhoc in [#789](https://github.com/WordPress/two-factor/pull/789) +* **New Features:** Add "Settings" action link to plugin list for quick access to profile by @hardikRathi in [#740](https://github.com/WordPress/two-factor/pull/740) +* **New Features:** Additional form hooks by @eric-michel in [#742](https://github.com/WordPress/two-factor/pull/742) +* **New Features:** Full RFC6238 Compatibility by @ericmann in [#656](https://github.com/WordPress/two-factor/pull/656) +* **New Features:** Consistent user experience for TOTP setup by @kasparsd in [#792](https://github.com/WordPress/two-factor/pull/792) +* **Documentation:** `@since` docs by @masteradhoc in [#781](https://github.com/WordPress/two-factor/pull/781) +* **Documentation:** Update user and admin docs, prepare for more screenshots by @jeffpaul in [#701](https://github.com/WordPress/two-factor/pull/701) +* **Documentation:** Add changelog & credits, update release notes by @jeffpaul in [#696](https://github.com/WordPress/two-factor/pull/696) +* **Documentation:** Clear readme.txt by @masteradhoc in [#785](https://github.com/WordPress/two-factor/pull/785) +* **Documentation:** Add date and time information above TOTP setup instructions by @masteradhoc in [#772](https://github.com/WordPress/two-factor/pull/772) +* **Documentation:** Clarify TOTP setup instructions by @masteradhoc in [#763](https://github.com/WordPress/two-factor/pull/763) +* **Documentation:** Update RELEASING.md by @jeffpaul in [#787](https://github.com/WordPress/two-factor/pull/787) +* **Development Updates:** Pause deploys to SVN trunk for merges to `master` by @kasparsd in [#738](https://github.com/WordPress/two-factor/pull/738) +* **Development Updates:** Fix CI checks for PHP compatability by @kasparsd in [#739](https://github.com/WordPress/two-factor/pull/739) +* **Development Updates:** Fix Playground refs by @kasparsd in [#744](https://github.com/WordPress/two-factor/pull/744) +* **Development Updates:** Persist existing translations when introducing new helper text in emails by @kasparsd in [#745](https://github.com/WordPress/two-factor/pull/745) +* **Development Updates:** Fix `missing_direct_file_access_protection` by @masteradhoc in [#760](https://github.com/WordPress/two-factor/pull/760) +* **Development Updates:** Fix `mismatched_plugin_name` by @masteradhoc in [#754](https://github.com/WordPress/two-factor/pull/754) +* **Development Updates:** Introduce Props Bot workflow by @jeffpaul in [#749](https://github.com/WordPress/two-factor/pull/749) +* **Development Updates:** Plugin Check: Fix Missing $domain parameter by @masteradhoc in [#753](https://github.com/WordPress/two-factor/pull/753) +* **Development Updates:** Tests: Update to supported WP version 6.8 by @masteradhoc in [#770](https://github.com/WordPress/two-factor/pull/770) +* **Development Updates:** Fix PHP 8.5 deprecated message by @masteradhoc in [#762](https://github.com/WordPress/two-factor/pull/762) +* **Development Updates:** Exclude 7.2 and 7.3 checks against trunk by @masteradhoc in [#769](https://github.com/WordPress/two-factor/pull/769) +* **Development Updates:** Fix Plugin Check errors: `MissingTranslatorsComment` & `MissingSingularPlaceholder` by @masteradhoc in [#758](https://github.com/WordPress/two-factor/pull/758) +* **Development Updates:** Add PHP 8.5 tests for latest and trunk version of WP by @masteradhoc in [#771](https://github.com/WordPress/two-factor/pull/771) +* **Development Updates:** Add `phpcs:ignore` for falsepositives by @masteradhoc in [#777](https://github.com/WordPress/two-factor/pull/777) +* **Development Updates:** Fix(totp): `otpauth` link in QR code URL by @sjinks in [#784](https://github.com/WordPress/two-factor/pull/784) +* **Development Updates:** Update deploy.yml by @masteradhoc in [#773](https://github.com/WordPress/two-factor/pull/773) +* **Development Updates:** Update required WordPress Version by @masteradhoc in [#765](https://github.com/WordPress/two-factor/pull/765) +* **Development Updates:** Fix: ensure execution stops after redirects by @sjinks in [#786](https://github.com/WordPress/two-factor/pull/786) +* **Development Updates:** Fix `WordPress.Security.EscapeOutput.OutputNotEscaped` errors by @masteradhoc in [#776](https://github.com/WordPress/two-factor/pull/776) +* **Dependency Updates:** Bump qs and express by @dependabot[bot] in [#746](https://github.com/WordPress/two-factor/pull/746) +* **Dependency Updates:** Bump lodash from 4.17.21 to 4.17.23 by @dependabot[bot] in [#750](https://github.com/WordPress/two-factor/pull/750) +* **Dependency Updates:** Bump lodash-es from 4.17.21 to 4.17.23 by @dependabot[bot] in [#748](https://github.com/WordPress/two-factor/pull/748) +* **Dependency Updates:** Bump phpunit/phpunit from 8.5.44 to 8.5.52 by @dependabot[bot] in [#755](https://github.com/WordPress/two-factor/pull/755) +* **Dependency Updates:** Bump symfony/process from 5.4.47 to 5.4.51 by @dependabot[bot] in [#756](https://github.com/WordPress/two-factor/pull/756) +* **Dependency Updates:** Bump qs and body-parser by @dependabot[bot] in [#782](https://github.com/WordPress/two-factor/pull/782) +* **Dependency Updates:** Bump webpack from 5.101.3 to 5.105.0 by @dependabot[bot] in [#780](https://github.com/WordPress/two-factor/pull/780) + += 0.14.2 - 2025-12-11 = + +* **New Features:** Add filter for rest_api_can_edit_user_and_update_two_factor_options by @gutobenn in [#689](https://github.com/WordPress/two-factor/pull/689) +* **Development Updates:** Remove Coveralls tooling and add inline coverage report by @kasparsd in [#717](https://github.com/WordPress/two-factor/pull/717) +* **Development Updates:** Update blueprint path to pull from main branch instead of a deleted f… by @georgestephanis in [#719](https://github.com/WordPress/two-factor/pull/719) +* **Development Updates:** Fix blueprint and wporg asset deploys by @kasparsd in [#734](https://github.com/WordPress/two-factor/pull/734) +* **Development Updates:** Upload release only on tag releases by @kasparsd in [#735](https://github.com/WordPress/two-factor/pull/735) +* **Development Updates:** Bump playwright and @playwright/test by @dependabot[bot] in [#721](https://github.com/WordPress/two-factor/pull/721) +* **Development Updates:** Bump tar-fs from 3.1.0 to 3.1.1 by @dependabot[bot] in [#720](https://github.com/WordPress/two-factor/pull/720) +* **Development Updates:** Bump node-forge from 1.3.1 to 1.3.2 by @dependabot[bot] in [#724](https://github.com/WordPress/two-factor/pull/724) +* **Development Updates:** Bump js-yaml by @dependabot[bot] in [#725](https://github.com/WordPress/two-factor/pull/725) +* **Development Updates:** Mark as tested with the latest WP core version by @kasparsd in [#730](https://github.com/WordPress/two-factor/pull/730) + += 0.14.1 - 2025-09-05 = + +- Don't URI encode the TOTP url for display. by @dd32 in [#711](https://github.com/WordPress/two-factor/pull/711) +- Removed the duplicate Security.md by @slvignesh05 in [#712](https://github.com/WordPress/two-factor/pull/712) +- Fixed linting issues by @sudar in [#707](https://github.com/WordPress/two-factor/pull/707) +- Update development dependencies and fix failing QR unit test by @kasparsd in [#714](https://github.com/WordPress/two-factor/pull/714) +- Trigger checkbox js change event by @gedeminas in [#688](https://github.com/WordPress/two-factor/pull/688) + += 0.14.0 - 2025-07-03 = + +* **Features:** Enable Application Passwords for REST API and XML-RPC authentication (by default) by @joostdekeijzer in [#697](https://github.com/WordPress/two-factor/pull/697) and [#698](https://github.com/WordPress/two-factor/pull/698). Previously this required two_factor_user_api_login_enable filter to be set to true which is now the default during application password auth. XML-RPC login is still disabled for regular user passwords. +* **Features:** Label recommended methods to simplify the configuration by @kasparsd in [#676](https://github.com/WordPress/two-factor/pull/676) and [#675](https://github.com/WordPress/two-factor/pull/675) +* **Documentation:** Add WP.org plugin demo by @kasparsd in [#667](https://github.com/WordPress/two-factor/pull/667) +* **Documentation:** Document supported versions of WP core and PHP by @jeffpaul in [#695](https://github.com/WordPress/two-factor/pull/695) +* **Documentation:** Document the release process by @jeffpaul in [#684](https://github.com/WordPress/two-factor/pull/684) +* **Tooling:** Remove duplicate WP.org screenshots and graphics from SVN trunk by @jeffpaul in [#683](https://github.com/WordPress/two-factor/pull/683) + += 0.13.0 - 2025-04-02 = + +- Add two_factor_providers_for_user filter to limit two-factor providers available to each user by @kasparsd in [#669](https://github.com/WordPress/two-factor/pull/669) +- Update automated testing to cover PHP 8.4 and default to PHP 8.3 by @BrookeDot in [#665](https://github.com/WordPress/two-factor/pull/665) + +[View the complete changelog details here](https://github.com/wordpress/two-factor/blob/master/CHANGELOG.md). + +== Upgrade Notice == + += 0.10.0 = +Bumps WordPress minimum supported version to 6.3 and PHP minimum to 7.2. + += 0.9.0 = +Users are now asked to re-authenticate with their two-factor before making changes to their two-factor settings. This associates each login session with the two-factor login meta data for improved handling of that session. + + diff --git a/wp-content/plugins/two-factor/settings/class-two-factor-settings.php b/wp-content/plugins/two-factor/settings/class-two-factor-settings.php new file mode 100644 index 00000000..48018835 --- /dev/null +++ b/wp-content/plugins/two-factor/settings/class-two-factor-settings.php @@ -0,0 +1,97 @@ +

    ' . esc_html__( 'Settings saved.', 'two-factor' ) . '

    '; + } + + // Build provider list for display using public core API. + $provider_instances = array(); + if ( class_exists( 'Two_Factor_Core' ) && method_exists( 'Two_Factor_Core', 'get_providers' ) ) { + $provider_instances = Two_Factor_Core::get_providers(); + if ( ! is_array( $provider_instances ) ) { + $provider_instances = array(); + } + } + + // Default to all providers enabled when the option has never been saved. + $all_provider_keys = array_keys( $provider_instances ); + $saved_enabled = get_option( 'two_factor_enabled_providers', $all_provider_keys ); + + echo '
    '; + echo '

    ' . esc_html__( 'Two-Factor Settings', 'two-factor' ) . '

    '; + echo '

    ' . esc_html__( 'Enabled Providers', 'two-factor' ) . '

    '; + echo '

    ' . esc_html__( 'Choose which Two-Factor providers are available on this site. All providers are enabled by default.', 'two-factor' ) . '

    '; + echo '
    '; + wp_nonce_field( 'two_factor_save_settings', 'two_factor_settings_nonce' ); + + echo '
    ' . esc_html__( 'Providers', 'two-factor' ) . ''; + echo ''; + + if ( empty( $provider_instances ) ) { + echo ''; + } else { + // Render a compact stacked list of provider checkboxes below the title/description. + echo ''; + echo ''; + echo ''; + } + + echo '
    ' . esc_html__( 'No providers found.', 'two-factor' ) . '
    '; + foreach ( $provider_instances as $provider_key => $instance ) { + $label = method_exists( $instance, 'get_label' ) ? $instance->get_label() : $provider_key; + + echo '

    '; + } + + echo '
    '; + echo '
    '; + + submit_button( __( 'Save Settings', 'two-factor' ), 'primary', 'two_factor_settings_submit' ); + echo '
    '; + + echo '
    '; + } +} diff --git a/wp-content/plugins/two-factor/two-factor.php b/wp-content/plugins/two-factor/two-factor.php index 2221a75d..b1e4eca4 100644 --- a/wp-content/plugins/two-factor/two-factor.php +++ b/wp-content/plugins/two-factor/two-factor.php @@ -10,9 +10,9 @@ * @wordpress-plugin * Plugin Name: Two Factor * Plugin URI: https://wordpress.org/plugins/two-factor/ - * Description: Enable Two-Factor Authentication using time-based one-time passwords, Universal 2nd Factor (FIDO U2F, YubiKey), email, and backup verification codes. - * Version: 0.13.0 - * Requires at least: 6.3 + * Description: Enable Two-Factor Authentication using time-based one-time passwords, email, and backup verification codes. + * Requires at least: 6.8 + * Version: 0.16.0 * Requires PHP: 7.2 * Author: WordPress.org Contributors * Author URI: https://github.com/wordpress/two-factor/graphs/contributors @@ -22,6 +22,10 @@ * Network: True */ +if ( ! defined( 'ABSPATH' ) ) { + exit; // Exit if accessed directly. +} + /** * Shortcut constant to the path of this file. */ @@ -30,7 +34,7 @@ define( 'TWO_FACTOR_DIR', plugin_dir_path( __FILE__ ) ); /** * Version of the plugin. */ -define( 'TWO_FACTOR_VERSION', '0.13.0' ); +define( 'TWO_FACTOR_VERSION', '0.16.0' ); /** * Include the base class here, so that other plugins can also extend it. @@ -47,9 +51,140 @@ require_once TWO_FACTOR_DIR . 'class-two-factor-core.php'; */ require_once TWO_FACTOR_DIR . 'class-two-factor-compat.php'; +// Load settings UI class so the settings page can be rendered. +require_once TWO_FACTOR_DIR . 'settings/class-two-factor-settings.php'; + $two_factor_compat = new Two_Factor_Compat(); Two_Factor_Core::add_hooks( $two_factor_compat ); // Delete our options and user meta during uninstall. register_uninstall_hook( __FILE__, array( Two_Factor_Core::class, 'uninstall' ) ); + +/** + * Register admin menu and plugin action links. + * + * @since 0.16 + */ +function two_factor_register_admin_hooks() { + if ( is_admin() ) { + add_action( 'admin_menu', 'two_factor_add_settings_page' ); + } + + // Load settings page assets when in admin. + // Settings assets handled inline via standard markup; no extra CSS enqueued. + + /* Enforcement filters: restrict providers based on saved enabled-providers option. */ + add_filter( 'two_factor_providers', 'two_factor_filter_enabled_providers' ); + add_filter( 'two_factor_enabled_providers_for_user', 'two_factor_filter_enabled_providers_for_user', 10, 2 ); +} + +add_action( 'init', 'two_factor_register_admin_hooks' ); + +/** + * Add the Two Factor settings page under Settings. + * + * @since 0.16 + */ +function two_factor_add_settings_page() { + add_options_page( + __( 'Two-Factor Settings', 'two-factor' ), + __( 'Two-Factor', 'two-factor' ), + 'manage_options', + 'two-factor-settings', + 'two_factor_render_settings_page' + ); +} + + +/** + * Render the settings page via the settings class if available. + * + * @since 0.16 + */ +function two_factor_render_settings_page() { + if ( ! current_user_can( 'manage_options' ) ) { + return; + } + + // Prefer new settings class (keeps main file small). + if ( class_exists( 'Two_Factor_Settings' ) && is_callable( array( 'Two_Factor_Settings', 'render_settings_page' ) ) ) { + Two_Factor_Settings::render_settings_page(); + return; + } + + // Fallback: no UI available. + echo '

    ' . esc_html__( 'Two-Factor Settings', 'two-factor' ) . '

    '; + echo '

    ' . esc_html__( 'Settings not available.', 'two-factor' ) . '

    '; +} + + +/** + * Helper: retrieve the site-enabled providers option. + * Returns null when the option has never been saved (meaning all providers are allowed). + * Returns an array (possibly empty) when the admin has explicitly saved a selection. + * + * @since 0.16 + * + * @return array|null + */ +function two_factor_get_enabled_providers_option() { + $enabled = get_option( 'two_factor_enabled_providers', null ); + if ( null === $enabled ) { + return null; // Never saved — allow everything. + } + return is_array( $enabled ) ? $enabled : array(); +} + + +/** + * Filter the registered providers to only those in the site-enabled list. + * This filter receives providers in core format: classname => path. + * + * @since 0.16 + * + * @param array $providers Registered providers in classname => path format. + * @return array Filtered list of enabled providers. + */ +function two_factor_filter_enabled_providers( $providers ) { + $site_enabled = two_factor_get_enabled_providers_option(); + + // null means the option was never saved — allow all providers. + if ( null === $site_enabled ) { + return $providers; + } + + // On the settings page itself, show all providers so admins can change the selection. + if ( is_admin() && isset( $_GET['page'] ) && 'two-factor-settings' === $_GET['page'] ) { + return $providers; + } + + foreach ( $providers as $key => $path ) { + if ( ! in_array( $key, $site_enabled, true ) ) { + unset( $providers[ $key ] ); + } + } + + return $providers; +} + + +/** + * Filter enabled providers for a user (classnames array) to enforce the site-enabled list. + * + * @since 0.16 + * + * @param array $enabled Enabled provider classnames for the user. + * @param int $user_id ID of the user being filtered. + * @return array Filtered list of provider classnames allowed by the site. + */ +function two_factor_filter_enabled_providers_for_user( $enabled, $user_id ) { + $site_enabled = two_factor_get_enabled_providers_option(); + + // null means the option was never saved — allow all. + if ( null === $site_enabled ) { + return $enabled; + } + + return array_values( array_intersect( (array) $enabled, $site_enabled ) ); +} diff --git a/wp-content/plugins/two-factor/user-edit.css b/wp-content/plugins/two-factor/user-edit.css index 4280ce99..83cef064 100644 --- a/wp-content/plugins/two-factor/user-edit.css +++ b/wp-content/plugins/two-factor/user-edit.css @@ -7,3 +7,70 @@ display: block; font-weight: 700; } + +.two-factor-methods-table .two-factor-method-recommended { + font-size: 0.8rem; + line-height: 1; + font-weight: 400; + border: 1px dotted; + border-radius: 0.15rem; + padding: 0.1rem 0.25rem; + margin: 0 0.15rem; +} + +#login .backup-methods-wrap { + margin-top: 16px; + padding: 0 24px; +} + +#login .backup-methods-wrap a { + text-decoration: none; +} + +#login .backup-methods-wrap ul { + list-style-position: inside; +} + +/* Prevent Jetpack from hiding our controls, see https://github.com/Automattic/jetpack/issues/3747 */ +.jetpack-sso-form-display #loginform > p, +.jetpack-sso-form-display #loginform > div { + display: block; +} + +#login form p.two-factor-prompt { + margin-bottom: 1em; +} + +#loginform .input.authcode { + letter-spacing: 0.3em; +} + +#loginform .input.authcode::placeholder { + opacity: 0.5; +} + +.two-factor-backup-codes-wrapper > :not(:last-child) { + margin-bottom: 1em; +} + +.two-factor-backup-codes-list-wrap { + background-color: #ddd; + display: inline-block; + margin-top: 24px; + padding: 20px; +} + +.two-factor-backup-codes-list-wrap .two-factor-backup-codes-unused-codes { + margin: 0; + padding: revert; +} + +.two-factor-backup-codes-list-wrap .two-factor-backup-codes-token { + letter-spacing: 0.3em; + font-family: monospace; +} + +#two-factor-qr-code { + min-width: 205px; + min-height: 205px; +}