From ef8a82e4c3e9b8592bba42d76326546c873d5d0b Mon Sep 17 00:00:00 2001 From: Mix Date: Fri, 9 Oct 2026 23:23:10 +0300 Subject: [PATCH] panel-redesign: Sign in and Create administrator on the kit Stage 2, step 1. Written by Sonnet, reviewed by Opus. - templates/login.html, setup.html: written from the mockups as the content of layout_signed_out - form.sp-form, kicker, h1, Bulma fields with icons, the full-width primary button. Actions, field names, autocomplete and autofocus are the old ones. - view/signin.go: typed Login and Setup (Meta carries a title only, so Engine.Render takes the signed-out layout); auth handlers pass them instead of maps. - login and setup are in kitPages, have fixtures, and are off legacy_pages.txt. States the mockups do not draw: - a refused sign-in / setup is the kit's flash (notification is-danger is-light) above the fields; - login before any administrator exists shows the old sentence in a form.sp-form that has no action and no control: the signed-out stylesheet sizes and centres its column through "form" alone. A workaround, listed for the owner. Differences from the mockups, for the owner: - the kicker is

(the kit's partial is a span; a page may not write the class), the mockup has

: the block sits about 3px lower; - login's kicker is the configured host name and is absent when there is none; setup's is the mockup's fixed text; - the footer is the layout's legal line (full copyright holder name); - the user name field has autofocus, so it shows its focus ring. Evidence - docs/assets/panel-redesign/evidence/login.png, setup.png: 1440x900, headless Edge, from the real templates served locally with their fixtures - NOT from the container (no Docker on this machine). - panel/audit.js on login, login with an error, login without an administrator, setup, setup with an error, at 1440 and 1280: 118 texts checked, problems: [] ; no page is taller than 900px. - go test -count=1 ./internal/web/... ok internal/web ok internal/web/auth ok internal/web/handlers ok internal/web/validate ok internal/web/view Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 5 + docs/assets/panel-redesign/evidence/login.png | Bin 0 -> 42310 bytes docs/assets/panel-redesign/evidence/setup.png | Bin 0 -> 55314 bytes docs/plans/panel-redesign.md | 2 +- docs/roadmap.md | 2 +- internal/web/auth/handlers.go | 20 +--- internal/web/view/fixtures_test.go | 2 + internal/web/view/legacy_pages.txt | 2 - internal/web/view/signin.go | 53 ++++++++++ internal/web/view/signin_test.go | 92 ++++++++++++++++++ internal/web/view/templates/login.html | 52 +++++----- internal/web/view/templates/setup.html | 40 ++++---- internal/web/view/templates_test.go | 53 +++++----- internal/web/view/view.go | 2 + 14 files changed, 242 insertions(+), 83 deletions(-) create mode 100644 docs/assets/panel-redesign/evidence/login.png create mode 100644 docs/assets/panel-redesign/evidence/setup.png create mode 100644 internal/web/view/signin.go create mode 100644 internal/web/view/signin_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 268e695..c0c6583 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -66,6 +66,11 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); version verdict per check — machine, processes, TLS certificate, queue, milter sockets, reverse DNS — each leading to its table on Health; a check that could not run shows as a warning, never as fine. Both read the same checks. +- panel-redesign (stage 2): **Sign in** and **Create administrator** are the + first pages in the new design - the split brand / form screen, built from + the component kit. Sign in names the mail host above its title; a refused + attempt is shown as a notice above the fields. `login` and `setup` are off + the ratchet. ### Changed diff --git a/docs/assets/panel-redesign/evidence/login.png b/docs/assets/panel-redesign/evidence/login.png new file mode 100644 index 0000000000000000000000000000000000000000..66a449686f3be86894eab48e302fccb14dbd0b80 GIT binary patch literal 42310 zcmeFZbyU>R);~O;h=PKOgi<2X-3^KY(n@!Ccb9=ki*yVnoOibu-U9JWv2$x_#z;;|_kXWi5z>4+p%ZnbxX%Ca+7g~e;> zAJy^-D76mlUDAuyRI^ko)jA?F!{t9siHpa*KCajKhCFe49Dn;mgY)krALy$V*q|@! z&z=W%;``atfmjR!1WKp=kzoi_{eswpH-ZN?r2@2KO+m}35%^{2C(v>Le!D zbinBjCJR3Z)G9(m@R%b@KLGX8BTPJ?7`EQdNJ8N9mLV(f|B#xOQylmuxrur`fP!O% z9(eOE>P_HyYuyJHs+n;@e<-D}lZvWeihEtM>M=G3HV8CCT$hIWdhLr_iKB1l%T}PB zhcpf=I;i&IPSQP5mAQ>7cIOx3(cjkFaqoO~tCRlQsh6_iDI$$Gfu`z4PxDXs7(1iB z70MxkAUBEDRh@4c5?3nSGWGHg9i7*&=o4~k zP?Y&-Km-hBI@|ZC2f)a*K1EaD@C%0&1}MPrKB{V!CizBP zFaU%Lc!_??_fCp{I`A&ZO=HwYbI}(JA6~Vgo@WewxB-l>($Kg2=J;$VqH3Ut8vlk5 z#a%CnQLF?o%I0-PWn{yMfy-Ow51}23z{y$+bW+S=LKyha;hJv~h)`p4V)TsK><|}4 z)X(B*5}Qt+en}#ynyihIaT7uj`JEJX}JN?MLEG_dV1g3(}k%;ivGRdI!Zy3^(rQ%Rw_zQ$qKb#|TU` z(XNTA$?I1Hyv2Uo>>W_=`9spjRKVrk4`>QRk~jklMsf>PHE`q|tz`n;KkWWBrwm-K zQU2@nBDr}z>aB^+sHVJRzlGvlk-D^J{M>TD+ax&X$;*nxa>w!b&qLtOX9*NhU4mVJ z!GjXGpy~&XDhhNtkji!s;D&(%?GN2cRC^VE`66zZ_oI5}{?cqo;~?Dff9X_un*Qp4 zmJD2Xb{6S?ez?f&Y*O-Drvj(7xSXV2N%nH+x#`Uj^?>Uf3nc(vQ7r)f&&zEtHBi*J z--jLmn*UKAZVsclGb*|v7x;Ea>{_Bai3I{z?6R`xN|o&05!QDuHOP$Nrz?t;I5Sjx*S={;62oYSdjbBaC!&05B~OF!u>;E z=l2!TQS{u@lQU@#^TR;B`xY%Go0&<))PN62ZdRaVnQw4-7;2*3dWoihRG0wJyt^M! zRRhPE7n(b~mX~)JfXl;3bdy4%id4YW-4Ez1*@eD3^xP!*h-z;tRPh1X6I#^sKr}DM ze~A0U@9lwVWZSa^;D7z=dVr)mchIsFU@)!gQkDK{tLOz*KcK)Dxy#L0?<-b-4+9#W zRyY=&bzaX+;{Qjb^@ABD%k+(?sZosk@>)7QFpdC9YkP{S8aS#bP=YpqLZHqYH4q5u z1>pbrvlC^s*hjy0{*d3f1h~t7yA$=Wp6*2XX3%F;2VP~MXEP+7hH8L957q0kYuyuN z2bAgk0VPX;BYgs0YJE%`2^(;Eci?$#Xc}-b#86l2zfj}}e7L~cZ9`_=%z>VpI~}hj z`__n`qTUTe6ScQ|&-i*aqh(qARQGK(8=@)T)t-Xr=%61|G)ZvHf2x;D3*?hxV%ISvclV9>upTCdoh@3qGHpZvrd7m0Nb6 zSijC?_<=zICw(61E9h-+bnqiovU+T$*rZpb7_<1^LtfT|hbJ2FZF~79b&Yzp_e)74{7wwlV`Yd#j-ed{211^D?)XU$>H`9l5jAaarxvR$(($ zv&Dr+gKA6QX%o)vh%fOu8y6d&HkNGC#D;sL+Opd`F69xOPz zB%eQn){W@i!Bz}e35P05Q4q3Jv6ksx+)`Zgu3%n>P)R1P#q!}*@DcRxcqj3Tu=(&Q z|o$+Y0#emuRWz_Ti7jGgvMKDVTW`9|t~qxw| z?wLH3?)usB>c%aR<6KU)v0`i}9ckT?B{>_Z$ee7=?e8V-3HJq*SA zZC!q2bDI~X$&I@Ni-(?8(!t*c>|!4#j%AbHBnysLCg1e5jDx(+_o@4&E!$yRO@;w7 zeu1_}*-*YtI!>T{!`CV!kAR@tg(`mBoNB|ezK-)dRNqfE#QjCwqxhTL#%ilfnN%gg z76MKl%X#-F-%Yv(33#zX4xYMZ#QbCyP8g}#zZK#ZP84|iNRPB|E56z6c-5M5qu_VG z<*ur0ci2V;4Gm7Q$Fj(Y(9~PYU(*$czf2VZX89&kTAg|W@u>4edjD_caCJRUk%@Nf7U_9 zbQ3ftehn4;!wp*K6fUp?XHW=dHa?d4*@-n-6Um;C6*}2jkSzN=#8HTkrmE-*NrWUt z(HDs^hE`XGu+1i~J_r=LnJX!?C(|*i4e64((~+*=-#_nG>F=3EsE%KA_|Z{Z#dZh- zRCO1P(EylIEBLKBb~7COTDVb%z@A@l#g@WjZ#AovWlH6MiYu~2BW8@@4OqF7OaKb7 zN7;T*21Rg%uIEQQS9%A5h%2UcM_wGbKGalkc=!mKT*@qZwC{T9vx3wb`5;2q%dxf4CUQ0DEiu7 zwjUv&^kPcd+HXR}*a2Fp7(S8pn zyD+L(pfSuK^T@09>~a$h(_X1jH9f-4U0be*QKqbF(a0Jz;XPyu+{!pd!# zwEL`-8b`B=EhVD9q5?Gf$|mbtHI4`7dLBG~){l>h3+&ROGRCxI2fB$npI3}zH6&T; zMB;%c?q0j&l?Lr)0JP;t4!{b0-zX8AOd?4lyqu>E$jqM6d%>LWjbBJ21&V2iY9w(y znQUpJa&JU4AyeG8)&xNfl^FH9Rk@4or23zs#)^rQZZ-1cNdP2#^%tr+3v=sVwCU+b7i!poa zUAJV3xs*z*+z;>Tm6qsmLHg$;u%xag52sb(+q{P)01$e(P>qR)1_;pLU4YD$ZhEX8 z|6$S-LH{x}~F+#Fgf`|ecpZ2w=2q4?77DzcC| z>l>FWzIyIUVHDU zIGZ*`%)??GM{m4F@|Ue{ipA%UehZ6E79*Xn*!^aaVZ9nBJjqI*%{}+kBvnt$*QDWn zODX|?^jrhJUsg!-#F<8?E|>OAGH}-$I`PleS_%oV;#@atC#ojrpPP;+oCVqYeEKt; zRY-oqZFL?>5OG^~hHn?Lo?FNuCg9yo*L4#>S+2oW6rP=4tQWtd^~z@l3{{?Auc|RC zg*LJYGAu=O^?cF$^J}Giw!!m}PeixSHOMyV> z!T^o+U8}=ypR>9|${n`+39)`*Px{l%aWloaQd;r-$!~2n)J+=maT)GKUO7W->Nd0O zQ;*|fi+^q0yIS#2PKs3}cD)K&Q$svrWT7jWK9p%2iJccY=f<(&6DW6aoqSI}TvI$0 z71X({L8-xeVjJ1z%|{0H)Y2r4@^8y(Pv-@O(EJ+g`A1Nq)s+mpPv^kwfE1eF=(XRH zmJ_)%T+kIN8vzMTDzG?NFkmb6iSPTN2c22kjm;&cfu`bZ>FuSnrnWG;m@YKH*Cm7N zKk992y&FBltzWOW0m7%f#*Tm(N4CYsYSLPcpz5WoFFFF23$Nn%=4s(+>uhe15A5%8 zMTAUHJWf=tk6t!4QLC7ik9b>eS2`|BBk(FnM5?6l*UQ43!pDd2Fam_G)%GtG8eg+G zwK8o#N%=+KyU1Z~Vp;?VcbW0Wde?##^2h%EhZ6F)PRA%FjZZ3T)b$w#`S(k9P8Xv0 zci8WxZf~;yoXduuuB{?Qs=2B)%_G}9{Z@Ya!Q-QPNn~mh)X$yA)4D|Mm)r}pxXBPL zU9a@U!?=>_;8|DwqK?Idc0^I0Jer!#QEkdgL6ZQhUXWY^>!`TX!oVBPt}@S-#&s>d zul`hm`L`|v+>)!zR;XQjCu14Zqm?U1!|R*Ob`r)V0BrPx>zYoul6RAb*%l@Nu+M?| z@h@pU3hT`8;)TCD$NQe($-FC_O^8ghN>2@fL|AvQ6CanbG&Jw~Z@N)xjZMk}=#(=W zovjA|QK}9yx$F;CI&<9RgHqZXP35#EHrhc}J7VRVu#niGClkaqZg$cJk?T?7+@~G~ z?}x*&Knp)!qcLB$UW=~xj02^<3Nn10f&6tQZ)Sh&mWry@F-Tq2jT`GDi!-gIPv*Dn zeESNmKaQ_|&h|70q9Gmu!)SyV9gJaI4)W*ow(qDcCRX?5b{UuYnNg%H?dK%(`FQ1c zu#vBIV?wIQr^u!xw!hR}=J8a2;f5$)Kjr3Bqp4I2Egld569682MuM&m^NPWwNO{M9Oc6{N`)s5h1`=5Abc z0A#s=CQHDNvB#D4hp@npcEhpR1Jqo+Y~ID65%NXnSNh$5l5CRwU4DK2-O`BzYDEO2 zLDvWUd=BJ==S@grH#=lRTBpe9_m{ff#X=hvv?9}fX1hOIJ8Oo)?FGZ>kuV$eEOLbb zeTUaTeX@TI4GI7#LK(d;(guqCY`dkfxjtE3{!SWtch7Xv_N)6*D^y*IRamor#&YFY zEVYChK%?LP3s#T2e(P`-hDEdf`98q0y7Ki@QRB8^UhUNILN&ExVET%oDfAbQegOkC zM=YzZ4!gIljUP|)vaU$k!YZ<7qESn|fUg8}KzfBnn&St4h>9 zyffX<45A~t6l&?U<#xXXf-0lwc5-+9*4@J2pVD&NMs{4jB|7ocE#`pj#$ZdHBmVO-M zc^gF&wlrKsFQxhXTX{D7Ud`k!*HatsQ)IYLe0x%)U;=Yp6EXSkNV{$?IgRd1FH|0=FrJZCv!w^2p41B6f!P6E!8GZa>BQ^GBqQwY;`x3DX|s3bM!7#&-6d#$VfO| z_-j8Iy+m|~6={+k{;8Ua?qm~Dez!E=66tp7F%!hb5QFr2Anc)Fl3UXyPdYKNzqS}m zll95OE)4-q8ND~3P_r^fxq{Dl>U-G^^I*FX;K+rFp|^^}fivx>qQDHVxjK6FSwxXW>t%(>aB{ui0Hd*Uzv7TiH8>eQi$m~j*p7!t2o%x5^JBl&beE(EKCTzM0NTB z*=PX$r}YLP7)On%U{T~un7}5H;tW;s^trI0({Y!`c(Fi{4=jn-X@fZQM%o}zTy-%v z)}Y^nF5@x6;D=AcV|^d4yi?oGd#b&AJ$x!vTdQ|IJFF{%1PN-xQs{J}bbbC)XJx zKxkAel8B6*RT}G=xTT?~Wt4vUek`G9LIF1%OQJ(6)Yd6fF56T)Iy0#MpvOI!wLC-( z$C<0*XXZ~{S^*%4FFV|qZ501STvIC}xV=Z^G?Y0}({dzU z=dFu|B~3-;TcSKIO=8can28cbM$t@FZ_)}KWdeeJ-S`leLHHe9XJ=JIL();Q)$*B& zv8q{_*f&+)nqO9O2&<%sdX#YFv#B+b9$kdmSRahcMDOE75NY)?vp{AjzY%&StBv_p zP6_6|X-X`%d`CKJWyMBMZ($s_YNV>=U0tx2SH{AuHo0TTpk)ER*b~<*mq|!U()wcL zA8nIdKBK&^8iZrQ$s`Mr8UI;On`*gE<`>w}A%#=y95S9fo$#oJqnCrJP^7whU#_|S z*axEIC81N)*J~Ylzq-IEIy3VbAMUWyCRC9~n}$(-tSb4oSd^)@+67Pkv3O!^py_*= zaXH$JWct$5xrs^*!vaFpBJs@1%)L7(?;C-o-9D@RJ2-o(9q+9xO9 zFO%xo0JJSOFbLO{xvw8bC9vP5171Z;NKDBZ1AkPQrb?Rc7ER_nIx@2q!koD;$IOyF z12GrPE$I_iPSvI#x65T#+tu#UspRcvDMh$MF)JuH(C5!(X1cAD^+Sl?sZPCC+fr8Z z{;tx{BiQi#b2SGcPP9$&On=tC98VP!GcJ_*rhy8ONt5`52+$Ki8cLX~io#xL3tQgO z#VJ#*8Ynt z8s>$35I+)n8NKdF*?(23?0s}M@cm$9Utj-swz_P&9%X@vlS|VKFRcqPKO~pSUSu)Y z#I!2;@^W)Bb;s4&`5=|-^h2)lI*o-(_5Ls&h5yAI9|Vq+zq;Ii?@(7<@5bQ8AFo{N zI7+#(p^%nF!d)Gzwr!l_H`b(0XL$xOv^Oy^7t+Yvl^IZ;_Gmy}&XHMq_Urp2&-yX_ zS4UA(Z9Po`=N$(S_|YaW zf&*zSp}GC8jyBXkRl6m%-q5o&RdHgp0P(x4-v4xu#L{!+5E(k%RADH+J%V)^9Clee zdleJMrdKa~JYG{D7k=(WOO33;hi$-G;wvvZnRaz#BgUVzjl?!OxM{Vxysspychv5V zcb=)$h@Wg;%SBp0Eu~{QSwD)Y$r}2^&oPY^QlcxGbo##X(x0oP{(f~;lX%|dqjqZ)?Um`D#598#+w`Hv(-e&`p-hg!S^8cTcIy@N17`GT_+C5f=C@>e?VHa0_G1rRO*Uq@aBvQ6Y^bEjr%%$wqv+o3SFF4aY!y_R=KQj=A|b-dUxe!cM?+=C$Qn@)?XAR@QRqT${`mELT42xx=Kw`nq?v%w7QJ;p6 zSN#wtMf{o@QV~*;`n(LRqKT=yGnE|;yUm7b;;biErmqr|^5wdfb(yPEL=TktYU-6d zqjSP1ZD$Fh6O=Sm$f7i-w)awR+&Yf!G36}8gg7lVe_8w~&Y=CvwLr+zstgRSKPD=s zz|m}=;o+jwR`p=cJq2^vS6j^~F`hV-dY?}H`f~7{R-z-9b07SK&l}lR!(GK^H?o%N zI=g>>o9!INTAm_kTpkppExjE+VL$83zyYb%cx_fdu};YD;ozSS9T~~2eOqN{|A{_d zr1yvGex>yBvD=6){#mt7vz@k#msxcI|FZ`Ewc@Det76E0y{k^90$9jFa3;I0P(O=(Zc$~#D3mYy^DK%CUoSC!4P z@Kfraj{7kxTTa?k8TQhKtg|p)O9}ljqeVpXWJg7Y?Zc*JCE)B;cAt(^Zvf_KCU8De~#Z(a7|6T z%6wjw;@SX`wVg)VzHuoLt60d5jQ3Jge!H4;dcz;@5n+LmvkC)eS3W?LwY8_QeD>2u z9i7|K`Hz)yh@w=vecBJmg{tCvz+f`AP8~ckN3{ZkP0k2Z`)c^pN%l!({jr&RT*+)) zbTS=WhVDR4ESX5B)K5fyJK6nnTEjPhGS4c~JulqYnhqOt+|13p2xr?M&hb`?aRQgS zp$rNN5j0hN`hWx7pyZWhMkp%gvql~17SjXiayxUnOkFZJrR{+C8-l2#Qe$d`Oe`l` zQCX@B3W?g?R?Qq0d9Cy&gpX3oOPF*qs_mwA8ZO5Y4`%snt*0s-2UF*YDru_*yZdI! zEv00fdX^C00DzX;)O&>pLe5sy=mrH*`c`JSoxy8A6_eKdvN7>JKX!3-WMyMxW`@=s z!19*pZg^o=+D*%O$8(uy)!5F=lsUFhC~d0|R*aaMuG-w0OO0`g*gx+3fC#M=aJXyInYvZL>+ftDd+cV9wdu9GLcHpXB2<)uplN}FV&DvZ| z?xVn%cw%DWU1;6vRMb-BkzXI|glb!N0Nhf`?Ym=v3tx~VQap3ZA-46N&;Ej5pBSi%Ua4`5%~x+pfsb$?GPHCzJf zWMZgTiDbA?aeSu6cJ{INdb!IpdD$mAF`>eaj5fUrE!E9)4I)NL6X6n0JZCd2L$(E& z;{d6pA0!;JHn;^+3V38&5AN6^v{mzcdpnC$^#B68RrA8(o}On)+Z@9jA{WOt^OeI# zRW+M%Rsr zb%Y20_RPV-L5=O)V{+eocbJ~4l^BKV`DpN{_Hyo2lw<4Z*vXN9lp6{)P?(!w1`q{y zoX0&sZw_|K#`&;-pw036e!W5*GxOh?8QCRKDdt0&F^e00eV5Rb%apCm511GWKa8ym z4NZ-$O>L=E+HH$ZYYfR1!x4mk>Vs+@U7`&VHl#8ohR>tE9l79N>IYxTt;v#`mBY(kDntUJ5 zryzEPGXa4;^8u4@b|AuUNFWvU8VeYD=1XOwBQGcHE}0lj9nc_2Oh^(12${AsA|a$E z9cWCh#_ontw@L|T($WtPAb9gF^XJdg3Ui#;v!wAg>Y!|GD<2&@$$HSAh3{?-E_?fS zQ`NdRki1C`xn!A2S6Bdi50#r*rK+1)Cl$r-K%a?dyTWWO-V$+WAI<#Ya-&lY$YBq- zZ+T}AzTTN}&)SA8<)ZPd#5{V%jkN@`^&{P;mdxe!=mTv&iaT>dIWSQE>+_JW&GacE zO*b8gPb)||X+4Png;NNNu^Dgd)pT+i@(bVFB)y;%dl&>axZ%EqGb$t>IU=GeP}5G(_-6p^);;W8>%SV@7_ z>Lnh$maL!`q2{ARlO^p|akw!z$!eJZ2o7+TsJbvnDgdqAFK#C(m=%JV_jA5VLBVVN zlMGy+xD^a!p@w}(%E(y33Y{)I+KL|&EKwE2zXbm4R$hcF}*!lMZm)E8`3nbX5T5VXU_;{33%|w z9t~5wyS#hvSoc+RsLog$BmI`3y9F0lLs@W`y%R|(3J!vX_bFfa-4pPZzb({)S1LN& z2OxS5)IbNme;H8vOuG`{VVMUm4hOxx0cg|c7dqsro?OHN6 z#eZf-UV6L1Ddid*m z1!2H<)Ebah@-Jc@v@f~Id8(swv_n+e=p;p0OUQ*~qn`qG4>^-|K4VLh%xxv_fiK-K zrU7z{7Y68KCkZw0M3pK5*~bMExOgO3+Rg+GDPb=^ewKQj`UqsT^`<@e{f!`j74zwY z4mqNT5| z?`DAZJ4W1jQZB02lJ4@M*9i|b+G^2rqgH4eTha4!E2yGn{URC+j%8$GW$Ue4k2g*N za-0i*cnh_Wso6}c%+?*TDa3FDASf;yPST-`-6Jv8r0lH!@c11ji-h{mJxpQY`iMua zyd5R|Op1-9V-uq?z~J2gWHD=g!83a{d|<>Ih37^Sg|Iq@N z5>)v*XRm#(VSg7JvEs`w6Sj3y}JP~8_ z*q_n$m2xv?#{<1k{r8OZo$l#vLvf1J*Kn6tMlhDVVx8CaVn9|wEgm2|J_P1VdyR}! z5+P!elL48Za2R!F_ajo1fnlW&f|*r`T8RLyX4;GYR90D30{I@F8+kuIa~*;Sss&Qo z4IUNs%WD^Mx_`Q?_J{qZjPs!ejrGlD&G$Aql*E3798x_D*hA&|x7t>eSHxdcm6ojP zn%TvNa}p{G_2(!mwKGn_er7Hxd*&a2E~J0`l`wD;w-y zfm!u;jtTINYut%J3opCa{McCsh-lSIp5F%XIM9gx`1K)`0kk8fhIg!1;}5*@LlR)A zOh(4$1m!7+vk<@#6zhk7I-oy4WEx?Ra3lfwaj5+KfOquFjDqSmRb0I`8|IXW$;p5S zH88b2TVHlWnk33lrimNjk4sS_FGRlitq^QU@c9wx>G^oRIxIthTp9PEXl$%6X89lpPhZqkX$^YMi(UAt zGg+I+KaGUESW`Yca+0}QyM~veZu%}cV0UO*T27YeJg9Y7yV{#P3610CVXLgjl%NR1 zx?UP`o8RD3Hm+rzT(@Zl%;!iq%}-?8#9is@+0ExQ=tUxMrqj4-9S14J#eib@0jW~Ky{c6vQRfewy7Ir;$7=g+pYmT|o;tN}u=S}}~H z3YekZJgZc&pvER>hi|cN3thRAG9T;d@k(+BSma=nj^LzNn>s8&CefdPv%H6eC&TLE zb_<0FB;i%-+l|QstC@n1=H(P_8V>9*1v!&XkDPD6xUFq&{*E(G88GvD8dF$czBHip z_8hDO992e2egC77;9ziQC}5VLL_@i1;4rVNWb@uu03G(13$XgAnYsd)v3sxu9(QMT z0C(xD=k`o_FhL31iN(n2uamBZiNb^*S^Z0qo2H+}o|JuezmK0<2lK1DD!tb$t|k%_ zZ)0pn3!<*Dxtt;fmWFwhY4#M6Z`7MV&nIQ6-sW3)vj!^^LyqyK*8tYdafvHnGb@_O zI9*OFOV!vhE9F1(y|Bh1pA%s&GQq6HMcM6v5iNgpFKVEWd&tSlV~dHb4Z0@dI)B45@IkE(dWvWn>}R24k%#m}$ITvkKRfnV zj!0{f4G#Y$tw;c(5ax|gC^>?M&s3Mf3aWBmpL-8xlq7?806A@7fz{*VjEn2&USwmV z?Yg@%oSp$LEQ}G&rlZppaNRfs`t9I8*eRdnw)T`IAt~Sg;AC^UH`jIjlA1Vztge`r zB!6#jT|Jtt_bSN5*4%z+;cIkMMw9%g+qMwiz8 zzyG>E!^08QNCC&i1sG}O@zz99_4Z_`|B&|NZV7oq-yJeFI28svNhet#y|gj7X;U{` zG*`12HdEtgt&ahs$xa&qWSLu{h-`FJ7n0=DH2BZse9ux856y7%E!P1K_BE3U0kjs#puK2&d*k9fm+pDC zzWg#SZoub9w)|tR&ij9!&jl#l2UNC3Vxp){imPK+^<<<3;=5CDZ7KNDeNcHx%+1AF zQBmemP3gs--{jaLXS2D{gOmbAx>vgevD?^peVm{kLd5aD*7h9S>(d{xvy&?g>@4^8 z3RvO-Evr`yW!={3VI05>&TSzTFP zH6bQ^bQ^?Ep^S^mM5@hXO`6!$M8lQ)!X1$5%yRN_Po}kZ6zjYem#5Y6c?eHR^F+L7 zj>N9E+JjsC1qGP4kIyOilq%N+4+GQ0p17Zx@HD-_v(ZTNJKAt2paahnr^Y$Zt^Xqb zIz1!ctyb^FAeN7@+gJ#;TQ)V<4g2z@?&0d&F4g&h*hhO7J+|cF)O)Fwrw9%#&yD73 zSNJ~O4ea<`h|&rrw03VK_zkI0(5b~Og zQgig1_&7q~*PG>F<&J!Yds{4621V!?9j$JkgUAig5H={={f86!oucL9g_9{_xWMH z@CbVHw`G<9nn1a&rAI;PYBau@W^R3t_T)6#zS=+2MMHDaYd%s`h}&jb$#S~E6L^%g%e!bu@ND=v;@`7ASbNwa3|zQ}i5A&VO9HoZavTC{S=G@_j zlJYRaa-Oo43eOF_QIxqn%i0Tn6oM-i8G@~si)Sm!c>ic$l~v6rv26|Q0ssNzucyf* zk{Rh`r>~=8tCCOlrka);`dnhr!9n`^OG>37P zZ*%DP&*3&kI7>ZK7nv9<4XwOTW$9TqV~vTOC49+y^Y_jmxnOqw7<44lGe`jrzcWl+ zK;CfZ;^E<$j4Q?GK1eISGzexH6MTuASmb)LGnsaKU9#>gTuhD(X}MLk9G7!ORJju1 zc>CYh97$5ulyzs8%ntSvgB6i47!xRn`L12%;{iXAyxF`?Ex*OxQ?jne%Hx7DTlRNt1Me-nwX-p#kK+E zpAp%SVp^&03-`z&at25KGC$wgpNpA`MU~d;!P3ML6!}i^knr$YUo{%<{Ft6tt{i+Y z_jE!1$2U~nuXHJ5?WC%0<}VSM+HO;x_g{krljCzujy*^s0hA%uP?=5f8UrL@4msg+mA@0tNF3F z%d?sZIR6*a;_B(=?+!dHR_3V$+zg2aYRf zva-@bsE6l!LO7^7OCd3A=8zma%}a!OY197PY!;ty&Dx)wAz<>n5ePj#1{x%H7JXn) zpX6iPw&A+nx3AL=U^yoLx<>)v#m9TaEw=tPjy&0-eX6^hTWE}FeKGQunvNx_T4&Ha zSM7;T+m9-Rs$_w>I`#R&B%4huxv=A*f+l^^X~#cb_f*z;=YBLd6PKjT9F6sXG7Gq z?EW5-hxhX0;fd&ZL3(bn2)bKlTPQa_spDd1W74jGp5^BT$%Bvkx(Ir-OJfQ-pG%p^ zNR-C?%oN`X$k*;^O=vzKKlDKSV2uYoJnehut6iCBTbB}dIyp2H24jWj#f_Yjvb z-SSGmUNxTST3sZ@3_;BEuFg(Lum>~yA0lrNj&#kS2)N;oCMT24m9f*1!X&(px55(y zWN~;*s@;@II8G7xsfp|_y)Q)kFH1DnM1{*%Z@WGjS&U-MBKCzX!5_@`Yinp0nyWY# zZSq?5dCz!vq~s+q^RkG(yeI(_p_{j1f{XR&g`*?V%m1?Bz+dmt?jl(AEs*j83cw~Y zMga%JxYpL16*>1h5Ul4K?Y~5j&41R-H&^;a2(NbKtGD+1ob~#XSP&kKZogM{TPOwW z{VF2B16#A&+j@HP$wxk(?fS?QNbRJG47~pAK<~=P%u~84NK5qKZLbyI{MEs?m|peQ z(%SeErSow31e!I&TngPvE3oka*`?o{S0zn**BNR;gb-lS&b z8Yv?M2{BuT!nuc)<2g^_T>75JVJA-8nYAwB~KgR861r3W;J*$PePEDdf|?ygm?E}T4kgN<=1L}?`6 zjEpO%d)hmj%fIKdZG{HS0GooGs}z#m*+n^5U**#iyIJ?kw}_lP8_TjcYb6;o4Fh+c!!#$oVWgI%*a zwL~&t1s=1qRu2q}=vf8_2NSdE2)i*0iEOV3)q8l)3J4@76qKID3e@eb4hGK*_H-U2 zVE&~_Q&qD8QboAnqBn(xF2LZA+|yYdYTrq--QHWj0u`STrMKhsq$=jhmO zBYfvCSlEztOCgn}vr=Q|v4p+O)s6|tFilXl4wvY%RDIvSE(I0c0-tDHjMqvV3!+#nm z!zA80?sXJ>Fe1%Gc{L!b)*4mZ*jRZNwa<~oftH&7&p_;M?>4&>wMsQBtvMZjb02}o zO6*yo*$n%hh;53^uJ-4U+rMLD3wFfvQ%|AA+sVpmanQ6hNQ_b#^E#ev%{&1S-q03g zZA`5Xxtg~&%Hgz0QImU%=h7KD&y`uHsIsitP)*54=*TolPDGw7?|sI>M3oc)rf?Q^ z@U%F^?w76aRQ^RCO^&B1Nytfn`1?};uOg;cls@V3(%iV;!{-bp6xG_D>t7SxriMRRolW+o7Seiepb1j&@P^2 z5r3L%c4(+Rkm7Es-Kk+Q*Z1=n6dnGptWPy2FZK!2q`LllTgN8wOEU>uK?EX7mGgNl z1Zb?}CC}ZgulgEWTfg@@8VA8CWI!0i+0iYDXBSthroKn~yr5MBhy&S3wgl*RMH0Ta z2j2w?y1DuUF*G1GYmjNK2i`F-!^!jTGodTZD#Ref-v`R;JQoj3{faZ^rKr~^rF+`; z(;SNDUt#bnL}hKh$-eCr(N(i0!0hF6-; z*kQ2hPSU~U!I{7`CV<>cPcyVNBo1pyfCT?{9a~ zU+*@D+VzW_2+xhTx|$cW)waB%>icTNjV0<6Wp;lc49EW583+)iK!q{Lzn6cvoIiVD z2vtCwlydT^zaVzn-^ViG{7PkqW2-|fIaq;DDl!=UUn za?ZR*l8E-qI{HoFkCvD7ad2>OLlZD?Jnl=k*lB4bOlu|2YH8m_157&KVgp4*=Yg>} z?QT+z3H%u{z`)K5EJ=#KioM=UDqu6)Y&kh0NkDK)Q!61kaqr$O;V;=P%9`mtzxvh9 z7{S{tSn1R#+6ok8RwVYEvrt&ADeHss-qVKr04{^D+p!9PH&Z8Ia0a7ysY5O142-c$ z(AE$XngLM7q?r2v*xJ$2p{5pB&09WJSu}PRQgP!kwhOQWl_ZtA>LXJtWV0_*GTI=Pk0HpfMQl?|+4=@YJj{O`4)qkLn<7aN;w+L}O~HxF&JW;hwo&-rmx2{AVk z2r4Wc^J_qLTC10P{Z>C;0CwUE>5Fs5ug&*uY)u3_88Oy?fIqMvI19!1G4%BGm6hc~ z*`%1QHx#2CH8i#8adEKH(a1J1R_p4eeiuh4b#31bLrUm$YZVCgx;*C{$F#8J% z-8-_`8RAjCYmdz~nT~F>5v%3y8i2$04V3us?DQpm01{dw?JZfHkN?PpMa0Dw7uk}{ zZP4m6ibO;QH9%sEd{o=U8&ZSwrJeo{d+!<5)Y^rM#1qIPSG*!KPgQ`0>KR^FsykV)!33nGi{w}Vf;^ty`s{d6p*|fba z7iR?yDZ%k8G)FzNhdFccZJ9D5wDS$=s1G&mXkRTe-%=99(KUs`YOka+GcghQx&{03 zk}gx@_T2snSkLZ=xv3cFWHhV(kB6KJ`XKvhxg%%*z|O`Rs8NrqvGI5<62djKICkHS zK8X~Dr=H7z2OFj)j@5Rz(8~|5J#V8xxaE8U=1jZ8Q8O59Nu?fhos{FS$HasZM00@H zh!d)4cXmk*K%6ld>Pgpk-(K2A*82Nz2hU_((~0jTMD#=Zr|=w z)1bN%59Z?(ySlrQa$>%b8`=FR8R1>UFDuAtGG4&9N4-J?yk571qd(yS5C`{TNb|jk z#Wj^k;hQCarZdME#|4yj?#Kyan@4~2j4V=b=}+}$)vufCsOo4NW%=NJm#Tt$HMRZ5~p{Nr_ua!@hZgQHBf79Kc(tnLk>Bg0CJ&3&XHbin8$m4Tj4BPA= zDQqo@H0M72gETJ3uOGhvNuQ#aBW;US?B(Ftm6_`o!@eZ^3lj2ct#sP^+S)gxm)xtD zh{CH~i`Y4J9@_3$l(6o+Yey@o@>?WV7r#16o)caMTMQ%)ighOs6x>zu z7xC}Mlo%VCZ);@rdb8rx7uS zTci>Fs=$?w2jiD-{d`=6nI+%6&4$ zu5rFB$fvGPAY*%oI?Yhmo|rWGg-4BZ-MQD)=Wo?s^608pX4;-^@9}o~^;F+qSOl22 z{LWqHzx*-ENHkq=LtKJ1SW;k`(jz-b2#((d7smd%EI3xnwcNQ~2sCxdOw+f6WzWVJfaOmbm-&dzD%udqGLMu*s;2)03nR zBY1W;7W-Ah*?Ii1oGQ~vNoW7V#P$bFO&VI7($Iy8muEnp#E5H@S^*bejrf$jy&e*_l1hN!phlDhf(0##2^c$tjKw zE-vJ$z}>-iP8Z0^#1;PY{jXG7o&<%`!TLAdux6VEs+975(sC0GyXtf`5$keACpuO! zXyN{5Ecd-@-ZKzewTiwE)HZNTOk;c0^BJIT=Fn}ZAWIv*cuT_Nd4e589dai3+&{oT z(NB{S1B4}XZk?#hpQBLDQY0ZqL1CPX&V`>wtU}-=XS2i1!fvBbMerV~y=7%|YjFT5 zTX3?63ayq$MV2L2K^9KyO5S~Y{g5C7O!N@D)0OrJPaU#V5f^O7STwsdnGBacUlUNE z6)-CSl>vv*FD)%0`=@+nJX)f2M@0l@yM%?4>tv?h+9^CT$k-O*WEc6B#5-2W&o9!` z)2d8J@|M;6bWM19&t+FjGVxWqM%y)BPM%u7ZVoLvi|(|D;29dLpzX^fpp-6ybHj=| zkBFvuE}n`%4ZXA(Ti7k@vsfLlZ`G?n57ZuI4bnJr=~(}n1@#AJ>JRe+DXNQf&(@qf z{QNTJi_4SWVceik00`DR_$$pi;S$0ckv@ZByhXU>%BV`=1zq&jB#7zH|#ji029`#kRz zxn*R(t_n-%RXQY$q}}~=^TW~DpFg$6g*nzJ^|MD*&fFsni%q^lN0wF_=!%bN?tZQa zFf|2I8ab4z@>yP9P@%R_BoJ+wpwV@O$1H4(p6eO8LLm8xC5^xwDF@@>7gJ4d;q<`Z z4CR%rpAx;YLq$~{-%!3iJ>aaM!;VG$G|x7)&prK&$V!Lj;pmod+IG0#vcV2iR1@wg zC@(K6QH5t}@ujixv7QYjhb$I{;>eu}>5>lA?_VE5-D=y<%ctK(R#ste!>Hj!)L)N) z{?AZ_AnuU{HNsM<3(#xN%+2FR(cA^6ol^G}5|iEQNR?RGQ}S@19)GA%A8E5YV4|p1 zT8FR=u>OH9(c2rCne>e!av<96V^@YJ2S!oy6SYbfT1_eNWMIPGCO+j-@8IWOFEzIb z(`@2x{c{c}zCN~fVs*tCn$|kaM?i(Krp9&kpw)Xq68eb^8N8uZcDJe=v3uEq)VCF8 zhKfJl^r8K4KMef9{l{N=TdQ8eBCd8nE7IWC`ju-F)9dF_QZw}W-+lew@grY7`@Q#e z==$>qp+w|(jSCBrQ z%NvAWY?(ZD?mKITXGnsv)_e&fmV?y|H)ZnNy}g8>@~~LgA6z{=JpD_^TA@j3d3m2{ zTO0W=(|kpzs|liQDLMh^iSh9%Cg*ReGMm&pE?RV;8s0ZIKhz53<5$t+%59H(;p;og zY%ZIh&vt9#rf3qpLD2rCH^i8QwrQmN#3aSrYm}5%;x&-poC*3-YLuA*X zXPBx;CgMQ2(faaUiC@I+M(^c9D{|A(UkPvo&_I5tY%=VDscF%P*0~hG{ShZ_)X6xU zP|nZyo#hAS&VfMoR?+2HiqX-+*t*s-0lu4mLmfY{2}19X$m1)WW*6FU<+c9KpOyoC00M_8b+ zV#QN4y;*QflxTf&%5?$6oVb!CXoBIqA|4$%M#79ft6!DM1O7JThVYYM2Dq}T@e?z> z6md-9i;bk5=A(uqWz~<96O-XdjE1{c51v@xE}vzGcZ<5x7jiA((M-n%RYTl*B{St# z=zcmEQ;VVuyVHV?{n7R@w-!7CG~ii7$fh{tsFH!9gYnd6Qou;_Hvok86VQVD*YcV9<|eao7mRqBuz0prNS02%?yp4zpUhS9O z%-y&FoW70#BJ-2%Le=3>Jb=OKHxaMRj2|9l>*MAA0aV;;ax)J+DE~`&#DA>qoJJID*E(2-V-MEy5uCJAm3#_kaV2rrN0-}8D@7l6XES-VU1Gba>7_FwW z$tZp5;egQ#)6|WSv(o^~ECWe)f|6Qva^$97{_Nar5+NzPU&XW~2=^qax&CCleemr{ZG5Te_?aIQe zLnbUSy{r@xcGXKGH72I(6~_7q2sa5mdxuXg;DlOu%F5^-&^i3;OCw+Q*XuGmhAKZ` zGGY5sEH=_69Y7N*>g8(Gozor7Q;&ApQY~ZXCcBBi*P4*gVbbczntM~ggR2*dzMA9# zI2phf>}#OaQ1_?M?Mh#&$-ySd)rSPM4bDwk`mOf^@GfHr=6Fza%YXD&0VRw3jH7xE z_)h-HJvn{s8q06I3kJCD(=K$!*a`OvRu5FXzK6vS5nJmW={i;&*uQ5Z8fBksPvwuNpc6g>j|lHd9OOjb){RH*U6fcPBcIS30D>u1ef$ zD$(2Du%iF$>Y%L0JK^9TlMd#KktdnCib$5YzHgR6FzDf~4!ZMuSG8rMdW#r5E_T;u zw>SzWf-502N)+Jz{BAi(H-aPCKx+kGvs`HY(WYJV%N<4bIPPuom@$aIzbdI*5*T2G{cmHv`Kq6{;;Kw=7b;bG=D>QJUgDSVPNMOiKYY{Our{Psj~&sXnU+BoF=Ij z`fP0I+7S9CN~C9r6maYIpB(Eck3#cfQrr2HM}|GfieiOX5SW--9L9UgULkccIpgR& zL^yPB*Ia9tNT+CVDIuCnvx{q`M+kw3&2%SXL($E;XFM`fWv_Njq=Ys#c3b1N7G*p( z{JTZQg?AP!W`#IR-aG9sjbh99Kmdv<7fgIIr2 zgiGc+O1v?l#M6ForU1co7uv!-3iUrYnb@F(xTIonFR|NvZT1oKJy^%)#)eghjA{V? z4={u+QFQc#JY{k4RN5oj4y{)Rx~o;JU}$PEVW3hB_R3gt(c_Jpihh+N540L}qR*mH`?N&Qg%MF+ZN}IX0p?^ z$|8cm+j29G9qAPfw#jflERX&(@vUTbl?GXhs?LJMeD2eDMA6t2;(b{^t-I%ZrUr-m zc+pIVEpdxmH6QQ!J;6uNl+`LXJ2W1cvWxn6bcqT@r6I|8f_m({u7|A|iz}nZ^Zayn-u35CpKQsvIc*LfInqYcv0l}_~M(5jv7jrer#o)Hy z?WKW7f>ubN60-_D$Sgyc<&FAfH4N7U89Sxkz9yl8hOACHufA}Yb8v}IOuYhGkNIqCvK`J*e@8;n_>Vk3d9(%pK(ADMVwpM!kt+m(Z_Y{dl_|mA- z#~G)DX&0MYSXTi9xwy;~n!ip_@QM{lCw#?z`nj;e#NH5u4o44vabo9mB4uPW#3>z? z!lKZ=i-gU}%IE!+z>uKPs4cN{H($&y9X7a{TNF}=rVQBih|&)WL_|{3yyCP}E4SB@ zI!PLSG4y9sk6KN)ow4()H&6RL&R88lp$wWr!3*zQ%<(DMCaPvv3s@FEI;`5)vQO4o zT5(>r&~!dzu}CvRX6_c1D2(8f;%rvE`_up{?RCJL&GYNT;f>}Qb&F<{S5v$rOi}UZ9iyg3Uf9UGozNfv&M^^K zJ@K_0fW<-%V;?5I3kFiBOtudmICVbst9qyv@Icq&&F5}mJ-^`3_ii~mr5HDL@>}~{ z9sf?~DpfTsywjah4!SpMdP2EhMEOR3xUw>lO<7B8qtoyG?V6^1aj|=1U&POc^65j2 z_FzNzlBM&ilZu>-kqNAU9}7F2lx{40s{e4WW>r32#WheVa!IV!XnrF+ysobJDR$_3 zK?B9vu&?iVJ>SK|gi&SvM8d|X4oiCilNRDP-o^Xdq{`96O#_uk=e$uSgW@^1a3TbO zEXf;CBS~0zu>sE2HoLqr z)lgR<@u*gSuE&?Hj2V{nltIhejZF{$yuv)AM=H5T0r1`7+r6#D)f7U)Xfi(%caL2d z=_FbcD|!yHgei?;~vBxdyxrt&X@6n{sZ?SN;oIa z3-!TK^aDI`!_;i^G{P?vaCsw62ImEDe`;mV=hQITgKgq`Q0ZF({oYgDbq z-kU0JD^v&3kK7M!+R$@;g{sd46?>TrOaF~i1Wa#(NdQx_5pPpAt7{g{2(^NS7O(fAi55Fsq_wXH8)aMmnMuSoEA&aIPcSHvameW|{S ziciIxCA!{+{gz22-gP3y8BxM<85({R;KI>8s!)3LN-&^pcNUB z9qMZ5fij$Lc{x$oOp-)sMa@qi{l)!H#Cv8&=J*r8f|&KRF`YeR=MxBYm7~T5M;~M6 z8dEs#e(dkooPRPYF&cZ^R!SEE{*Vqet3OGQ-g9BGzj>4XWfm3!&ovfi3#X5Qs=veE zB{gv!>~CHC3eNpat^zPE5q`FV?=BsAdZvl%lhE%Gy0EL);YtFa3E5zo`^NuZEMWk@ zVcWGeSV8XG|GE(kz|r1WwE7p%%0Kx{{x`&5zX`DZzmdlL{iMJ7&HTfngMxy-Z~bZ= zd!xNTu?MX}e?RfxBr@*f4tuMw1on_6PHqUx_FmN(GgQFd^3UTAtwakj#7)5aAxh<# zJN=(&G&?j|2H+*zsQ6L1%bW>1)S^9zjo(JY7<_m>_HXsSIZst-M--S z1di4ZNBvcQ5dhTM`kQf|8 zpTpR!$dOl!sV^=cnl0=+nfi*sui(!*SPPFOdpgsj*`-!XJZIEZf@H7fl<91J+4a~~ z@$sm+z$YQ=*thTj>2Va)afbn^3<^t=4dz4NHwjQ=mvxv;lfq=k*za89!MaH=%ualL z0_O|G>p0oby_cQehTFyQ@G4q*U~IiGvxHyA3fZy6SfDG_Z6bYp z${$*s-iLGqJJ`}sRqQEIeJIO(-{&gNi16?nOtEb@f0ROD1YuI-E8kPh4d7e~xzKm$ z2#xwlA*l1>$R}G)k2hyUK^^DZCln=p2ho;3B5vuDftC*6zV<2wk4ZW0hbeCgx#?FX zvG3Ag7jcHfMtur%uc*0Ir6goBFV?~Qt=3JFmFz<6tlN&kUrU)jMZukEmusKBHZ%~G z`)4iy+SorUXb2;)a*Exw4;isxW92j`LK%3rsu^bJzOS4nAkPj!$*{FI!7vDSgY~8_G zB5r?RHpWjyq&(vBVB^~^9irb%-Ze#NvcOV35Dxc8xRlN9h2XIwbh~#A4-c zc&}V()@KYvP94_0WdG~~BxrkkH)23})@gdLyMWnD$s=>?qiuh(m+~&!wnZ=@w&U`H zy2vPZ;I56{ixJqZmt)@#-}f>t+S7hSZu1-8KBnYWu5B$Sa6&=(`==vIX$XOt?eJr` zaibc&U2D-x^`ToX793;iP99F9mrZT&`E$QKY5X_2R&*pYp{+mmjT-9b2d%UpELta{ zz)ncA70UbVc)C73naV3fu7GP%mdXP#Ix;sw_uT-hEGjA>s-|F16;}T+WK0Mgwc6jb z!!`otox8+H$P)J-947MvXRr$S^gE#_56Nv$<)kG)xOVOC&h;9 zEte5LZ+jF_1Q4gkMwC2u`3o#_fBd=Kdcf3ViWiz?=a#+45}%FW-+av{f}`?WTaDhc zmaFqS=Qks16;Pv7VUzs3f-W5QpYSwc_tt-%MJ8A zbwdO&2O1F_>Kdi%b0nR%Jt`Mv>Z^~`GB)AvWcB7-*G|OGXS>#7%dw(3xmp zrYL7Cj2gERuXJN}+&h9^-TFIkWR?%Qf3`6bf5m~_V}FpjzC%Ob3$<%Th%v_iMk>nS zWUH;XYdVOxaJW2b5c7wfF`bh@7pA$VW8PQMBc z{dM zCr2piXm&e_xN0Ovgam=9^ zYRHGaB~3VW;YD}CK)ui(RFu;GOQ@ZHM8JuczE_1SI_@(&yf>qxnm&MSm!s6FDd~RFdOKV7>DqH7Z53m=jvr{- zi%$ApVc!Q!6BKW;Rwf9FY*%oexh}N-&_~5oX>!YU8&oo-ZLn`PxaQLkBozoaBsZf| zM?WNho5|XWj!gxoQC9Jr>t}QG6^Y1~$a4X=0Cq>}RFA)TGdzGgL&sUO+b zvT_1s?=VypwKaPM1pWu*AA^5WxRDs#+130IbpMow6G<_*?a%uvf3q6u{sa6#eXxkU z*@qU6$4h0MqEkDH3QLn%7$`#XOG{%pwpBgg;2=d2(AeLcH4oHacP+30-y~2R0=|j> zd}$!s`I~z6e+5bWo0Rdt6sv$O{Fh?&zih?-hqD#`ee(RKlrB7R0oA+bxZWqPi=W9D zzw2UT@(T0`GGw?a0@(Ui3yL}|E*JEYQ&owTLVK00A-Ozy&Ua$L7H@Rgk29Nnu^tu+ z4z9C}gY-y^PAx?0DuG>a$n4BoZd`2mZL=>grZIAqH*N&q+h)>IP78eXp;ZKpbT+y; zIgXoD^EM(201+V81G7Tq>c1ewf4=g}SET3{wC?ume%4{JSJs# zecpG}&xLf=@gb?M4AM4?wF;@OD|DLQo7K?(XpVTxyU;5Id%lGwJ8i!A@#v}Y$HF`) zakajt_hrA{=SC@6ef%Z^u8@iOW#s7mUJHbHS+LX-e;YHWxv&dy?pWw z!{yavFSar(k1=Z@4FYnlU<8qs+dpkyd)Fa_Yj68h1zec>@tNdcXAE6mwg;{iWTQ#C z=QQPn)Lv93#RlU4B121)Xx1RLm^S)UN$Pmsy>5S_M) zR_+ALq{i4sH-e0lG9u*{hN{7HscRY`r2Qn=4c9cz$`%A}KasX%9+jkD4|{t%!*@GI zjiyoYZR{8kcs7dE~TCpN|Hf_T&xD3C$K+v{MWph zv>NOt+t6y}>$gn=!k7CC5y+sDAKJKNNH~ z0<<_6AzBAA`NRRYSWjY|bc3fH-6C0wWO*$sr93}xb1PK*lkRGG)fay1^<{+*zlw2Q z!h<*zn_{EY>UG~0MNwgP7U>$!yLnrw>x&AX0z$vP7qV56tMc!&jCdeAetqmi_0p&! zFfp2oV5W7vExV;~5_yaM5|8w#+PjBlDNS9c#YbR8$<(m8SYoF}llArD?Cr_6>_HXCZyB0!ydyfq)5bJDi#hsj5 zU-PFw^hJe{Pj|6QPPqQQuVS4TyW_Ce_lIKMt22|C*az8lHo!P`=BAfK#kioO@tf(e zY!|SwdaTmHmlXE1Z|v+>9SL>2$=oNa91TqSQ!l2*{9&&c*G$NzN$5iwtfLp-vRpzs zO{4u<%AIm*`f(^3*SEiEp{;=4o0pvJjqZFseb8D;_!qx<9)!lNlSU!i^CORw@1S7J zmkzzHx?2zWSaT&un+Wn^FWeH;Kh~i*Hx7S6VlSVB9FjHTifomLb3FTwo-g)`TI8}) zBz=SHu*n}3)FLM@J~{1xby0U$YkBF^mLfv*zJh!aRM9ryCE^C)j5Jc(9D))I=4yoZ znL|(|^=Kd3a^w4cg(@YhX+n{=AAp54>AGT9H^XgGd$o~TKkm(T(#W|!17B&1i_m+> zHz0?qupbt+m7)pJ|8R26Z>qTv&WmfY&* zp31H9d-jZJ6F`%cxbhH`Q}`7e7Ty^o>6Eg2tF7k$ppiDYJR?0E(iRN`98`V;k2 zwdR{1H8)u`)eoqY^@u3h%Q;&tUM!~xD(!Ckf-BDPGuwPis+FvGe@sKiuA~c$ZaUal zV-wfi#!VEqPWujV7C0Cs`aDT&7%YC{F*z_yey!TO8y-^vC2%L|ReJm? zJW|G`9yhmUFtFfrGS?7N9&?m<%F$}uqWp~(FkDp?&tIpviqKN37<0dBPP^fZrH-8s z^;>5`Qk=3Q$G$x88%k({h(cG9lVc5TbkkApjqM-(*9?N)t9d`q>Fe)4$dKV4D8;&$ zz1o}&Fsxw+s%< zbGgwia7_9}T&{j0^)(5iU)D;(AMRBy$@;&5@~)ie_oMIhE%rn`Ns;F)7;2!}P(Js& z{rrxBl-8v5wC;9LT1)7H0S4tUqZmoPPc!;f+tH6(@m;}TTONsO0<{p7fdj%X6v@lG zojp{DvBB`N&Pl%@Xh>eQ;tknq^uxnK|6;zK!CCH49_vB%Z63Y%_&2pDKQQ&LzJwdNi-N@*>{jFiyDyL);n7 zJ8V+m2oLA&b+XzhsM<33Hn=u^rJLV%4#A}ODF5WJnQDnZ2Xj_U$l~}Sczid%D)Xi^ z@5b&DMjI)-LW>W$1zsPOdW}$*(%Oe?=g;-?Ykjq=q7{>K64G2(u$JiS@0uKOr8DA{ zv|mS-Je{a}YIYZt_c<+o-i-+Ks&Q}L=Q9N^tc~~1 ztEul0^B|EFPDr<&6-3pzrX_;e4eWCAWa{&$`y%2N$qChln(JIp#E#t!zesG(s|dP-ZW5-*%}kn-fD+HkFR&-xQyEp8E)jLM+a>VR}&76H{1 zNGg>m5?0!4Kq-Gq#z5$m?l!sVD@zqzAFFOwPIjg#KH%q$O=HgDoN>|p;OpHgIuM%D z&C%EOkWlvOm{30X3pXM(5aIkJuq&NIdzIv2-m9lKJQXwd=!T|!1<`*XZD28H>6rEi za;MF-Bti#jCZ`0TTzPFRlo`4UZWN}EpIc1!S#z=D_MAwv&p!;ap!znBwC8b4`?s4B zSN}+b2?|`R*a~sI>UDcX*3ehYdE9$2sJ9y3WT@d7__iv2=tws0`7#(>?0rI<7xi9k`$(ij6KhVv6q9l}9 z6qMC%?o~IoR!3{Zl5^^=MzyG5@G^8GokL;&EocKtz)7en_pWE}ZFs%bUxCvkinbmY zk1-WfX^>YVaRVe$@j)h&DrZ-M-*Xkyc+T4Gxz`%?r6a}%Z}6IoCD=mS;`|n`VmpN zuQRm}CB3x^(ru6!jYAQXJ)xuI&fY`y-EXXlY3g`CUu_JRfVXhPi*qlv$%6-{1*pM4 zbB^&nvmYVP08FgidI<&!O2P$=J&sxmm(1fyy+am$wX3RH$c6n3T=>|02z;eN zhT3mzs+$leU9*5i>1ryoAInPNM}Cy^rMU3xT}W{CBnV9kJf1Je^L}I|S)sJk?bZP$ zmCs!<_T}y(OID*GHn{RQAGS8%%zkGVTzMu6J=|Ph)hs3^@+IeOS79r?mq=?f0*~(> zgC-`MM2-$Ys#z3{zwO%6_Z!3oG=`qt^$?D070S=$nlg z{>nm$9p&b-Q-scg^8)UEC=S%|i)k_CuN~Ze4QprLwm*XWI5Z0%NO^VT>GJ%hbz_kH z6tCw_H7%oeH{&gJv%#{0dQtdd6D2d7;{%Gas+el&iJSPQoT@CPgU6t@6TzA)(9KQT z5>&<#{8DyeSy`rpTb7b{4>l^@v%Qnw5^*5ZMx`FiR*Z*N)L{S#hZ@7!J$__NEfGs0Zv1{+(10-5Vfs=mN4*nZpMVlssMQp?Fw zKEt$O=_0p?aZeLX!}hh)=cNkbdWnF!d0dZD?LGnTWlFnB2)`^$>D z{kEhaG%3V)vY$&Xl#e_bU!GKX68hO~Ah)aleN|C@-D8fAY1pRMWp4%9%1fPH{rWO! zqtT{q^G0S9{Ne^v^A{TdPaAN=EZ9)bEW>Xb!RnI{f@fCpKV`hQw1l8~yE%qB@4k=Q z+^8tBtoB#Szvhag!sNv$9*#i1Ew&v_ZVxGwGgi zcCX!wosmp!?9inL0Vnh!UG0acwX(S^`OT>;#}uOfP-9ZonUL5f>Vr$!Rj$#KCq;eN zMFUYRUAw&0rZm!;ndee`E}5HYdb79oRK-X4DOJhr+SM&~t#(Z)eFQh2#Vbp(GW1ZH z^I{eC_I{HZ($c8vMn7DigUM;n%*wvr(|&s@@rk&|bPLYcg%CR7KK|8sJMnIB;9O=pb8J2|V|J)niwY%crj`F#NoFd_pmE39Nykvy-G8Wzm3{Y{GHT4P?J#C! z8$ZACFjSc$(cUZh_?hEu#iB(Sz)nIWpV}tq{aR zr{nkMX`c?eCePO0qkk>Pe8f~&-m`jYwkqOqZI#UH5?DviN;!B&OkMo3rhT&@2D23D zu81=b4Y*?Ht5y4&JZdy|ifYq;uFmF3$v}IWazkoW>bTA5^tvl}5hwgNFmdu)> zpcUnN7nJ?gWOG(Wo6-!E?PmU;Cjj!E}@UmqVX;{IJH|}3BJAR|bd=EnwqSJDj zUGVT-qJsX(lo1+lrsWw5{NN4?Td1eNLi3W_;f@|0H^D5sUqdDV<6H?9dTQI5%trHO zh&{`obrl_2+hLcKovlvoPQKw8R2IfBcLu#-Q_h1@&lgLybvHE91iFJf!GgOI zZW-0HD5!kHTC}wg0L=2eF^ou!)2iLzYq^!5FWB5!aIKGsswbu=sb%irQL)}S#q#?y zmYJ5L9~9>~w|Rq5n6)j}9^;gmaLf$6&6L{T?!2I{Coje+5x#cV=hqwaTxqeC^V$|Q zykVUkvvaM^JkoXdNgy>JCI?}r)m`7;Un{eS>;08U+}Cvz5j}hp$ywlw^yOi4d&Aje zDQ*4SXGw|DM4{~Ts8uzc_XKNn*9Xm)Ij2d;<8MaaZ(zCPw7b4>qPGk-hb zpjB87AJ=`lOhqvIa%>zMD=4fpXCVb&LEdXkS*h6Gn$?S5Rfu!j$N4Gtygger52nv) z^pZoQP;-BoE^_`e7qAdiGMgG=Ob{avCTu-!gMXVISEy~AEpu|?N+X+y)la$OOX~58 zA0@~+c)cc!9iB)^DGz<_LhBt0B?oOPZn8z|uUd-JlJn;j$VRsV>XFAlt!9{5Gzqturx)LZL0{8{vtYjn>$ z7Mk?09OdLPr5gC3xp&qCQOir0f|JJ;ei63Z_Cv;m z(@80ODE6NBgESJ3zH}hxr&(u9nWy{(Zd}$M-c%i^KsSfaCckKjI%Q?H7n3mV94JD4 za4@(ew?VI+-9>qg=T_K_$BsA3lmz-7Z>8*3*%h4qYm7o0Nw*$*BuCi>PZ`SAlJ;Zj zW&dFQSst>v@q-!eZn;lU7(1qe#*n1UhZLZ`Cm*z)DT>8KSnh?Cxg|mR?FfYG6$)=CtCxt%VV{aFDjO@{&%S% z+P-HR-WPjHXjP%wSSvEnu-Fy+_LLlMJOz*Uf3CLPR)*Q1{z6zE3o@@)qTwMId)FfL zrJhhwBe~2(X$o`^?S?q8*fQM zXKU!BEJcpmgc0}RycIu8kc3-c>)Nl3!n2L8cGEKx^;Ayc()JB;JNC7-Ex429PaBhdIh^{yqe^rh#K?|D``>}UH1-KJHG!zgEJAJQikB4OUbWD-&$sR=nT)J2*R&ZmCDJ}C z?8onak4)Pgx4OH%OgkIPlT}%=X!`avlb)9 z^lvYXWl&10hxf2n<{5Pp4gKrbD5J(NvwcWXR!6$D-Fo*x^RHiFB(@Nz-I_TS9y7Vx zDD|;pbvm8BFpnf*i^^pL_akGsXIb&2=65qkKZR(;DJfK~A4cL+L|20X+d8n1>I)Ah z^ln7YdK!M%2^KW2EfI;Au@}!)Lt4TsLUK4J&?BtV&>?h%?~@xz zJyro$lPT;{<ETvZAwxfjLi4vP($}_XR6;B3{nol* zA*8`0yj-E=*SXV5mr9Ka3meIBtzHGf=b(xAUFOIawbZ2vIIbYrw(sX&`i<@Y_wDa? z@X*5u;kp&=8^NJV3e2}TGET-fDj0=x>&RF8+OsETn-=V1spA7*JlbBL!F1Ix?IBRG zw>nwO;%jg zl-3WXMG?@3wdVP!9%PiyIshB8_GhPEnKv(pNI*LbsoOx*vc9-jqg*p(#t&hvG0K9XxGJ|EM zm(9-o<(zk6wFslrewY6BEM{x?2eDqn;dLB_HzEt_Y(qCu*oEG%P@sOL9Gny-oNklZ zU=p$RvS!5MTe5ik(Cxx6@#?S6u8vu4BxA3cOg4DUh&JLf#2!t)o^CYOuD@|V_>h9a zgiycvOp>t|Np!c7W@Re}LXE??UkYRcmRVl269iM(WM*!vUECHGsmMxDSP^2nae(2i zs9l2{WJN%SyqpbI408>{Y?g{`sc)gG+-2Oju>MqXF(GZ^?6|}K;P&6=s+~{2~gP1DF9~^6eiXSFbrRLQWJdwl)$LqPbH|^ z9R=Oz16m{RTR7tG0e3$B$T+%0lY54hPJmPsPM-x`QTIttkLv6=2D)F#xG@Q6eEn*h zt;}FazO?!K%HKcoJ;v!{`dJVtUfs|LE9naKNduT%Po+0r8v^q6k(}Mkt3CnT;MW0g z6VP{CCt4&3^x@C?LO}LKM>k+{^8Hibr@#N~0v_=)gFYPetZN|WDCm1(p|>Xp^e&4b zorYlMDd0{wvU9kS+B8dRC- z(~BTb0v}_uDv_beAdu=CfUzU2)*Fdp>{cQ0kLNGuZh}7i#emBJ-I;UHJpy`eU?3|4 z0)5wENXnnw1FZWPsFjA*4wgFsjUeyuyaq(E6wGuO9=QOlo&)fVztbC=o13cK0QTfI zu+lkxfcwDR)E-z2;GC6bTtUEB9{~b+OmocT1G>o5OEyHta2^GHy*b0q5_|CMKa3gJ zA~i-t?=fPA;RE)hnPCbR=utdF*$itF6Zc{PslH`&Z2&r~26P}MD3}QlO-%_*{O`@; z?y@subzO#)6uEkNd6)(Ody>M?O#*-cRePJU7zktoXI#XwxHz#50$Y^#dyAaQtj;sE3e>f(h=5mI0Flo#v~ej_<}~O!KsNxa9vxr? z=-?7-vNm8Q>lYc4sv#s8cQSMg^8SWUVE&!Mt!yUtF^ZHX6 zcQSMf8}-p*JU#>vrB4GPaYoLZu{uLly2W^cg@q9hU?=$PXFX zxF(@;Bc;kvHSadC2fYgfCd1@%Wb+$37rROHT@8_5aMs zfWlrdbaPWp3iv{K$mq%fT>AHwZEs$N>vH1mNO6Nee96V7#V&+%AkdSmm{0CACrcQb zz>N@VAP=;F-(avrzv~>@V+Ee$yf5IzQ~g*X8z6EvLmTm_xuE;vz>YF>SisPMuI}Ot zU~WpkB{h%*&YTNZffc9p>dS8dkKg||L-`K0m@0> zP&xiu?ePPH{~po6>G9tq`oBl?|Cy1qu9Ksq?6_5#MV;pw^j{(ArN&8?>7#K>zhCAU zzj+9kodP5F{zpLlc(Uv9G@*eJ1pXteUifQ{BWv`F_}_uV_fNmyk2|IR5ndK~KLLWg z>+OI4KsYG2^ Txfs|S2DXn~{an^LB{Ts5vrqxE literal 0 HcmV?d00001 diff --git a/docs/assets/panel-redesign/evidence/setup.png b/docs/assets/panel-redesign/evidence/setup.png new file mode 100644 index 0000000000000000000000000000000000000000..25e002479500756d5b9428a40416f545993d73b8 GIT binary patch literal 55314 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 literal 0 HcmV?d00001 diff --git a/docs/plans/panel-redesign.md b/docs/plans/panel-redesign.md index c8718ed..2735bcc 100644 --- a/docs/plans/panel-redesign.md +++ b/docs/plans/panel-redesign.md @@ -513,7 +513,7 @@ only when both are done. Every stage-2 step ends with the evidence of **Stage 2 — pages, in groups** (each step: partial calls only, page off the ratchet list, evidence pairs) -- [ ] Signed-out pages: login, setup — **Sonnet** +- [x] Signed-out pages: login, setup — **Sonnet** - [ ] Overview, Health, and the Account / Settings split — **Sonnet** - [ ] Outbound: domains, domain, domain settings, application form, shown-once password, delete — **Sonnet** - [ ] Outbound: log, message, DMARC hub / domain / report — **Sonnet** diff --git a/docs/roadmap.md b/docs/roadmap.md index ff42b6b..b776bc7 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -39,7 +39,7 @@ in `git log` and [CHANGELOG.md](../CHANGELOG.md). | panel-notifications | E-mail notifications about important events | candidate | — | — | | delivery-log-storage | Keep a message's `mail.log` lines with its send-log row | candidate | — | — | | password-reset | Password reset by e-mail | candidate | — | — | -| panel-redesign | Panel redesign (accepted mockups, design contract) | agreed | 15/27 | [plans/panel-redesign.md](plans/panel-redesign.md) | +| panel-redesign | Panel redesign (accepted mockups, design contract) | agreed | 16/27 | [plans/panel-redesign.md](plans/panel-redesign.md) | | schema-squash | Squash SQLite migrations into a 2.x baseline | built in panel-redesign (stage 1) | — | [plans/panel-redesign.md](plans/panel-redesign.md) | **Recommended order** (not binding; owner, 2026-10-09: feature order follows diff --git a/internal/web/auth/handlers.go b/internal/web/auth/handlers.go index bfce960..1379333 100644 --- a/internal/web/auth/handlers.go +++ b/internal/web/auth/handlers.go @@ -7,6 +7,7 @@ import ( "github.com/mixeme/selfpost/internal/store" "github.com/mixeme/selfpost/internal/web/validate" + "github.com/mixeme/selfpost/internal/web/view" "golang.org/x/crypto/bcrypt" ) @@ -74,11 +75,7 @@ func (m *Module) HandleLogin(w http.ResponseWriter, r *http.Request) { return } if !exists { - m.view.Render(w, http.StatusOK, "login", map[string]any{ - "Title": "SelfPost — Sign in", - "Active": "login", - "SetupHint": true, - }) + m.view.Render(w, http.StatusOK, "login", view.NewLoginSetupHint(m.cfg.Hostname)) return } @@ -94,11 +91,7 @@ func (m *Module) HandleLogin(w http.ResponseWriter, r *http.Request) { } func (m *Module) renderLogin(w http.ResponseWriter, status int, formErr string) { - m.view.Render(w, status, "login", map[string]any{ - "Title": "SelfPost — Sign in", - "Active": "login", - "Error": formErr, - }) + m.view.Render(w, status, "login", view.NewLogin(m.cfg.Hostname, formErr)) } func (m *Module) submitLogin(w http.ResponseWriter, r *http.Request) { @@ -196,12 +189,7 @@ func (m *Module) HandleSetup(w http.ResponseWriter, r *http.Request) { } func (m *Module) renderSetupForm(w http.ResponseWriter, status int, token, formErr string) { - m.view.Render(w, status, "setup", map[string]any{ - "Title": "SelfPost — Create administrator", - "Active": "setup", - "Token": token, - "Error": formErr, - }) + m.view.Render(w, status, "setup", view.NewSetup(token, formErr)) } func (m *Module) submitSetup(w http.ResponseWriter, r *http.Request, token string) { diff --git a/internal/web/view/fixtures_test.go b/internal/web/view/fixtures_test.go index b2a1b50..a9c6151 100644 --- a/internal/web/view/fixtures_test.go +++ b/internal/web/view/fixtures_test.go @@ -16,4 +16,6 @@ package view // restyles a page adds its fixture here in the same commit. var pageFixtures = map[string]func() any{ "components": func() any { return KitPage() }, + "login": func() any { return NewLogin("mail.example.org", "") }, + "setup": func() any { return NewSetup("0123456789abcdef", "") }, } diff --git a/internal/web/view/legacy_pages.txt b/internal/web/view/legacy_pages.txt index 3ca6077..88cf13c 100644 --- a/internal/web/view/legacy_pages.txt +++ b/internal/web/view/legacy_pages.txt @@ -23,10 +23,8 @@ help inbound inbound_delete inbound_domain -login mail_queue settings -setup status system_log user_delete diff --git a/internal/web/view/signin.go b/internal/web/view/signin.go new file mode 100644 index 0000000..6775666 --- /dev/null +++ b/internal/web/view/signin.go @@ -0,0 +1,53 @@ +package view + +// The data of the two signed-out pages, sign-in and first-run setup. Neither has +// a user, so their Meta carries a Title and nothing else: Engine.Render then +// draws them with layout_signed_out, the split brand / form screen, and the +// page template supplies only the form column's content. + +// Login is the data of the sign-in page (templates/login.html). Host is the +// name the panel is served as, shown above the title so the person knows which +// server is asking for a password; it is left out when the name is not known. +// SetupHint replaces the form by a pointer to the one-time setup link, for a +// panel that has no administrator yet. Error is the refusal of the last attempt +// ("Too many attempts…"); the page shows it as a flash above the fields. +type Login struct { + Meta + Host string + SetupHint bool + Error string +} + +// NewLogin returns the sign-in page's data. host and formErr may be empty. +func NewLogin(host, formErr string) *Login { + return &Login{Meta: Meta{Title: "Sign in"}, Host: host, Error: formErr} +} + +// NewLoginSetupHint returns the sign-in page's data for a panel with no +// administrator yet: no form, only the way to the setup link. +func NewLoginSetupHint(host string) *Login { + return &Login{Meta: Meta{Title: "Sign in"}, Host: host, SetupHint: true} +} + +// Notice is the page's error as the flash partial's input; it is read only when +// Error is set. +func (l *Login) Notice() Flash { return Flash{Error: true, Text: Plain(l.Error)} } + +// Setup is the data of the first-run page that creates the administrator +// (templates/setup.html), reached by the one-time link /setup/. Token is +// the path segment the form posts back to; Error is the refusal of the last +// submission, shown as a flash above the fields. +type Setup struct { + Meta + Token string + Error string +} + +// NewSetup returns the setup page's data. formErr may be empty. +func NewSetup(token, formErr string) *Setup { + return &Setup{Meta: Meta{Title: "Create administrator"}, Token: token, Error: formErr} +} + +// Notice is the page's error as the flash partial's input; it is read only when +// Error is set. +func (s *Setup) Notice() Flash { return Flash{Error: true, Text: Plain(s.Error)} } diff --git a/internal/web/view/signin_test.go b/internal/web/view/signin_test.go new file mode 100644 index 0000000..0104d2a --- /dev/null +++ b/internal/web/view/signin_test.go @@ -0,0 +1,92 @@ +package view + +import ( + "net/http" + "net/http/httptest" + "strings" + "testing" +) + +func renderSignedOut(t *testing.T, page string, data any) string { + t.Helper() + engine, err := New("9.9.9-test") + if err != nil { + t.Fatalf("New: %v", err) + } + rec := httptest.NewRecorder() + engine.Render(rec, http.StatusOK, page, data) + if rec.Code != http.StatusOK { + t.Fatalf("render %s: status %d: %s", page, rec.Code, rec.Body.String()) + } + return rec.Body.String() +} + +func TestLoginFormPostsToLoginWithItsFields(t *testing.T) { + out := renderSignedOut(t, "login", NewLogin("mail.example.org", "")) + for _, want := range []string{ + `action="/login"`, `method="post"`, + `name="username"`, `autocomplete="username"`, `autofocus`, + `name="password"`, `autocomplete="current-password"`, + `mail.example.org`, + } { + if !strings.Contains(out, want) { + t.Errorf("login page is missing %q", want) + } + } + if strings.Contains(out, "notification") { + t.Error("an untouched login form shows an error") + } +} + +func TestLoginShowsAnErrorEscaped(t *testing.T) { + out := renderSignedOut(t, "login", NewLogin("", `bad `)) + if !strings.Contains(out, "notification is-danger is-light") { + t.Error("the refusal is not shown as the error flash") + } + if strings.Contains(out, "