From 8f96a5f2968e35cd09b87475c74aff2336447e90 Mon Sep 17 00:00:00 2001 From: Gronod Date: Sat, 16 May 2026 16:17:43 +0100 Subject: [PATCH] fix(security #5): remove plaintext logging of Emby auth response and user object MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The full authResponse.data (containing AccessToken) and user object were being logged via console.log → written to server.log on disk. Replaced with a single safe log line showing only name and isAdmin. --- public/images/sofarr-logoonly.png | Bin 0 -> 34794 bytes server/routes/auth.js | 4 +--- 2 files changed, 1 insertion(+), 3 deletions(-) create mode 100644 public/images/sofarr-logoonly.png diff --git a/public/images/sofarr-logoonly.png b/public/images/sofarr-logoonly.png new file mode 100644 index 0000000000000000000000000000000000000000..5485376da11d1053d00313d7bf345b38134afcf9 GIT binary patch literal 34794 zcmXt91yEaE(+=)#!L@jCDNZ1`ThSt=SaElED^T3MKyY_=cXuficekJSoB1bmliZV; zoV~ky_Uu0UoN#4DDKumvWB>qwCL;}21puJxKE8J$!hgJ5T_k<__<%J7DS!Zg>KK$4 zBe;)yC`VN(F{tHXX5Wt+3S((i1pvT<769-I0sx*qhW!2k0M2Xxz>y&Uz@GvD5ZGn3 zs0e=i0RLT13JiGv@0HVD6#p@TWGAid2mqkq{C7bC(lUS_g9uJC3K9rMaG2;6ME(&i z?jMr?WWXSGx0RE2i#n4*jf2NcfgMy=x9icdeY))V20 zPq4+2*a`>Eo|ONrs~XB%CPd{5;Rx=Bwu((g8%nZ@R%A*X zd5m`DKLDSslkcqEpN)En|8fv!@Ud)cm-UUo z0?Pa_!=MoTBAJgT?q{BDRa=UAks6ND6T`;vzM+`vKf|jA{0^wAz{wjmFFl@+bJCK4 z=(gKjlQ+FNfgqTExX3^^QB*o)Ea0E4hbyqyOYpbd@`DIRvzR~D23}{mp&r$`;o!WS zZyG2kYyOL8B8^oJ#*}Zj*Gx>d{I6@%t!x`(>oR1*w&9>3+cl1Z`n9E_GFJ1<(~ALl{_Xc$I%N+P6dQ(FrkgR$2W zk@G&GW~QZQJdC+zy)A3)yjN@r-LBzai0BQl(0-`gWqCnsC2e^z{)BY!Ai1NYb*_Ez zEH!;xXV=)#(J==SnzxA%hnDZIXoQVI6>?9;2us;D2S1)RPC>yDdkwLKfohs!YlUri zYMaV6&^=#p*_^au>CbD+S-X2_DB%=m^>+OBI-X}pABE(sob+i)=L?pW=?y>WLye}> z{$%EKji;As*<B+rY)d8oHpcf6YE)6!^DHWeX(7E^J32D*(v&c)&CC)qWacSwT z^(+gt@k0te3#j4iH|8l{xAO1)d1!`2F)$rs@U?0IesUWw^G})ZpcU`QLud@I&wJrh zJ5Q&wI*RpaO2I1~O@F`c zg&cb1Ivund&u?1v%z_hHUiP_;NBwxXft72IE1K_>EaWfqoa9f+Sgje-G{`G|yjGPu zY>%7{H*V%|l-@@N*3dlZOz-7Q%XyH`x23xlL{kiL&A)`;l5IR2rfS2e1gjAqj=9aE zt0UHzU)Be(t{(iM@pGeRk~Z)CoyaRB{PK2-qmax9e2aiRjj&XD%!9Sg-`w5?(Y8tU zSK^TFZ4hk9I7_ysTHgyv%BTX$S{Xu}XoSL$bX# z%UM~Re6}CH9}wTIJFQ0d;PZ@cx92&*S^YFrm83*hRX4Xsr$$AqCcL1!K+I$&)Tbi> zh&m%Q@%+5kMP6|sy>ek`JoWtH7|czpNlWj*oi_Rx1F@p%jYT|4vr-5O8ZIsXM1flV zcO`&Vv~g9+vJB0hOyh4{I_yP+O%Y5vL@mKF-MbBPujG#kb{~6tf1BQ5# zyHT)nz1@>}@07%FxlXQgcUaoaSSc8?6~}(!Q^%7~5uFz=hfXpom*Bo&8}Libg=k+LY}q^ydHW{s!<}q z`rQF87u^W8J8t(1bjg}NHeQ==o<#Apd&6CxV$d*%AV!1$igC3rK%pBw6fzl~2^?oH z5C#w7{1u**r4j=p!Sa}6RoJ{o@9jD9h>xvfY?F06hDCGkZ^UOUxn$NMF~2#Nd5K^N z2>PP++;uYSSK=O?{$A>_(%gnS5HhBCfr|wvH9P*1;2g>oSFrl07el{Vx?iNka+kxa z`+t1)XUQM?XRC=n1oaPaxqiJrK-;)&U=_Mgq<+TOu#Y4qAG|X3leC0>eFGpdM*-~c zP&uuBZf~pbAxr`&VSS3>8{?``<=Pm{d(j=|YI#CS z9p%z_4VNj;4kIVO=tCeny|g+voBmrK91f z+d^PJjJ0LI6I?k)*YP}b`uu0}diniAZt%M%Zg^V&?CDvr)C^w6Ysaoxvd`NlgnZUYwmUzUSQify3M(*dN}JHo!2@}{ zCKP0brGBefllOe7n?8Q;y}u~zCg>s+H^c;*`bDxGXdwJdDm7W*|3%Xuw<<(5uavZEDy=FQ zPnyhYU48Ly1#GJr={LNB(dV~Q=Bm^EsgUzd5|CO;&1U71X0pqd%L`e|PhD&&pHom( zogXL8nwUm#0-7pq6;9ZfGADtV zL#GxU^+0C15y{_4JB-2CBY?sI4rw3&W!}=iH$~{B^vk44ebN(k6U6S(=oS$rwDIVx z)YJZSp-Ic|H9-5P(Vdf0E#!U}{ECB+^IS|AK!Li@FzM|BUaQf=G1mBL=MB+8LL*Lc?$5ErlQ zUYeLMg>ZcXFw&jKFaW#wL*x4zN7mDcnIhR5@2w+FyxTuV3?cP?8wTuV!IRrJn9j4e zdwDWltrvpF@y3Rd`9FVaL<2udBPF3he8{zb=7wy`C_f>Oq4J3S1g?;8-CPe6jQ;Ic ztK~g;JehNQqZ|Km1PjTN#u1)`{Ly9%xS*tjh0OnSkmf07;TDs5ZGjzr zGNuZu57fQy=;3;r8JFeW=RlyuivnJq%!kFAbrjEh@+g?qstPwHAtARb`RV zxUNmB*S;0Z(4eK8mM8ky+uB;Zos)Y%9crGoUv|m!3umHdNEJpDOb5Z_GBPch{(_Kn zVT-F9&3E;mylCLWzn{d#yk31TTan%~p*0Wn`L~Wh?z_Kqe%^X; ze9mlzoJ|Zgj%Dg~MUW2brl|Ua>IGHrhZ7p)hodCy{N2UsN`!Px=yAHFz;g$O{Zx66 z$nn1bZ&h;n*+9tq$d}CS>h}5EZQe-=HoAntDOoetEi?*I5>*{3xYQ6^GL7~hYj%G) ztI*v}cYEvm-#5-@Uv8GRUtkte$M(0X=d(@`k&S+(TZO01Xob^Z`K)esWe)^rBY&qJ zcq()X&`&gGoF7xAio&mZjtKXg7qy=Je=EK2c;6;DCk3C(>jtP6GajYLZ_VD$SUWuq zyf<$T0)2dU=9+7H<>eKloDpEEKE;+Ain84fKr0G{A${B-Vp&2Uk(?y?Wg~=@8>&p90pG9Fh(L)mX?@;snjO;;QYq=@tQ5pDA%w9{(vOG>2 zn!QC74=(6p-hIi*`s7I5OZaXdl~_B@xbI&NzgG)-+SqS5d~Ka3v#j?U0Ug&bDdG_= zM2f2CBLA@XshG*%ueN)tR+;5}Z7dZdjLnM?4gQEfq+Zv7+N_JNPRlR7`+M>O8Q

WTr)xd@^m`lO;5Sne>h$&4FT%*kdLEs8A4d3Ir?qD}fTHx0=y~hv zGiwk*)2f-2Y-9T)`VTu27#F&$TO2LW5>(6MZv@jzd+wC1V7%siwTBZkFfK+NC+Al= zNIt(}V&*yF>pDY1ESLT{!6ba52m7~dY@(mNbB0^{Q2pw;v5EWT9C+cu-5SrA?0}qV z5hmO7U+xACT_;=bO>srpm&huYaZU=XB-eLvM9%KX#Q-3%`(gs`1k$6JWxS@B2^CzE&6@K`^)FVczPVz zY~yzI{&>%-Sa|rX@AfoWG!$x&UkmrK%^UHI^C85=$`pzKDY8@7y}#REdfIfnzX>iF z($oaP{cp$AXV~OkNXs~5y^l2`G(>yS0da)z0%qVn){!NF@zL-egTI{b8i>g~cDCQA z!jrii+9}UYlJC#cUVSGszUc31Lw_cXQZrQU{vwgJf1wylL+QMCoGjJ7k7E@0UeqspP zJ$R=DbXO`Z5j0c<$s!?r!6hMJGkdw5Ld#W$EOuU-xg*c+ZEIa zzYC;mBuh1u8aKTk?656av6nxxt4(hyE4bIE{pjcTzlkhis6^555qYB2qtnN?IS})D zVn4SGVdom(>o=HehqUrOIl|^F_lND!c7>C8KbI6ji!>^k-&pLWv3rC;K#MG6D=TLI zDZS;?NPHcd8XUOtrTT<~K!=c}0v@?-FaV3IhQvg>M-$pujK>=b!E(7o{hF6t0(CY< z?>+^>ZxO9+YQ8kC13ST|+`f)F|6G9v|H&|l0rInkFMV0dF>VMQmkS_jYWBM_csZL)L{{nc=%2Bd!vntF z3KV2ih1Oszw;;=wt_o1e5mV>u1Q=Cpd85LIpG2iw=N4j?1nh!9AGTN5z{_*DBq(5q zpWxFnF5`V|!vEi&Byp|iL?&ZnEx6F*BSJ}N1Smk~Rkd<{?8?#c`*Ea!1S*72)5rcq zSiw>K2f5%MUeq4sRB@T~<_EHf?7CFniK@p!ekYo^1DkasA&jwqQt6C$(8!mumKFlU zG&B+=xvZVrhs|{jh{q(T;z$|H0fwSTScfb0&gS_H@UPelw92$~tJXKqLN$po+PBmK zgJRU53a2XYoTqT+jcZn9i6cm>IaWDZ=BWRhbhpDeOgh8{XaX&rOQQ@eh|6ecBORuy z@&sHUS;lHQ!^NsbUHzimc&IZM=A+t`Bl;pc_DvU>np!vo&2kQSiwE~IWYxJwkuFA~ zUm)+cfH>0O$L+_qZWeZxi4Tpln8W+21WP;^BjxMlBjZDr2KpoPQZCs|i$$KG{+KF^ z23ucue@m#7{$Yla79tW7px#|9o<<3nkD;WPztE$piKm!X*|n_2FN3H|e;A(GTqeI9 zx^kN**`vDzwoyJ)!l((=+Swiw_r;NHnU6kh>PYoSn&!#@ug=Mcp-i;Y)>Q(N%>X4e zfZ_)Q@QuAUd48G_>%TZX$Jy0WrOc;s*x% zZETXvCzgfq6B>qm6!1^;l4$-(%hJ!tAJHNnZd|7ql?uK)1s05Yjz=YGic_U2ipvO1 zrQAD!=1nay%tcJQW{{0!Hvd{|RQ`!mTmtrAzicGf1(H*Z$qu-JRwvs7l)^I*CbW~G z0?Lv1ERbnq<5QvqYkG05aV9o7B=dst!%y@;as){U-O`Chi9J!NfU@mM6GDYjLjyns zV6L`whre!U!f39%iKyB$tG?mMw^CLD6*(O2QWi`rET11dMgdD3jOEuBNC`4?huS@* zT>|jPaHJQ0Ec+Tq)Vk{cAs$`5a!8JOt^`$bpEKTHH&j5FN`w?6nJoMd`6XgBQ4Nih z)Xe^w9jXi_sCZoOE0eaUxJ;PTdA8TcSf+73k}3%*113=Gc?b1f@BrWLUD?#e8E&Te zXY<<2zp5E>QR@h1 z+waOwI3_!-7@e)(T;#d!jVV8p0m@L|8A)>mw{@QwO48E6MnqGLJk8Y%(u()}X7=Q> z_U`;SY4O@>$&VMLtZaaMBs|XHG`K5}oq4%|g&Aqa3BxHZ1+7|RA>dAKUQ;2RVS?R0 zQRjGh14SWM8`>G$<>r%Ln95i5apq9};A=APgjwyhHz&(;1tmN)C3Jp?2CskL-e3Ad zti5tGS9h7vubM-D^|4hC{Sx2h|M0Rxth&X{<08|(m1VPJ&-cB)mug;qj@E5%3D2<} ztGd7^VxJ5nhb#*AtW6n0ufW+z((uz*edXCMW8F*4eF* zHL`|;rx)tAnG(5hV_ld_T8n<8t_yxLd{UEC-l*r@$=mGW%hKcvt<~+GvEym&7Y7_l)mrK?wYisL_(b&VvCn&FJMAyjT=h=!EK9w{_Z&?r}*qA2Y&jDEI3txj}N zq(90CxL#Y22c6uE%uwwsWw$)uyu92iM)P*sDOtRew(ru3JO^(+T!^)u#8u*PVJ`#E z{BH#`#qmDsIY>|#{Zv#Uez=|jsP*0-0oy=v?PYE``2H);D~kY+yWxEnvFZ=Pr@pDY zAQ|kiphtk(q+2O=-G+ObXspI_SPml)UfY8{2ikZngj%f^*(k)7vMm+KPaOc82R#Ts z2LF?@>e#1Ml)ms={nE z$~Y1H;q?voW0o6_6ALd4_jjGItAoPYrpp-1;o*VNsfS$IM4{tq^h{x}A+Tl0wNC^t zJ0_FLMqzYr_1hQ>K?`qT9GKiWX`ndKxt>UW0vHvPY22xTj_u=~<1p*i!OtPhR-2>3^8|xQNF#%t#|t)6K(?IC zQJ}({uM#Svq{lG?{v>1r&>{0|$7p>GR;Y)r3y>y+Rb+~lb?fjcI|3c`uBDr|gVI9O zF8n-1*Od zljHSv-}I`ihmvu^!7RE{=pB#UR`%5oMRXINJDs0G(p}XS#3mVt%6Wi6Au_S4xOQZ! z49wazw4oud!xVjXv`vq5^nxgY0)9dXpAxvd^q>ZyBy&!nu9Uyf!{(78`-}DbAYll? z)uD4y$Cl3I9pdP%L5fQ(3}BSl@uw{u>g&2CZHXi;#%_@a_Qx@w>03G@CZZ#Fepl8p zK7Zfu4JEGT16OcEbS7C0zJ$7D1>-N&_n`?>$Bp9FQA;gxkN7&B?Y+S8l6j2l@$dxu z(=XB5O;F0Is`mp-Z2kHQhOE&I7$W=wjZnVhG;~nF?AR$0saL566!*v90eg%d&i;_t9zWvz2-ND7gsVl+m;xpH#io=%Cpm2m)asccG zw#IsA+G%mUlvE(cdO#grm>|3QF3ApPRKXj%6|3LoS^CQ&og=$x=EUjVATUXDq5us` z8lwv4MH?YgOic7Z?caVNyTZ^KZy5jz9DOL{=x))R%B{Op>&mN`B^+sLiAoXR;UDG)8d?(5poC0u ziSzThn=jvP-j<78QFlHhlfV9xwIYfu^{LI|FXGR#7|N=(=ZVGQEr9p+q`_|f0jd@B zkt+IfkJGw8;7Tb&A;yO4c92VDC|(tfijpY-tce}TjoZ`WZ~UUg?|k&5cKvBK)%1>! z_n)B0Y}TRUi3TdNtsYD2XE(#Kp9?UTzm|fUp*X(I3)Eo30D`O29x<2u2aYc4b4e<% zO$eRk%Y-Qvgj6ilqfQ*i5Cj4XZH4Z}k~=(~7FO@~ac0W}mAX^?9ij74o$U+omL$kLIV|@0|7LE|}qE zwLn+yLAryQOC)tG!}^ZuHUO;p4k*MB8|5lOa>VUzm=0e@`;DOW4-t84mibGwwgtY@ z%LYPeVWooVd?ob58t>aypzjyY1JX`!2czxm%#7^!r1Y~k%L)Tjy%zSDe zwc4imRohV+T5jouec__rQ^iGs0`8G!`R*Ui#y3CCBh8TWv8j1q4afKx{tXX}NqAT> zMO^HBV1|9d?Br;wts9!%E z2J<$c2w678@pndj562}BQ3lrjJq z5ZHs$g;Z(EkW16MbaN&om(}^$@%(FPNsvl2zD}r?Wy+Y#$`{6%c_RB`dS>%b4C23g zx6zj+eI=kmbc3zIXDhZl2uce2KnM&A3v+rJ)x)J_`DN0;{cgFCpM(gS9N(fe^!ihudolLXA9DqH(;lzn(-|!*vbfUWgRGUJ zyuG6n0Oe~Uw5%#Z0H!+9R+V^gEd4UaN6q0-9k4KUx%{{>Vr|T+#-IxmCMJt;Mb@ma zl__rHkc0hENMJY3{`u$gy~wKbYKU4&FAbkOl<6sv6$+>3R`+`qy=sFY+?5~#p=flC zV?Qa(^zeTgPW%>ADh5uRPd1tq4W^J`ZbL>y4G1m;K+S=$8g*m9ETAc5gQ$|BELk`z zBeo&LVRv=!q4Z)@m_P?*bDMFTz=GQyMgC!R;y|zOJHaD~m~r!Z9;jl{U$A@b<<0@( z^dk=Z{(b6NaixkH2^*Ntrdff@eyJ)NcwvYphdHtr`cSd>5*VBoM1f*daglgj_+0I> z0!}xS3E!kR{43jIr%zoXxfIB1%Y#Y(!dsxV$;(HHe8q)R&ZYxk5&}>)x;$grmi?-c zA`)#%7Z>Tx<4Q+!#aC>2Br@+a|Kc^(h*6K{Qb~V+C3nCKM{_QY1e0##@rD8VLFqkg zShQl-N!ZX6I9$o--p4<2uc>T6RL1lluc=(O0*5rCB}lSXJO)XHFbk)A+%?V!Rdsa% zrnP9ZR#dh+IO$S*5Qn|6yJUgHh<_(1%wX7dMS>(WX@5{Bx!&7E{<>9~zF9DWNrreN zm_=tQjNXVx5SN{Qk{{<^T2*)#N8)R6Fe&#>!TPEKS)b)*)s$mvGs)fpKKZ`J6=SWl z8^hW)ROIBreXQn{le7#i`*~4*xlwadz7GqwiDroZrZNA4#0)bo$hk2JuH~DKs{crN zNWPY{gMWmSxQ48^VY5UT(d1>Ou+2BnI#GOTyZ;#l`U}^qfUf}+02LxsEdN5%efUWEvLo-TAl~$i-e@5jnpK1|9+B>4k zEiC-21{EZG>OvgY4Uo{FvNZLB`oO~gd6Ff-nE#|N$Z-ec^)}P!qo5Kl(`JQHz-pOd zYo0d6*BKuqfFM-IYbCw!rP%5VdgVL{7E^}<3s}uhyn4&e*eN55W`qkmd)hc3?I)Sv z6qZ~cNS1!Dhw`lX-}Ra{LQxVu2`U0dUz33@Pm#43_x7-INnsC6h73pPlZiDLwH#b# z`A$>!qm?%jFl-e_gC7%78~=0N&^(>x1xn;k}t^S|J4{QfQ*Bx$;-l)|=-XZ7(~o*OzSaTN9v zo#b$z9p>3BDkH!8e8AQxhTp$Kzxt4mMbXGi5m_23<4Rwn7OD^FoG!=~z2CwZ=jVJ# zPHoJ5I=i~Dg_L`XGz8u6Jps_Q4;5>RLbF_Dz&XXAoE77zgAb&2Ish{;z zhfZvqoPjhlAFCs%hwr5Ixqeqkg~B#sTOyWb>;enW<(UQT-Kw z-^>#rxxY5%599m#GF|C1k;xYsUTqKDi4~c5FD6iz2p=P7tc^ciwMeY$at<@2%)JC`~{H&Md}g1-5GbbE!h-g<7<8v!`A#bhd^YN_2J$IZj>{AH(S`}#L@gbrJS_44TQ}Ks*{Kvo0^n*F=6t%d)QpA&k z+AsG)aT^TPz$OC^{2*-U`wy?TvU_grUs73mud10T`EE^+yG@Q)<5S1w220*V*z-X= zFn?GlA6@T740U;86fi_kP2@@F6ET&STq)aMJ=)Cc+V2UK)f?7aFkWm_o_gg*ahl;z zF$vwRIUQT2Hf}o9Z9a?GL^}SAlm2X837A=!q0Rf;U8rWZd7lUaHmZrL8H1Mk1xESo zFz$Z0`@UG6ntEuU&+mB!ouJJd6FKI$td~AAfmnzI9oZjSn&D zPw|Z4I=neTbSgDHe;j1eFS@661F*VoL$YX;ZjEA^bunhU#zP+jm1*_6vGvlzicowB_Lv7tF`@nzOw!HVfk0l(AUrzGY{~_#^elX# zk3cS=G-TV_e-o;92J1Wg`a9~|bg-c7a~E8c{kX`x=5btR9y|sZzzjkX>t>`zEJM!m zQ-Sg8;u#!Ui{33yKXW@(QxbF$eHsF^cQrK`(87_zyMGA@du|gX)%}mb_Z_o8RgkL|9~~vGV#i4v0~7m z#^v@RSKQ;_a?m3GO7`2>eI_3`*`cF!^IPZr4a>z<&+qB=N88D>RafK2RrmLsF&ct( z^dKaPU`>RN4g!e31(XY_{6}ruP(8(3b&$0B=PIg5G1KjhTpPmaN9lVxCPHvD8w(q)!y3p3;*I zpBX&hB#I53GD)6t$=}advk%{nvI1St@o8>J;$c1-Lx#XuV1ewHx3${LcH_fm8-drx z_scjbvSoJr)6JKSdmhDv){XlQTE<&{2Mn(%jJ@ILg>o!CDk8l4Bo=>$+m+lX@22zf zYTrHiY4*1Y^sZF6BG2C?cWy-_CzQE-M)LJnrY@%Tada!z>Qtyu{!qn)XNFZPI|)JM zGKhADfV}!PhoRpLs9i|7fOtrdI3}R1V7m#z)&-5YIJsD<7E&fGq9Ya(F^(!4=5+H= zJnQ~tGVG%LSicC>A93Neq9tf(#XZ9}L!I~K8-Z>>LM{#1>FxeklD_lk?g-|WZueU$ zG05?V!Uo1SIoFou$6lszs3n;1JqLkMs#F1&3|7UISZtcGQV>avpY0ROi2p5wM+=c4lI@bt+d#Mxuh)71)7~Bs9Y20x4;#PGF-2rBu|prhh)? zF@q(%NB>A$d(_2!DpJ8KqSH05@pY-mEDE4F2EQSz; zDJ?}{qLe~{o)F92g&g zdFcKs_6@r>;$z0HS_sq@6p#|T_xAWl`8OM7Mx^=sI9giJX7W$LST0A6gF5WXu`*&p z?qg;+fcj#*;W{^)Mbb!5PhNUf3JZ!RI_gwC1FNP`ryj1)baP>UWBaM~U%7n;J%Qxs zs$FRD9(Y^iAg^cQZFNyAHs_09``WP6$*g#MAjkf zT%!GfHd6HCU%Wa9Cnl%ONg;QiFx5ErQESvQ(_Z+f$<-crK<#`1wt44v=9ZHW2(Wa~CB;{nrELyQ5ZA%3g z1@dJS0kI_p;$WJ+Wi=#42Nw=QI+WksL@6mLY+}g9YHkjO8uV&QS+T!!4=D9~Xm3WL z2RLL6f&kc;UmB~TTxz5HcvPY_cV~Im1kc)~G;m|N`j;Qw-OhvNnrj%r8o^*VK#50i zvB7%DhP#&Wc0@!j9j+CZOnFaasfRa*{9i3j-HzQqx-D}*oorG!>Ny;H^@&D_t*HaQ z?jxj{EVAYFVRN#VLivL!si3EgkhAU9>lcpaLt1ZdmFH22{Kdk**3xH~fw5zJXxTY6 zG$fY$U_V#|x6j@q>8(>X^@nTCwR1L&IT6#6viZ@tt6!=R+g7j_lZklVW3RJA(M9x- zV5iYGCvP*QZdsQu_9>COZFSdzFeNxgw=x5Xi}%Y>O*C?y6wUsa)fLN5;mdrPsFj^; zMW?_p->_oDzGK#NKbI>nK#&`4=DyZg_Bm_xxxW_?5U77viQ5S0ZQDi*EM+u5-k)%3 zL7`aU&C_uOK$IWYZbC|^$p}Z_e;T2jcQ$JBXJ)M`@$*D~)VQ&9#eKb+=(I?~KU&vW zqS&QtP&Y!It*4@mt-{gDu zL^b`4k|(!SkJ0t+oH2(c>WZy+CMh{q%BkYv9vzKLNlEK_c@cclfJ+BfA-Xv;(S-z7 zoT|wA$p9x34dJhtgINhXAX^B?2ZDm^R%uifUtzpJn8tpimW0Cblsa5 zM|w9OLKPI2GJj}yP7L#CR{_1pH?4){-E}hkht|Q%`C62wB1Ze?@y4Aq-8*r7r92RN z5*jMj9Lko7^Pn5&48l|NfZAdcE5|K5u@Ni3MD4t!3huw#=alt&Vhs&YfS;At?|(^y z3Z!8!<-dAEPeXVFeArDsk)2B7xVNHV_k*)QjG;cAF@m;wD)0R~{Y!4yzQ ziMqNS)IOa61dCP{Pmz(Mq)s|YA&brM*o6lZd@!k}ta!FF#EWJ@S=^LV^rcfNIeG{g zhX0sRbT4AdenEIo_wY1n5LZbzWye@l(H9d5ys{UWa97LIja3dM-a0-b@TA8mhb~&H zUB@0RGp-Z_vJ*IAlC?Z(9hccdoPU<`C(~m%@F2XGi6QQ)-a2I zSZc`fo>WrsHox$h0I277hU$iWT-XbweDNV0ok)3l05g<0t z@1BfDZV`={2Y1dIcD)(dA}w$8yq7qphB*$1VvMA{P*n!J--ww!S@w>1JUdR>C)h|i zIDLN_R(e}LZ@Y}%yzGxm<*cKaG5VPqSvBBN(7xXym%x>#zn!=>CC$uOSvAlj02dXE z49YPtKx^{x@52_fkWNnIXfYxGfn!GvfH$eM&7J;)ybnh@;KDAkO2X6R)lCp}qE{Zk>VirMisi;aTu=~K!~tf1!-Tu5{Cwi0w$cS4VVAA`Z` zIy!)P(b3zdewGP>{X;Cxh67(8>bu&za!4hbD&^b`N)=;Q#D7E@{0hb#SegN`i~#9l zODm9-a#i<7<3|P8TkwikX)C;_GwA$r!gi3Cq=gvJ+eGG&?w1KO0$qiw(aHD|89t>) zF$xUys0(pKI7rq%UMnL`AQ0Gs;?(orZi~ml__y+>i@3gaD%9p6cd250CXufTPt(a4 z0_elf%O&xlSv>tQE?#Rdq$ZSFyL`(|TX)}v#Zx)1(4vFz`W;|O27ioIz0A!gR6EM& zYRN~h|Bm2$Vemd%Bz#*UvND187*RE4v*t^!$Zyca##f1Xo{P+e3J!^`KJ#h|EQay# zxzV@?280|>*p8nzc=(&lndIK42%wsvx)snZpqM&Kjz)X!ZN&}l9iLMxla@f~Fa=V- z_8f$=Ol_legQ>miD{hxp@CDr?%DQ@kah~Oz;aRB+U(UfqH zcmwfX_}lcN8LwtF)6re`*LyDmC9mJon{J-UG;FIKqd6lCN}Mf3G~}M+n)u81HE6S+s zh;95*zn(&h`0)+PK^Y>+s;>07!oHlKd@PW-&|{@I6iJIAeFAV`H##9*$oK8ZT}Y`a z1iCSCRH3p5t@dlD*P#iiJ+aNPVY8l&b__o2Gwy=qzht%zkxfb1xC+N>#09d-Xs5vE zaLLb7q-Vew1)`XMg=ilZX4Zc}w*h2WV566M89&umPcFAlbvCm^d4h!whB(6F8plnP z(Cq%TxICGFW|C}=n`^hDl7ov4@>eXbaCUk*u4p)RQGR){4xR^HQm|OX*eBn(otou? zAijIK+OCC8ze;Jp2JWebbn!psF}k(ivZ7D*8f-=#spqOu$S&&fM5#Md7qnZA{0yU@ zu(*e(+T&+AYp<`(?%%q}U%DqdZ_91Jxk(_ec#GKY?HlXAKUN=Px7t1p=%QNTORjLW zE#onQnsCW_m$W%3iFCQf{KEl^WFdRdyz5o9yy-m3-$asVLQ13>j%9gnrJKm076~bP zGFhftX!dnX7Lxf%kPqPp8#B;KGZ|N5ogbJ;C@bK6uKp&96_a8o>*?#o)Ry!9%v`W zX8OZv#pJw2tS#+Vu098@K9|oO=g;^C>;Wzh7er|AD`b`F`dYOO7Tz-imCL zHR|LwN~9DdNOJ3ogB#0!z$Wj@dPqD4JT|-#P{^P>5WZrB`R*$|yY)j`Y?qt{LQaOr zMe;oQXYk7?KSqcL23`oY*fditmhty9Nw58CRw^0nwpa2t!i#_mtIRNIzn@$q4o!K1 zEOKmLCv{jmdN-DOzStgZy)0TWnfr`Bo9Z^N?C-j_KHnn;HZ&xPuS;HJ8gN1%>9q*X z6iD3{s?U3nX?|r2Nu9Q8z^K|GmHEy5woU%F9lCLq)QJ0WkmP^ttJ**{TcM}^&ZkY+ z&i(m!5l>q(CmEOd@YjiEUe3*{cH0t2C8Xu!a3$nZJw7J1e~O$*owh555DjOR3>E6guzH#T16>&b7*s_}S#Xv#_jy`QV^M$e zYC-Re?`_v~f3(q8&RJ9ATCp$kdSmo;zx{r#_I2WLU&lI{2rGlJhB;)Mo5VKR>`T*H z-vKD{)9AP`*sz8Ir&}7Hg7{EfI8CK(zv~gXa7;c9%OFssD@ws8zAfzgHTwScc~6Ph zt|I<}B@C)@>H04Mm)>C{J%X|>#89Lt)~ruT`l|#8Sb|#c$xwK^dfG*AF%i+eNmuOD z7{$N4lURAo8-{J)hU@dzqc_s`K~(CBRte9wj1i=L>1XKdbkRSPO(!!V!erqKzBlX$ zGGYzv_1m|zMkh!S_)M?@VTgMcKDV^4nimO?bY3gITo#E$?^-fFWQBGj#iD|t<3GT! zmS8c@S-{N{(ZjZUz;k=&YgXrtz-jep;&d(R?Axv$2k#*VVI&s)i=PB9BNrFdm5Q_= zgbml9Y6O)oz%<_<)aa;GuK)gVV9yh&t1A+k7R#2>7m;lv&iG&!KP>VXA#FM z%T1q3>$xL6vx46}<^f%NupqL`V)tfGcDtkC)s8th8e*P+>FC0@H;8QT#jxLWbF-`r;h9vIF&szZ%%AJ4oO zg^o((zdlV#jvMhiK@)@#ewvI~BxLHv+GUlMI}Iuf-CtwZfF;7SnMLy7?%f-v(~0@R zuC>!cr=+pz)!jdwCn%74)%kUnHsU&5egGOMVz$pz4{ayfZaNHm&=+G5;h8D+H1jk= zIF^c;p18ZS3}k!i-h9m5e80K(Id}DaoQLF2ulqW`31oLRJl9I;KR+RSRU*T1Z6PfP z1m<#6Afj?;1^EHO9Ss{cHqK$e3kcj0sxi75uIRXanYH!h2-g{An9@L_K{zh7L?d|N z{VrDSKhCN|yhvlwd-t^XM2fpVDRiRA9$&oo!(yx})pelC@H%rIzH-J+i>7(AWOnV^I5q9e=+1C*f5c zesDj42>FW!78H|cSstW7F(_=VhCLUFOA-F*rJrC;R;YmMlo|zidFFiI+Ig$>g0b|jD_IOFD?%oVlS+szBG6v03E(xO1{Z^wIs_(9IB2onKe zo-($EGxRWUNcCI|vp6E+3ze#hv$40dIdi8(BE6K&wGl5P-wHl`=-@THx#^4-KHcXe zwj7d^zQNVvO<$rlrOP)Ic4bj-2P~&dR?e#=qOAOXzIq){@HOhwKNoT>0_5X+h7tb&E-9dva`Y>yv5HZf|DOv$*k>+DS!3n*Hg9=q zNx;$&SC|=Hzu-uxTQ1_tG|kO1ZNf3vkTj3E#P@$honv$*!TR-Mp4he~&cwDov2EM7 zZB1-WY)@=+V%s`z?!D{3-Vf(%uc|)PPj%P+?fp27OIk=Lr9l>iSSTVZCsW{8vHoS zx{oWTn_#V4nJ}*^selp^v}DixB!U7373{Syue{ghDWI#WXa=wBK{TF>s5Gykpk^`< zAr6f-9xs#}y&lz)fvmGy_kC%pcO=<0LXBjFVR4(TU=GW1#tk!k<&monF&vRH8qNUK zv<}5a9{W=n#C?2C7M0@`4QMFc86088m_gH~b(KRP-)D;YvvM9ZSWhweY;W7V)8%;Z zmjjaB%X?}$e%LYQ@zK=<+V|UOz^ax7BNsp?pGZy<#3a1yOcjrF$KOO8XH@GjL&Tuv$UkDVLf+FRgcW7jd$YqW?+pX#3f>8XISt#FSE$a zCt9%M~l{yK`Ni#JU$I?YKHOe;maw^%j@!2hB-Oc+Ht?0RbVP~oeir8L?Be3UYOu_FC zskK%g7~*gva(;fkv;2)kv^F&v2NCy;j6kVi_F(qD!1S7?ptqEg@oJtQ<$r3ZZ*O_}CEM@s=5oI(vSpWkMl1L5 z?z?#I3V>p+ZiZQXA-8?uZJxkl^g+$)dCtA|IbP0V{bN|XRU?(&^!2&Y+R}4fTjzI^ zBF+Yw2jC;)Doue$!SyGIWx?90h#*5)h>|2wuC_a!8XXT~G48lNSLAD3;(xmAYh0h9 z5q-X*gXHNxHT-WxVkh7FffWDOZ9GtUkEOG->Aqj9#%-K}#!4uHRnD*`)EN;Jk0>|q zhD=;1Un(u4tS^xcGH2>?;-}PT)ydSHsTh0H*a(McmxvI5h ze>$};ycRJ5_E{enm?OOc(`b_Dped*gngB#H-raTTs(UQC{&hh%y@p?mKM`ymrqb*5 z-j`4Qo=NYNL{Naz8iWYp_((xwXjmsu@G-%zuP{>0d>)qNckJg)5$$k_5xveE1K&O_ zRq9=&WVGg!^lBb@ox3VExnQ@G@c4^X-hFv58K385y4n(N`sh-^jmnnaf}jJ&>g zwXylUt|?z9?Gi);be*$FX@80-wz!MG`BF!g7vZM0MRF-=91}2j;~2)ZRPrA5SZ5Lx z``Ws?m8WbfZyBkUDs^|gm9Yc7cpJjHXmDBNR|r8;i=%=}5d%7Gs4SCu}LhNbp6Bh624e{gK()qDWH1|Byp}zLJo*8;QVpUUw8uZ^ z{BE~n-{(&Ss&7@x zy~VwcL$c}kte9fDnZ(ny)W}G)S2^M9<0^fI^(2lRjpip+EELIh2=Dvt3oE#nw0F(4 z5^**fh_iUb1qFx!za<4_J%5W17i^3cbRVjzb9`01Kc3n1-$v?ZS7q|K9LZ+5$Sb$) zfgzk&^tDiCTCZt|Mo##&bTgBmS+|r8q*Nv}V=~ElG;sPdWu2(M{@xpxdir@@2Mxjt z5`Q3sMY$t&l!M7h^wXYSo45!8?dYQLU2HD{vYQ!_P|p9vJW~UGnkI&XvrO?(?D+1U z`e$N9oHK|6acg?QCY}8e%9qXs^W?<|jtiZpkBN0&hIW#(vtgt!sbe##r`A?E;Yy`2 z(F+a%U(34BucTScKOVh8ety~dlm==gG2zXodEM+D!n8%0Jr6%HaLN?-PeLu^@-ng@6qjlWS%E>j;uC?)OwUR3+97+?^a<``C zdANE|bb&*RUq)T%v>f3Pk^*11K$pPGeY%N+s9?5#U1WvCvo|fFJ>!kLzx8_EXChNo zsX>*{Nyd)n!7dsDjLt5e<~G(nzYuAG7avr9HGG#o`k#47)z9Fab26L3>PEgRYQXWq zHMg!Hx~ADlCvH(w1U{h>n5sdoU2QtdYnR8dyNpKHc z+;ziij+Bcbju8h-FTX86=Lz^7{JrKVS_j^D9PEXf%Ae87RIVEy(aHT1jeXm^6B1>b z#_6$z%wiHSIDbrK0yGdHCD05mW|u^&45=J9qrUDW=vo-#v|SN?;G;IhsGGl-nYnO|)yVsm{JR3nDHysP5V zuZRoon`(#y81Zq~^z6bP%s?RI&iBUf)w2D==gPos!$)~*@qBjVx(f+M$*8q7s6HE@ZN;<(3qC{Xqx5p`t9Y%cj7f_>yCWRl2<7s5Q7l`#VcXa62 zfvsz6c#}Cvk6a~6d95EqlF|~+3n?0kF9ljIrSr#{X0efV&I`T2B(f?rvD58vUY*bV z@Q$N%dnvs|KK~`v{woo9rSSE#^AT;HR(O;;KcAAR8OtWQz{*(1x~BhkkoTvv_!F^u z`x?^Q&7k?^&yH_zOK7v+8MGm`=t&uvwXLSZEEmzyY0iX|&`o9;w}LMH^lb~0FLm2? z8kx5CRavX|n!8O7ukXjh>545j+Cf{j;03-c@?OangVvNPfc!o=0KAc0yuLANk_HNn zS{n&ZN9BP&VIRZvH<2=zgJ;-T3MWIoY+R+B$e&9Zoqi63PbY^yzh40#Q<;B`-D?&J zx{MkObY6ecjL&=UmCfBln)$s`z)P>r;BpN=9*sd!5QCGsg4jUdu{xCS1ek)Y4ha4; zvd>yuUG2M?W*~*zWzkm+LWjvnpripag=psX`oxYMfvauhfe8W;LjLDf7VgC-Jc4;i zE<#^jByeJQyv`6*&i)H!C)(g=c=eKC*pcc_VkAg~!|U7210||hdxgq}=z$}f*(r3T zwxCNtqUL6~P5-^xBF!v99$>1u-_x-9*WHBu8??Za{q}6fiM;2;>-fV(7&RImQVrT zzcNAOkXiiGq(Eg_v>Mqz3*(~K!M|#C+jX>)631|N10?+7?`59|=YMtrKKsup=uyL> z)ueOY`w*Qzjd}O7?6zBXKD<=|NyNFaDHC~qu5-2@0 zF@q99HNrp*6Ubo(kU;}zHwaj>>4zKvMQokC>Ud^lh8vq`O16h=s5r5;xs*LPUQNf?kn8?y~6)f zVTQ3}dP2hRgsqYIyO=%85UsPyM4?8k&Dqk-3J>CGmbz;>sPHDl3Y%11KNNzoydE%s zk;9s^`8Cd7^`Po~cHCcX`S;u&)wLrvo6+0U8q6vvHbFg>hfP0W_CYblXmv+k%0tJB zg9}X&JJRI*81N$a{C=Fpd(h>M4DR0KR43rnqtq{`^6k%})IE&u>aNn;#VF>dwnK5I z+RDb>3RAO6xz(wUDVh;$eowK~WHr1g?004K6-TUMShOmb)Lpg3rs8o@~8J8PEC=q;n?4w9U>#+f-A(S^^cGmTs z8$#I3Npz3VBHdpQi`CyP?CW6Ug6s`fn2MCqCi z{C%hV@!;jpvoS}z5USj9%Vi*8F`@W<6s3xqG!7;TBr=j$fJwvvvSm)enhojIv%wni z0swBK4M=bAeG|&a_n9x?d}?%FC2)fVe5oV+RNs)9yJw-XkVi&-?b>6?xfTIOGiU(v zvbMicjutdblQxn-Ks3XcfCHewvG;9HG>>G4QfQz_FXbr-a=487J74E3uo!e+4wrbY zUbt(PtR9!S-yFl3VhjKzSFK9+qD*PTNhA|2i|2CG%sIazP*=lFMrj7>!^oej90-+Q zY2bb!Sihm?7jk|I352Ho`h@xOAs=?^2hmYB^T!$;sIK1pepq6#q$KZ|9Sangj%EIi zZn|*MOL5H~etx^v`Z_7oDyk@N=^O zh7i)E9nS#y^!rAF`%38=GXO?^vSwfqN zM;221e-)Bv(Dq(G4jzO~3vpF=fU*TwO%U&uI=jwxmDjx_nfYbI>1+>(M%Am`ySAy! zUb^k7Bz6F#p}>t?2u`MO!QaVlCTSuWtB3LSH`MYw31AMun|V~21O4gVZkE%zJX_QHnz5)h8~d3iW~u{ zH6AyNK~p?eaamO)Yur$|41k{+EDo3v ziWtBLmc!di&HJKY-Q4j)4){%|=uPVJo)_b*T1HPhM6Cx+lVqJ$0QsOIXiWw_Y!N

&G53 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 Hu0mjfol { }); const authData = authResponse.data; - console.log(`[Auth] Emby auth response:`, JSON.stringify(authData)); // Get user info using the access token const userResponse = await axios.get(`${EMBY_URL}/Users/${authData.User.Id || authData.User.id}`, { @@ -33,8 +32,7 @@ router.post('/login', async (req, res) => { }); const user = userResponse.data; - console.log(`[Auth] User info:`, JSON.stringify(user)); - console.log(`[Auth] Login successful for user: ${user.Name}`); + console.log(`[Auth] Login successful for user: ${user.Name}, isAdmin: ${!!(user.Policy && user.Policy.IsAdministrator)}`); // Set authentication cookie // Note: token is intentionally excluded from the cookie — it is not needed client-side