From cd8a124b25429ac6a4b5598fdf3fa645a8f238fc Mon Sep 17 00:00:00 2001 From: aviv926 <51673860+aviv926@users.noreply.github.com> Date: Mon, 18 Mar 2024 16:00:11 +0200 Subject: [PATCH 1/5] feat(docs): User management new options (#8029) * User Management * Add photo --- .../img/customize-delete-user.png | Bin 0 -> 25291 bytes docs/docs/administration/img/delete-user.webp | Bin 0 -> 7296 bytes .../img/immediately-remove-user.png | Bin 0 -> 35272 bytes .../img/user-management-update.png | Bin 22216 -> 47838 bytes .../administration/img/user-quota-size.png | Bin 0 -> 36193 bytes .../administration/img/user-storage-label.png | Bin 0 -> 36866 bytes docs/docs/administration/user-management.mdx | 53 ++++++++++++++++-- 7 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 docs/docs/administration/img/customize-delete-user.png create mode 100644 docs/docs/administration/img/delete-user.webp create mode 100644 docs/docs/administration/img/immediately-remove-user.png create mode 100644 docs/docs/administration/img/user-quota-size.png create mode 100644 docs/docs/administration/img/user-storage-label.png diff --git a/docs/docs/administration/img/customize-delete-user.png b/docs/docs/administration/img/customize-delete-user.png new file mode 100644 index 0000000000000000000000000000000000000000..e76212cd557800343e3626db39080f46362ff4e7 GIT binary patch literal 25291 zcmdSAS6EY9)W56S!d4Kr6+w!Mh;*eBnu>_DfFRO|igZFvLJe$nD;o<)ml6;up$L(d z&{0w81QJMqkRSqq5CTFHLI{Bq_V@pu=iHr}b8*hqV)3lG)?9OqG3FTWZzRbMXnyRd z@UZ{MQ_7PoHPi}GZUkF*_|KlgbJsp6e-6RmPw zsSkJ2^40~eu(!XQd{V}lTb8kR@1iq?pZ;V2vhLQERQWWO3DZ=z>&2B_!_^$lyV(5L ztXQn~3Y!;iyt zID%3tL{)#2=Br7oU2< zdsf4CZ@Ql@9u7bh$|}yDk;+oimekYl)(+%lDB_6@7IZyo;z5b+?~>e5f{8}l~hs-;s_ts}zsZhW4NlGr>+jYTf3?g1hD^1qf=dBp0sJi2)H z{&oi#TXb*O&7|1(F#j?7AmeYjvJg#+5G#@R7xXe8v7YxyRo2|rblp2uqF8b&_>gW66gX30Cfwxd0TeMPQC!vKJx z-IbUD#XW0zd-uDxow8liKM**)?UahWz0OCj44sw)#$Ht{vM4(6XA1d27r$9x|qes zeS2^7*ga_`P5rHf6y|5>qfE(Tz$?r{CS}$jsB`zoL(skxXOThQ1DlIUZ;6qk*d(t6z`I3Z*1+#qT|PN9!>wQDPr{~Vg^>593#_D=rcb%AFN21&7KPuX zy*@b@r%hXc?!d+`yD3B#czAL)VQsAjohN$elaXz`%tM|}+Au%Vb(tMYTf2wW3na9@ zzxE{}Jvj4fD4DYgQSh`omrf+zx|n*WP)Kyh~;<4 zN-8~{X^oTx6g0As{?tn6%)k&>_;yF3VPCX@#Sbx^06TSm2jtsm@*2@cF>J(py{||1 zoA|+;b?1e1VkXw-R@+W;y}sXMx;EU>XI8TA_q|C_$u9H(Lc(ulsc%!F7cfgiE|s0+ zWOB`Em-R9~7XF7|1$*B8k}UWCt3*0xd8%VP6^wDyq9|gflC>1r91& zayt@sjr#?otCr7fWU6T(IRDI`?(kle&J|+{HTJ)wxRyUcgcyEw>G&KS>0UOFGgx&v zd1?9?Z!j?Ya)QRN$}7rxITlZw7MP~Q}X=#bojMXZ2{t2voG2qH*&;99I zm@w=_KzRn#e5h#14Y8zUnrAAen}iCRXO}v@G1U0o%o_y#rR6s=Vi+hSc<%YxmuJhX zoi)1KJUyyvqZ?T|h78Hw@!I0`u2EZr`wt>spjnmr^{xYJHvj04 zKty&=u({-HIl(M0EtBQt)hhkg1@qYV*!uW^M*Zoyi*7nKIvyip?>^mhjidzzD=wP^ z=gcYF-O5tk1nyAkD6eBD#-Q_WuDu$JikUaZf6qi|??#kqUFU{PMk(H3dK4YMC{l4B zS@cMB?K=r68>vqUQCi-v3%r&NdHslmOw;4R zIR^!kf7@Zke(j3o)nv1);;)g%bc48`xVxx`A=N9d65d^e7Y41omS690t5|1p(yg82Y4a-4ov2-xt8AYXgTaM9r^*W{?S`(o6q3h|5yTE1LRx%%JWm{;oiX8XJ8z+> z!PB+V4*Ck#p?n5=ZGSmz0krrO2dwG&V>(h+bMwH6fxP;SSwH5zNWcR3+CdBLhU3@dqdR6swP{zfd3x+p4W&kL>#x z-ReoTZRQzsKxwP<;b>6K{nMv6-lk5nQ+LEB;8rs$B6zn6&wI86|pRhg6Ew+96&(!PBfAMI}B z&d)!1bN!g$?D~sSYIo|}BtIVipL@Ms>D+ztNpOKEfu-qr-S^^uLoV?<8$Nu0X-2;L zucr;E)fW{s30aDLq+s`7=8`f)FyFiE_q%_exW3A&F7ZMR4Gkw1EKibOKXaHJQA_DJ zmFDjrc&HsRVqXxuBk$X@I%bUO_ewFLiTt;yb%KG27Tw$j%j^Bh`ug2tRmAH66WsT` z;cE&lmK|~2{0p7IzKq|5d7(V_fWv@4i7b29#(xy&HY>Nai%9TS;lB-ZnH7==M8Q!LCR%~C&``Z zK7=c=&_v!U8Egm7_gkdTe-V}T{_<5|>2;^qgI2`_PV@4#dOC+9`>+opdEl_9g$9Vd zEv%jwj(8F8iF9e*I0me^)8!`Fn-PM{!_or>bBPA>3OH;)yNa866@;d-PHV#c(T}Ii znCGA9tRWX@u>W)2u%ExwU&bEZa&|4l+?@2MYaB-Tl3^_au!*P0BKlV~UZQNuHTqs^e0|C6bUAqZ zlc%VR;dwFW^4y%?-#8C+$gbNCcR^O6TNYxt?kCQj6`M}lMS6KJ3?-CIyB+ugV{=B; z)mq7^LP@M)^}J>$4|u76xm8j2`#jxiyiCciui>o5i zmpKi=a>8e}FPRMH`4*(${R?6};~nBj4AsZOKa0Z0#oYs>cMQV6iEqBK-awo1KN9-u zpbeDh$afja3AH%{$?0$!^T9DmEmk&n>B9{q!L&cn6J+(`n5=)_=<`ymes*I(9-zjh ze)3@37sv!e0_p+H7Zo18CyUE3{ zHTC|JLLyRWoA{?@Pqyck@5^^=;*`q-Nf@`|f$DEh{EtD>3Ah4_%Ez}C*lb78H*SIc z`s>PWFd_e&1<2-zh)@DWTtr^Yy-mvw4dYY4b)Y!H8JL#Yp-cGfxL;05>76-et`JM0 zW3(n_(4Lhnf2uB)CPXJ_z~UZ^6R?Eud>7E~N5-U0!et+4;ww>N74iI4U?|SJ&?wUL z!Fc=jh>BGxU;9uef^tPr{8~K0JluPz~ z4)>f!M`KqzBfYxy zR&NndZVEXXzOWZ8OWVxP3`nkJwxXPGK~8UmBPy&qA4+gp$J;UoJ^{k#OcoHJwG;Aj zvxWXKMh*Vc9S57=M}_&m9*^6ZI9LI*fx0wA<**hftk6MR{2Zxe5m3uibX>aWQ0A2V zv2%CFt<0J`DFGNMzbk7|`$)Veq!V=pv~Ou{>wB!rQ?PRv_3kf^TEq->IYGY8OK`V%>Ho(KZE3 z6h}%N6RNLFcLDmd`ZAjD1h+CauJ@%IV3uv~gj#wrwRLZ2R>+<}mEgGcR* zw;z;bG?#yjzRmca?HOjd7bi<@k3PxW+ME@$`Ds_<9xcHhNd&HhiD#-RMEE4At9Sg) zw=UFi1Q?GR_i6^EE;?2&Pt;qr@<@HYg>SNpRzE-Aj(jgY-ku`8%z1w^nb3IQK5adCT2F(2v&5l+@ z|Lsk~f#zxqTzj;gKo^9>WJC;$vnIVQjv+YF3tNRetK`Fhwwz_PY^S#Ipw+DE6^P~D zcPP1S{Un!C*A&B6;_^ACFN7=@g#P^dUfZ$;o>%B8jd$Z7J$2=0#_bJkGJ`sHSV@<1 z&sK7J@>`ozjHB%WJcPuv&KW}TpY3HY5_n_|Nddh28sOPv5<~g)@YyITp*|;TLoeE@ z_%<-9a06D}U({dk)h&vz=$r8M)r5}hs~VGzJRI|Anak3=7RefEbQ9zLEFO6xb5i>{ zKsoR}(>T|AMAY)-Da8Qe5Y#vSPm%Fom^O$;Vo%2A!xgFKUwz7h8Wlgm75yKLZU-PT z4$tLyU_R~bF?X5;i2iel7aP^gUZjjomFdQPOY|{r4xbOV+-BYXu6{XQ&DL;Y(0aE0q1-@b%bZ9Q zN&KJFijT^)xq1Ey+vLw>HhCo$cpsl=h!leJ^Tq*d7i6ML#y|fYl+dO+Xrf|Cl#rO{ z*WU@%ZY2R@l~15$*tR!P`d>55>Qy>bcgMutcd&7u#CBJz@Ofp&4HJ4Kt@O0D=f@bs zvB86ZlU1cdZU>Ax=xrv}M7~P>{V3!8JVrNUMtIKT|5)Pv9?#opRwJyHNRL7KNmSc< z4rBm&0Np$-9vML>Qn2t@*t9E&&i0#yO_h56jOZMQvWw}m5k#ghVmf2 z;HwO>6*1*p7Ru{O2*A0~q6&?q$>`o(?J9&+$)Wb#`wf0~ zb4+#>6!r>>>#kNrjPc&LzJ5C+IOM-1>+jbu|4XCx8NT@c*^w#&vSf9#(UWgnt)6_9 z&%cnmM^c`;fO+OeX+9Tpg~T*gmpG;_{%{qY}-!3yo5R!X<78B)D$@Tql|IM zmhy)N_}A5mMtD`auwX6EH{xvGZ~Xe?Vvl~LEl3Ong_;J3REyiC#pX+;`hW}5&M*q0 zFVbSTBR}dwhlqQ#_$1&-cR0ExkuTCDHRoI;beH8Nw#ERxPVfIs&l_DsIdB! z-kcvSDJ7cQ)HhHyTRnf^Mo!JE8dOU5^ZL##C)tpI^?O`P?Gn!03Wd47JoaC)W21(J zar>=5sOudSSs2PQsSTW7OA?gFz_w00=}8?o7JSH%3> z_FFoU52S{-qyyc$#~|IN>X#Jp+!Q|Tf#6=kbN)u=gA?hC!oSmATM011|Ih;aLL5Ug zAT|=L>l7|1ZiXktU^{$d+;C@}<{nu5JIa#tWO6IB^Bs|S^o%Ad%h*dN_{+oe+(vj` z@0&Nq)85DtE;khzy!`8Kc7yv+o*P61TV}&wHpv#H89?f6vl%tO28izH}Sf+TCu&;h|t&1M7>a$jSzA>fujfde< zT2_Cw#eASQ8^s*V)U**`F_lb|MGUVP_fy4f!@bUj`$x`p?{x+7y_aqiz&pkVE0h+h zbH@pcYm0qizxrh=_s=mDuLj?>YucKFIgy z$fyQRjZR7QV-Nef=~iDu32wO$ce_P&^ktTcy3<%d5a9E0m7#>AtJ*>%+qG{dK`i$@ zq$?L>gX82nwXZOSocBfm%OGr%05i)BO@wRtQ!`7;#&g@d(_;(0qyxJr%dq~mdhZyk zpEc4JyZ=n=9EUcAvBat)<_5e9_&7INV)eSoIUic}ldT18@K#{}2?NfM0S5x~<3~p2 z$9vs}j#Xv#eG1X-?<-}NL?-45$_3xUa5-;fPu1#xxv=nUmSFu%!v4?9`CWkwHP6D* znAOI_!7A@(>2@EuaslnnL&<&ey*o4PzEYEdzuuZ19ldFxHm;x3FMtWo)8@8O)Q=CV zhHzUW#u~o{6&~ZtcYtb7_KN6Gjgq|oiD*D^T8HNGy~p(U{rP{;^#9vOK?oo;S!hO= z2i!!nheu5ry?o`HtrZnGtc7J~A~z!Z6(`$|3a#;QoV?$)skd+{t-cvqEUE3k*X za0mg2OnoS4oJHVJ7Uuq)n);OLOQ)aC26?({wXJ1oLN2N|PQ1Qko-DQg7*k-+$dv>p z-=VZ|OPp54)8BRv>mZmzum7ju6=r+@8Voi zBfmhUXoH;5f*gdGfuCEV+Yy!QggQj!Y-Yg$GBom>@0FbxL$aGpLS3uoDVN)1ihrYf zD!OopQ|bhYd~p#UbsZ~TY@~jFBu*@5CQj>`QAw(7LfU5k`dCtjw1P!^>xQ)T4pci( zzBeT@7vPm#VOn07j_BB2B7OUAm0-KQlUR6?)BqL_&;MD%=4fxe^+swmw#^3D^W)ur zTm4!{?>I6SSRhWPmzFT@Vgd!5tY<*IgyM4m^&3yG1fS#`1B~ZcI>?Ua~^>^6_me6n2hnwk*Ad=Hei*6-CkgAaEL*CK(dqIV`wkj=rTErc-$6M z<`O|w0OkNRAG?%i+{Hw?syJzpuq&vdzMG{(DaOG+Qa0M09kiyO0c=`r3twie1jB=1 zZp?Qd=3ifNLoe4sCe*{p+K%3vpNfFNTN%nuK;|TS&AcS6D{mln-@l0ngWYQ=^OPN5 z&nHn8ZmloeVHOhUJ3DlBm%7JyA8c0Cr09EHsNQaluGcD$dE^Q56l^)#c?fdsy+FQYs#Y0%AEUsdDDYJ<4zjBpf*Ulj=55inUU{CqSny>_vI_ zbR0?IL^G#DXh07(VUk}-Wr{H zx>&ZqM3qRJqI}47_=RK!5qB;yC;T-REc*>sV3uhuzxt{M^#F+4lO0;wKB|b@1%}Zj zx7O0A?P?)cwj?-p2Ls~*9W)tsPM;e0m*2dI_|0_^pG(($Q!reQN#) za!!wA%nENMcx00)I#vBe(O=m26v3J^==tG?a<=7OSWoPs$;c+CcoJcZ3~boB-vl^> zhgL$55?358(XR+rAqr=8w&l`M%;EX^Sz64o8n-4`)v^|ueQf8ULM~sc+5aHMMOydW zid^n)=MRg{pHQQvj!dcc(|3r4=<2E}$H?%MSNB#Q%={p3eJ_SDGBB{%=aU=3Fxl{W za98-Mtt;mzSUk{x2c58YK>N=gW>(IU!acBxMlhF_K?tB|sd!b}wjUxTO;p8ghrg7}* zS^8G^LhB(}u?EAbNRPH;=!lH@atoZ>sGBz04Hpsd6#qiP%4o8gWsK8`)QnBD$@t0m zSYu{f8Z*HNRLig1Cq+KgENfT7(&$mC=nY}ulzK1Zl z>j?VXrtYYBwqy8Fkp4kin{<=9_aNmFkC%o`G2Mp<_QjHW&tG zeJrbCpVQKc_AP{GO@%EOQQOCQB5@T4BcKFu`VG_RYft!tmDREo^jy`L99_#bt5a1(81a?f?Hni-(ObsOCO=bnAGZ$AC1HuaJj<3 zmmuEadX$rX+}tPqvkXe3RY3yHF`89d;}hLb&=ObN4GcBTtkXH^?^Y1@LjqUQ3#PW? z*rbLDM)=Rq@tRUtsPFg54hVumX!EXPc$Pw17q>=b_Z`ho=;%d-fo*cO$obbvxQ!}k zJ?KR0WOW^W6dpADf*md>mgW$V=6aw?>Ab9k{0||)4c$WYVXpAd|g6$0IyJtz7DA+>?7j|P(7Ha#0>x;XSx6l(qCpQwR z^Qitg$;GovI(9IgJCv>MGpQdjXZVoUM0|r=)$&M)5pmdXCh#jf(>{e1hUiD;acM`K zR4%F_$-yyyeC#%EmsofrWU#f7DmrvFl@#(RlsO934E^0&#_-QUf6qpE3*6|UbhqgU zyA<4uR<3SU0~tbBxz-QJw3wrwk+q{PnCHPKl{fPh+|Q*nBq(tBXH{?;$!xte+^pm8 zmSL}N(vf7Z4gFTz!?JQL-f|0ln~wAwc~oXZ+crHy5n`Zme3#C14dfS-_a*)ONkh3~ zyV99c;p1?tgnPIxssXX{n4Gk7W>zAv05GxO4+@VR}U0--lsdVnk8eM4+){DgiNbB;yj2I2-^2DssHu*{xE6-U0;U+1X zu&>!kCIg^HD`Cev77U~GHtTcagnTrC#k<T z35GZ~=o@zoE5ZX_9pIx&)l{U<`rGmM1873i0-oI@vi@X(s*j(w9N^q4SIt6lGqE&U;L z8L-0H_<6lRttuIb9j1j^PFk0MEATK|JOxzUU)hyP@Ca=c1r|+OXfgT`5XqTIcmVoU zaxr~CG*DX0mXs$-k2z8R6GVKAL^A0cp>$GP`;V@X)lN;1F+!hX1Aiqi_TsQby!7LwOL)!9H(x_3XLh2WJk7=ip5y`-^tZAg@a zCCz^#k<=2^Fu<;Msg=jwL@)F5xJb`X55bPWxo3#Q-yBoWn}7x`c$s*m*lu~0cdejn zx&Q?om~LwiQMa0IYfhXTxbr9cOU+3Rr=|eA2w4s-@ejZ~bi+EN;=DQAsJ3ypIs_bT z$R9|;u)hC#m9zu8*-^+wM0>Puh%qY(A3f!pBNoD5Y;VXfM^KUm-fdJbkJlRg4*dMQ zwErDQHBRVpguZJ!rLqE>-mL1{bbVu$1G;u({;RN6|I6uw^u~mb|Jl5_+P!Zg=Eb*? z?5UbC%-*?U&y%{|51WK ze5Kxe&u7r%uQi?H9wsr0E(^uko$Ty4nws9>mc_ma9ystLBFgjb-IXe26`V9!(;C{r z^{Hb5ODxBf=T$(leGs3r&kamOWPxHmcG#u1A?FS$oYgJ+j_ux>+?jZFdjI|VHQQw3 z?RcH8HP^^sMSoDyB;RblFK1>nSlq)mi&9_Hz*lUo!S;hbw^fER2;m{=;4NjeZI+75 zKwtyUzsdiW*A&ugZhWK|*D}cWY1(Sk_QsdJc><>UkfxtQI6Ai?R3n`SYz3_<>lrX+@yheN_AU)97Ri+D2)I0;0!cclqCFzIkkZEw5BYlchADle3K!8)=w+FhdonHW33cIAt9`@Vx5mszhYA19l9C;ka)7@jd^QAYo{Q^sc-i(N-kkV z%?mJmLP|QwX6tKPWsYW99x;5rKhLQ#z6&6D_={uo!N4q)RF1@SZ>P(OizXj`ZxVJd zDNQ`rsh`iUT!{Pr(&NF4bj|S1wW|2qKRHHFr6D|oJjoB^0}{x~YZjf;?04C^phZ#) z;~G9#voV$fTp)+l2AP1J0JZ}A=EeQ6^v~0C!Fj(gQ-vTuHwFk5i6J6T3p zDm0VQ@qt5{yw|XJi27hwz~iqikSmI_3)$=Ib){Bw=_9heGYPhB(t%s7kkasZB`P5? zFmC_1py?w?=KQ?uv@!)0 zh)eCYo)7q*k#I1x6p2-J-8Gx=|C~^Rb#_FxDP0A7n5?*!;rg&9SY5i4dOiKiNWo_5 z_m)@UV9u9cjUHc<%E-6n1SxSN%gO=+)}HP)omX-kWK24A@ZZdy34y3-PqSa5xzC#Npms`h44NU^a7hPeoOdoc0{ViE>ZO7ZZ7 zC}nBpMpGipBcfY(&vl$+2VIVmWYQLZ7MmKU>0$2A=I^WK_B}mhlH=CpGq80-lD|3! zJAWLzT5tz!n9Da9<#>JkV3h2vFxwQTw5Sg%dEZ^&_Wfjc%WFB0!vRY)WJ@jxr0py$ zUr#5lI>%=wWfeHnQH8CrExCC3*vS`L(7;^ESupNoinEkq)b$}F;_j>5(ym-tRcYPL zqe%wuM?n$n3%tb1X@vvRD+*vz{-)uVf5N;5QRb+23bqZ%gS~Y4r5icK33sX@4T!t@ zOy5`(WE=YO-8A)(n7^VrBGqZkrB~}ynnv^8vQ$86?F1T{7cH%^$hbszO5f?rl}y;K zoooZ{Z1tZk_=%<6L(TypBUH+>BWBK^v=1q59f`UTjtmA8DQg@jCsIl)fsc!VoMl3zWQOSK@rBju? zWN1r@*q81;zx-up!{{ec51g$TL7hvH8yTMcSb%CG7W3ZadX|u`+q7>iSy2!6FcO=0 z)EO`_$lJh5P@o!j2{o~1SNql5Ck8+!PP2A#yumrtK-IAz&$v<)?S^?m4!$7bkv4o1 zL!AT4&V967(_mH#?4!Dn%J+ME$KcKWXVYwL!Zxs?b1iF4+OQ#6-YQGu#?7ln7YOPo zWmKh4@I)OZ_zFMMO?Gn3pL8|;$}`~3BgXLzget@oj0 z$~78z;W1@*%f&IVc1b%_ys3jZ>3}^0pbPLSvDPBlCkXQVDuu9^LqB%vvL>Ov{-0}@ z=+3{8CGciayYag!g#|PjIS)H>#-{bnB~M;Or9Jy-{Zwx)2EAllLLyKmC9FA(f{Mg~ zzonb!*3tk>F&Y_EWWQ>pj3moW8JEEgCK`mulr4P^!VREYzWFD8o3UOu1BBZ&}df)qXc-G5Z%2`wlzqFW85}(?AfGcpziMf?m#%ce+zHGxTo7Bzkw` zNPIOYn}0FeJ-i|ZUGwT$qG*o);d;`qmRw>UcTwE#xB8FX5t17;5l0hOT-sfat0c`* z#j^yoQ3H>c`JmQv#rQ_ls;AN8{=&RLzz72=RQ0Qaku5nAY}FdySx8G*u_^T-yD+JP z+WT9F+{6e<@(gA7Rww^vkEst}%*;10lQG}(+n_6)yn=?WIR=sF=&`E68N>BZA?`w9 z!oZPof}-0&mBTrh z`F{C?{kvj$0GoE)1Xf=rKs|12z}9v9_v7zdE>F+gnxxbY zDU^0sJxGa+9$$`V30^j?;5}?xymp7<)jGAc%{m7M8O@mM@l2!3`2fk(Dc_SeW2MVeyiu}ZX!|&f-b~LSgiJ9o+)g>sBgV1 zEIJOn$*BRF+-tt9s(!EOPEVa*dUZk*_m-t=V)(qes7skezh#!n={oE5jd#UHyW<7) zrw%1p(&KD1qDT4qTpG}1G-fpVg zIO);=zLLvVw}*cn?5|k}B{`VL_HT#+VG=hpCr%B9-%fv25m*vE2`!%eZeOP8p4U)# ztRSSEQ9gSM5B!xXD01!{#cbz(@Q<7^mbH1=(C(liD{a#3zqEd<-l)Oz3rR!1H-7if zLZI|Ta8)SXWU_>Qp|Srs*a&itrg3Oh{L6e%-!H@?ux4sntRVai*^#vDaqP1-)yS}; zITjalP7Y*f`Pu)l=!M@+y{N!{Vw$iRMLPwf?`d8o<7oxMkxNtGr8-+-34l4h5>`4S zHsF2f^!LfJcwZtYwm zQZkBmc+fNY??%%yO zH@)ilp46`GLQ0K?!cK}f4w)uz)!PCML=>@}|F3ZCCcCE?fA;!+5;p{5MH#u&c%mA4 zueIz&`pJZ7CN-VNI~Mu^_hazbxn5I*OxTNy$_Z=o8jFaB>$f|f*e`v>0fT>t2gG(4 zAIpCYUe<05ASP7|9;))31xV=p@`|R75eIedD7SziG9$RPSa$q{vW>q2cJXj}O)E*y zR3VYjKHHU&%dX^M2>mw1=>H@U2~)!?#nSHQGPazo?!x625rkn;mi|4svSZDo$)`@q zYhQT($e0$uSLA&czdgi6Ng-{^`qfb?a7t9a#LJW@MyD%g)LJ2z`Nj_VhHdy=SmWz8 z%~6f~m#Yd2;5Lf6aZHK1q(bBk0i6H}yBQz4hvpDpka6BcM>X)U|QR zp50efLS;81re3R$ZX}zZ(~}^L2No=GgRH@7<9U3cJ^^M-lOz%{lpF<(m$R#Asw(hL z=dUAcc{+hI4zYhyc3+-ST{57x-3TBykMvr^#%S!!&sBu)9*`~>F!L_03_%36zeot( zPN`*I+Wcju4t=5VB1*-OFsU5B&7jJ3VdtTP7IJY6_aD z>&JO__CSgEGH1G80GdDdMi3@^`!UnjI^f?tmudZGiLSytU8`p?x_7#TRwKf3o}HM( z76cWS(yjyGK|p(*)fFlep>9sq0*=poaEQl?0$ zC;x?y%Su~oV|sc<)_iZex#cN!e~NAs_e^@i_e`h$#A4%P%_4y077 z)xkwW=p+3SCnBCM79`@l>-#JEm(TdO(;Frm6M9A+Os3b9TW#W-{9R|z7$xY;bDsjh z>Q6SPJoGp-@I4UJ&qnWWAGD^e->U<0(Rj}JR zIc;{#DwaBaO}1b$UP6(82%ZZd29!mTAFFvsY}_-u+aK{*BxXTuI03@wLW zyzk^xB~u<-zB=NEY0aE6)`yJWp$QZnCItuEwk*^gHb`A5OF z0TW9=K~X1Ynx;%z9~OznDzX!1Xj;%ofEXfs2;VNJ*q*^(uY!9|ceJmM2+8G7^+2{v zr_WuGx5~7v6UjxrJfrLrTtxd{+W&T$(%7HT>;ZEry(E+x#~sox#AB8DkMRGQ>GtPm zJ13=EDQuWtwW&Y{0XnY&s)Y<7X~HkF-wJx9Kt}5?5I!n<>cgdFl0xjpvW|kgQJj#x zRiU8Pn18{h+mKo4CtpmbBQ1+h`b(DfyFbpdwH1Y}Oet~&_3xZ{z`5XFFmeGD<0u3F zSaoUH_A0YuWy@6~X8GWPL+Tzvie5nY_OY{2e;g7PG{?rmR&~I(2M$*~EdF8N9DbVn za3x4V!O*Q+!0`Ki9HZMvPeHAN`3D82LJAS6HsPDUANo&~){V;X8)eXTIXl$KJcpmP)wVor`^edDyy19G^h1bw@QMdNjUACd*mD>=O*R!m!8 zL(MGqzK@lWe9*d3q>!F{ulzw@W4pgmVeFbCaXish84f#?Qo|04p{NbOtSFGtcMC4$OyaYx)Jrh z`=K}Ig3*QgX)^$b6Pa3Lz>fz+{eF)^?8tF=6uR&7wJ8P)OtPMUYV$GoDbA=T5@?Jh zvAv?;-fzU!Nw2@NnmI`s!_ZPTZp+`OvEzOd?6hT*7hS?P|AI~Kln+IjUjv?8hUtes z=#)ri8(hFe7Qbv*eSX3}$CQz>amo0UH0W7u=`7tb2Ar_s6&o9*A-^QogunG#B5&m5M!PRw! z2F12R8nBiFkI!|BRMTkPoY$Qx^>^ zbh|TyDp2TRe#BX_XsbHLd`H=ziU`blRA4$YJA?N{4Kn zh)MB46I55r0N$7XS2+egR?`2Gje!oA(D|=W9mhoI4G@_X?DIUI(4&p*V9y0}S+O}< z9MT#gaTZO&UG@-jbutLT)W+ujJjKuwpm(XBS7qQPhjK;<-4x^9i4hW7UukK5BY~Qi zj?A061FdIZ+mn5FH|s0vrF{wcTnlPZ*OtD4R6b;91xsf&9wR+;Gbh1rRu}$!Ow6v4 z%R}-$P$wQ%rxOO-RRAGmA&6enn_H5g^yF2~te=MD`+#MN+L!KQU?M=)EjW8RGVMf< zmD&XKWaR+jLymc<+c5YSMI5qytuS8ZEV}=$pm)RK1=MXk?6URtjlJop1X0!6&T^Zc##!G$`v(LG0~zZ_`>DJmwlUJ!k3C;kZWvbI@(IUs+^@Iyr* zf8|)@$^zv~QSyOaurRN=VJH4#v}P$?IY2y9Ss`JUoxKP5)8+Qspe<_7H+cve-zBDv zed{+;wAUw<)q83@3vY*1mA4L~$gATF1zkeA zq34o2&Rns(+S~D-P{Z#Mw5Ho6^lsE54990@K0G(cdss@xz8sb5PUbqJgSq%AiT9Y> z9s+Sd@zs45u%e_Ok_Oj~8pw2i8NIX8+7q02h`EsSuo2Fi9%>!V+TE(sk6+}Z#G4PT z!^J#*LEP;=L>=LRxhN{Ut%+WY;Re7P6?*)VBZ5zwPY z$=#7RKlyDKVf?c6aXV)%k>)M$0DkL-$d}dKjUFARji;ueWh;yl-AqDQ@Ub8##;9e; zaapbRoxLgdwWddU2jz0N%pz8@T@~oOBb2n71C0))D{t5XMqRlztsQ9npHlka-xS|i zi|va<2l*J|Yv9Y69kbcavr8vm$~<;$^ivZ2B;;{$Vcs>mP=tL54O|A3_EU0Y{SomV zW)QRdjya@`({iw~jpvD-eYC>d3IFAL`8+n$0OKHua4tK(v`;FK^k*ZYA<@?0SbOyi zWZ2?xXPApIdo59JAbZFo5|iq-Lmbba8$UT0^|D)hl)E5)^rNtie#Cql|Hu&_E$NZ; z?qgD$e{pns5pXHy{HSbH%*GO!lAy6ACuk{3o$HDIWf5$6i6{f*>44+vU(2vlo6RhD zea;(gv&~f4$=zYY%J-|?FL=i(j7y#mlxAPDw{;~ou0BW>suv)h*AfZ4`~{Pt=Gdp! zH6HQ`Q?+9|n zr62YC@8~hNc?Tt2B%~?&TLf?ah$ZpK!6 z4;oDN@k|tnA+ZQlpvlhF?hG0*ex-Q_9L%${X5eC4j|r3p;fy6 zW@U{3(i76FE06hg-jB>o2npk6}?GmB#VU6_^v8KIux-kN&|7i^6rr8S^PA|NZ zmgi%*i1KU!7p{^8P-*LfA;;Qw8kR%PxUEo%|F;Z$YrR{xYLGsM>NI>PDf{~D8Ao!1 z^g)nEW2dX@)+>e}nHtdiGsdK~VD6Sxq5jJ6pm9M_q5mo56wJl)l%W!HHrT9>1 z)X_asFA~>UXgJ2c=F%Qh>L4jC$YAPUuSB<`97&xl#=SRRwJdkxAI;ffoWdXK@T^U` z-8N}&`OSW{K~JL+lQ&*vYWk`zc(8C=0{_Zb`J+)# zCtnq_uS_a@qbcMIf56OLBIXKxL$y`r4#47Vgg4kF>VM2Sl}F`7zmFRKH>IQ$FZb{g z$U6T)$2eq1@+S>g-Y%0F&OWQdY^9auG2%nSbf7W(!TlN!e-SS{s}(P#dq3?Hl8qVf zO$usJZ^F|8$qbFfPt@*TDJF!T@8Y0GK+(nmX~5-b)9minz9#JDoVuThc!k&J0tvIP zP%Leu0Gj&Xpf1#MH4b2|0l22aU96F*2h{j*f6l;z(fh~pPWetLAC zZ_u?vpcvKG2D^46qYPxUNiHcjh#b8hdW+nY4k>Qt2MC{!r8o=eNya-tyXlXM58-HR$o1LdAnycy_tbsJ}Ys z5LSKewL}5mK3>4_ZQO>vRUOJc_P)xJF=79Mhi^lKlm(WwacN_awK~|=SZ!vSaBDb> zU3o8H(q5(e`GfzW_YIClYpIXKa!VCxm-@LSwvO%q^!L-biibZQxw)I78B=PPNc^}_ z`0o#Vaf*?I-?TQImrHOW-7A5eR>}3MI-HZI1J+WQ*y>7`al2=kypY;)u9(c3A{pg+ z7idTPIKmV3R_IHPXDUXd<`fW2k>Zw3vxrRhb2dOr?EbWq{(QgT;$4FZ@MeKQZXW3* z)R{^Cs%l;WI~6Q564ZHTA%1Iiv9SaEep(Um#s{Oo@SZq|5%K5q4~AIk3ix|E-K4g4 znzd5OiuZ+!mIY0OQ@`C)H$!Q;}#h(c=j%>)}t!h=qljtjlQD59B4e6`VZE@wz5{a@{zS5#Bm+wT4Aw$~38M5QPK(%tk93MdeoROz}Q(xey&B@hrS zY@`#4Arz4&HAsh0R1^p$NJ24`AT1C=KoWXMz7^Q}jBzf`I5+2vaW2kP28+qcnsd!L zdFS)K&yV*p^qQj;16Jj^s(Cd83Vn<2osW9IPWPV!q&|szvIJeDyxRYYB{jo3Q#BM& z&|<3P`T6f~s-=!u9anZ(d-d^AbxE|j(hTkPc63$w@jd#9LHV}+*|AD!w3~`eAA`yuN9=gLVG%6wGJ&O%5%kmz3%B}9KLck%R47&95JHufyc z=|L$B@BaOMdLioXw>1*^GxZn5Q(=YcidWo`)1S`h507iGb}v2(Shr;Ow3d2Y_^`9r z!51gn#>glE!FKGLz-rV|&7C2bJG{(?CYtOTSEhkmbG-aq!yA<}9hA4+?z-M=GOC7` zrux0yc+ebyx?Wbeex;N^fVrN3{pEua>2=Y~1`l(98MCf(Q3z%#AkDWjzGXy3J)0mWu{Yn&cC zv9irGrsAU`LYc<()7p8Bkt0j#H{rM;Idkie&UIlxopxfXmKg*ZE97P`V5pIL$!+fy zs9!QN4w2-aCo)1yv$G{g^9Y+G3tZFgQnQo5KVUjC@T3613w7;K;eXLobNp$_rnxqk z8B}#6#}+9s5&yf-8!%8?Myt(o>xNN})%Zk1p+laOB-pL2NpYY5R)BlTsffq=wEjRp_~Yk}XAP`9|K+hYvYlw|jWx z1;GxRlOGl?|xw&KXpi#^{;kbzqaof_&@H7I&du+w$ig5%}-qt6$;8o;xdJH)|ViVDFJ(^&<890zO(F5;OlmwtGTYF z9L5w;6T&FZNw(kYP+(O1?W-l<%mAUidip|^9@~QSOXq5dYY&GMMaYCe;@M9}luU6~ zzLH`!MLk?rDFG2gTrPYkT~mF~BpPF=Xw9r@>HL6GGf54%O6RnuQ-eg~%i&y<-1Ggvvw+k?7KBYM$E;`^P>kc2MLHuD&g zFh{s@Pf!{Jc=hZ*j>lG54M?KLb-T#WV@W>+#X9;@1#uUE-@J&46m#db*iF)h^j^MO zv^@xEtGS$)C&NbPydd;VwmopB&n!ES)uWw<%him^>zsdTdQOct=ld#HU6nPim|WH`v`qSWDWw{9(_0ajMjhQpa5BZSKUE)nHjCiy);GTB(&c5a5GqQuSp8@67Sm2uu9rEt}9d1L42okJYOrbF{&#^#?Jw>F;AAUR#L1J;9)*m^4= z0%!sHcVYhfiTjod^E?&k8ybiq119o=TG0P%_%bJmpEy#viJji<*;h`+|qQe>$tt z`tj0ja|3#ot!Cw1j|6aVgzh_<`Jr*wmBf#8tfy;K4YBm1t+;k4o&P?_DM}~#4I=k@ zka6zcf&c%X>^J(q&$9mC8mEJa&whrYho7dvrp@g&rbVV;5&MFeOQPnw5OR;8OBN-T zD$o(fgLw4{4kR-yt*c-);tox^WE@fgl*XKjc@9Ytb+i^WFB8m{YPbh@28FliT&asn zkZ$h6$8f>zq2BPlVDQ|!L}k$UGTXRlz0L@z^#6X-B?b|_KR0w=0~=bmTG?{SsF$}S zxI5JsLP$#y3rjQZ2)!xrph@cZx$8a_!TOwKs(sRMOGh2#?gJ|9^3-tJtL#-+JI%=ppq~RZdKP8h>MOa4E0Ypd_l=f zCo~R$2wj}0vlTiMW+4>1*@!^Y?hp5iD-?-1siw_J^CH-51mctUZczB@V!xVKo%Vu6 z+=g1ev1G9ikVFhEvynF@Q5m}F6C8T)*-P%*dp*QcJYcHM3R)5`n`b=BR8hNiQ7Fb2 zVoDx?Nz6`?+KjQjE^a#6F2Pi!ymWAvtFSOrdJA90tRq=s9(ptsTRJsVFRX=|lksA+ z*{$-}@Kcmc;@iQzH39fc2W7g~r*^SnraaOy_1ib?Ef0nb z0@%Y65&`d?N6>UH6VlENYZh=KfS&<)2x1EyBfbZYLR>>#L)9W8L+0|hJ>e9(o&Am_ zv6&&ohH(iiwBUO$*KkGlN{8R8Z~}5UKXdxJ>z_y|DY?1KTTz{NYGd)ao`%A6+5igA zEmY3cU&m5dSly4*%>|d*%Wmnwo?I?l>7L#FkZ*8dXX`k+drn|SQBb6Cl%KW5rHes< z(kK7%K&Pbfd5WK&3-P1_<1H=PoV33F`3vp`C7+;mzC8qN*cY`nrkG1$Fskb-Q_IUW zmUefHFCHSU&e&UFmv}~J$ecWxe?HEH`}-hG1!p*;V!D#kZUw*x?j z5;ADHPoA)(vf$!-4XkKW4*juGgUfNzE2E}2)#~WxZSq0*F z7qeXb*kgE)U(O)uk(^?H%lw0`;xJN0jC=y~~dgSNlsdO+OguAlHd^%*t6< zpCKZ#SH`(d)#QP)yol7OJX-EpkP9YV%88a(+5wcA>&F+t!)RR6V zV&(IiAQtiOVS|>@3ibHTw}QSs!8~(oUQ99Tvo?Oothnpv3^4Gv)4dfqndCQR$|wj= zUtD%YK$@ATX^ZJugi!2)cd8a4M(X}M)#jU=cEd!o_Rb00A(TruueZhEjM`A;TjbEJ z)r6~qQ+~Ji^7lcPKcMNryycE%B5Rn&S9ksF=au#1m`EsOuAVzHN;ssOPl~es)@D5; zXr{*i+0z!h+)DaBL(xF->HhR6=Wr9|N?%_d1!oPLUj6Bcj%jNde^y=&R-!&bpl`zE z<=&==4c#J93Nv#gn4F_~c(e(!Uv4wQOZfl`F zxQ_TE0M&RjVyy7^rV6VwS*a=rK!bjcT5^MX7qfb{=Z-RFqovf1lK`{3B?rgu989=v zM1z^|kS}chOnyfBX?tO8(Qql;j@e_g{0^l+yU0!4xPkmls;cyy7A^dS@oRu?O|xx$ zBhUZ#kIMlBTsDR6mJqM6{vJDsSo8AW(>)rUocs!oF(ewx2+tu6v()#Po3u4JsEl2d+}mpvasCwhty8&VIQQm->AdU-N< zCjVTG^X?Ca%B2k*>9BUipuH8_nGWv63o&rL5?1=xIMN#+28G9!Qq8U{L5 zC`OyD0Q4xF$pYJfNZ!4pk)V!J)H}r~e*5L|vp(&*8h)9t7XD)ztUiDlF!dmFwe@6r zW;$|9^|fr|Hf?_St6{aPkv>e;$oR7fl&0aJrda@#J7+g+Q!ssokzBP}F>cxCWvqz2 zpa7MEU%uX%FEWa~Z)cW(yuo2zA*o3m@NTBZyu~dI5riR%RMp zW`N6ixicGqPfMT0ue@Xt{))QzOU`pA*;->HH&30#6&o$)=&=BtTM`n@0k{%Fl1ZPF z;+I3CC0M(Rc*L~A)71|A>d<|mW{t)1TLBy@_3W%1 zFVvnX@-j}R50+S_Z@@;u?yqeWE*B3$Ncp(_To!T|z_+4?4UkoxYVqe2+Beia-wZyS zfLW`~fhZGYQL4d?a@;>lEPkzbHe;Cbbq37Z-zqZCV#7ALw?gqNt!Fl8JFxh<{%tY? z7MxFef2U@uh8OSozTp1((DvO)Xj|%e)RR2|n07r6FQUnSBva z>;FB>hY*Nl$#v&XV=$9euo}Z7nrB0xd#>+`zC2c(Fy;kkWfOS4mgeV|lYxzZKlh`# z2$K~%yH2glPm-{echU7W4jHq1BIeNaN{=0*sRjEffB|S0_>CtrZiCJK0fL6$d>uvs zJy%Mx)gG4S=xKy%0xrRLmAbe zfot@BRQw<6=sK%)23(yN82tSRcQi%^txaRPpq@=M_G6Wd(6=drGPDYTWZi6wuyRK? z2d(~JM(CdaZp}-ch1M8Gl7t2N#ex9@B&aq^6kqv=7#j}iaTl^?T)u?uXL*U)6gNF{ zz})H3f4obG*wWA|w_~!JECA&tac^e>6d9?kSE90%q@m!QO0H8# z#Ko&}1|Bm&zjwRJB688m*Wlo_VhcL9aJn~F6qetsUio3#^}@y$mm`SO6l6%U52*f~ z;*vTkpdsB>r{E#ZwRyOy1>G^nY5`1N_U?|^tHmRzZ1Je>vUvBMRH*bqSx3m+yY5~e zEZt&uNzz*nr#hGZB!8|N##<_n-m};a@DL5~3)PZDhgS7$KKt8%cdtNogBgNNm5Db9 zMAwP$GJR!AVdKI1=EWqFbhY12+)OCboSRseTTM~cmMl+d6#EM`#1x8`Zyn>-Zvcv- zB(9&8y?4|`|7EgIxM5!3o74E@V^4Ap^Pu<)6AG%&B_6KO?FLxAXRTN>3t89C;`~A) zWPzpJ4;(Q%gSZ@b)@cYJTEu?-q6M^1mDu^-v_z~@`5`ki*%oO?A~gr+Ls7MrP96S5 z0n=y63nO7H9y#zr-9#z~m!Sk+U$hSIBlo8Dah(uSbo%D_5sHusdopLgFe_zes@y7l zH|tu9X7Tt>efd&5akPI67T~_FLce1A-i>m~!Pg#6Xtoqv*5x;d*8L7~d&8L?NDNcqXb)#XSd{^3q>+eP7)ttH z?r{Ag2gl)TLN!pQ0A%b#jNEpC4TQRQ?zmyT&UgPYR@Mpy!s6Bl z7xX(%yS-?0bU>kO6IHKa;mv41Wv|(=Wi+KGJ>7*+&7}vIFVnVW`9g#G7>+B&#EMvo z1wK>M0ge!19NvF6{#Vu8S_^g!5YV(Os%z?dv@@|XUkGhFD_U@xb>ro+t^&hr;Ekp6 z0rC3npDveQW1{(tk%fLV}nO^y~ zeDjY`Uw-XEK9Nt}8|Qqxr(R_Bg4>D(E6KxrU~^VSPg#uoPi2*0Noyv8&7^h!N;DF;K*t^cb0rEnv7r--* zZpAFSNg$=c(mdgh;1l!S%G_?mCM4ylWAO8_CM=890HaO=KFM^Wd+Bmp*^6ThW{v*K zPrBGVy+-J=h-27ZO3)j_BaMS4R@fY^NP~vP99%5GK;UE$fupigg9w-VIKVUh9+alM zW(!SBud9~hiE^!2$N82S-WjUhF;N=cLQjs4v_7UgP(u(+KbXqI%YTu!Rnuu#^5`|O zJtc!pZQZ67^RJ(7H;>re@D&Q1#pXPB?J%2X$}hJ%^aXW|GzHXE!{pc+ z7}>Jp@nl!B!=HpWoqK9p1=$wcW47*w+w{{HFEpyHcU>v+*ShF(TV3{0H*APV-uh%x zy$hg)d#j#_YN z&2d(_+uzqNplb$77569c6tcRnd0*8OI~l+2{S#l=#2V^=##kB0dm%$8)+}4#hKI1$pQaSpC;ow=;9P_+Y<_6%KZI|0HHfR_V zz!bD_*ABoq!(>-e;^+YFIWuST=05)RLp4x(gA%Au^ma#hI31 z+wLCZ1ORR>v>M{X?b*CdYca=3JQ~0nwpLFk3}-bNh9VUPv3l25x7qSy-jA0&%3W=l zeAqjzssa|G!2b7nUfIvsC^Tz)?VYR}LC&7pm(Da!_y3}?(l(r#QGM|3c@a#J_5Za7 z#kU@YpSsJsgmI`^hrrt~d5?;sGwqf~s@D~eN)#=mw3n_OOIU*AV7QF{;GaS9aJ{9d zMX`8(cXHyr*QfMw84WW%GR^(OM)iQygbHI|dl2=oM5lg_=E4HA)@h;t&n*2Ev^Wrt zCgIcUZm@a%AzP(?7*W6UaARvW60>}+)5XtvIb#tCpQ{b=Rl+%i7zL5J(V`t)xN n_FOyk>(2wp`~TTbk(;dJA0U{cgFz?v^?N-XBkl5gk0bsYsTh4q literal 0 HcmV?d00001 diff --git a/docs/docs/administration/img/delete-user.webp b/docs/docs/administration/img/delete-user.webp new file mode 100644 index 0000000000000000000000000000000000000000..9d03e5a94a740264804b22e3d1719656fd3c8cd3 GIT binary patch literal 7296 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 rKhb|*6p#ld7zXk_~5cU!o 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 TKuZ9e4<{)qD^ek(=l_2In~0Qi literal 22216 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

Y>Q;Pbc zAb+s$y=ohT+k}kE=`o`x+IyDB(^Q+yD5hJ#9t@+wb}1S!-2DB6M$K!A;`%I#oCCtB z_bMEiUXCpJx4DzAJKPDrg(vet!9U}>l+p2bE$Oxh=;Ty0e@Yd454EhNiZv&ZPEK>@ z1H0%pzk^1)otK1mv7tKK*l1(kfNtM8gi*bR23UvLf~*PUhV?8H6Z*SzS(;?Llb__P z?%+HH+^UkwCEq~Kw}x(Sirz&`VG@mbnST9?NQ_vH1hy z{@79b_>$@IXHOQ%1=kPuTQQ$Bco&<&$u~Rw73VL_$?~9}^^B!jBSi4_dB)93Apv0M z&ZPsr+}k8!0DhBnL%Dga=OES-W%7%Psj`NKo8#o19q)$_x%Haozwa;hC@Rmm@4P

bz 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 F{|6wDHSGWZ literal 0 HcmV?d00001 diff --git a/docs/docs/administration/user-management.mdx b/docs/docs/administration/user-management.mdx index 0b32b1ff8..47021fd7c 100644 --- a/docs/docs/administration/user-management.mdx +++ b/docs/docs/administration/user-management.mdx @@ -13,12 +13,57 @@ Immich supports multiple users, each with their own library. -## Delete a User +## Set Storage Quota For User -If you need to remove a user from Immich, head to "Administration", where users can be scheduled for deletion. The user account will immediately become disabled and their library and all associated data will be removed after 7 days. +Admin can specify the storage quota for the user as the instance's admin; once the limit is reached, the user won't be able to upload to the instance anymore. + +In order to select a storage quota, click on the pencil icon and enter the storage quota in GiB. You can choose an unlimited quota using the value 0 (default). + +:::tip +The system administrator can see the usage quota percentage of all users in Server Stats page. +::: + +:::info +External libraries don't take up space from the storage quota. +::: + + + +## Set Storage Label For User + +The admin can add a custom label for each user, so instead of `upload/{userId}/your-template` it will be `upload/{custom_user_label}/your-template`. +To apply a storage template, go to the Administration page -> click on the pencil button next to the user. +:::note +To apply the Storage Label to previously uploaded assets, run the Storage Migration Job. +::: + + ## Password Reset -To reset a user's password, click the pencil icon to edit a user, then click "Reset Password". The user's password will be reset to "password" and they have to change it next time the sign in. +To reset a user's password, click the pencil icon to edit a user, then click "Reset Password". The user's password will be reset to random password and they have to change it next time the sign in. -![Reset Password](./img/user-management-update.png) + + +## Delete a User + +If you need to remove a user from Immich, head to "Administration", where users can be scheduled for deletion. The user account will immediately become disabled and their library and all associated data will be removed after 7 days by default. + + + +### Delete Delay + +You can customize the time of the deletion of the users from the Administration -> Settings -> User Settings. +:::info user deletion job +The user deletion job runs at midnight to check for users that are ready for deletion. Changes to this setting will be evaluated at the next execution. +::: + + + +### Immediately Remove User + +You can choose to delete a user immediately by checking the box +`Queue user and assets for immediate deletion` in the deletion process, this will immediately remove the user and all assets. +This cannot be undone and the files cannot be recovered. + + From 761e7fdd2d914c172ef08084f286ff53483581d4 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 18 Mar 2024 14:46:52 -0500 Subject: [PATCH 2/5] feat(server): memory includes partners assets on timeline (#7993) * feat(server): memory includes partners assets on timeline * remove unsued code, generate sql * fix test * add test --- server/src/domain/asset/asset.service.spec.ts | 15 +++- server/src/domain/asset/asset.service.ts | 11 ++- .../domain/repositories/asset.repository.ts | 2 +- .../infra/repositories/asset.repository.ts | 6 +- server/src/infra/sql/asset.repository.sql | 83 ------------------- 5 files changed, 28 insertions(+), 89 deletions(-) diff --git a/server/src/domain/asset/asset.service.spec.ts b/server/src/domain/asset/asset.service.spec.ts index 8ba5d93ba..361946f61 100644 --- a/server/src/domain/asset/asset.service.spec.ts +++ b/server/src/domain/asset/asset.service.spec.ts @@ -15,6 +15,8 @@ import { newStorageRepositoryMock, newSystemConfigRepositoryMock, newUserRepositoryMock, + partnerStub, + userStub, } from '@test'; import { when } from 'jest-when'; import { JobName } from '../job'; @@ -317,6 +319,7 @@ describe(AssetService.name, () => { }); it('should set the title correctly', async () => { + partnerMock.getAll.mockResolvedValue([]); assetMock.getByDayOfYear.mockResolvedValue([assetStub.image, assetStub.imageFrom2015]); await expect(sut.getMemoryLane(authStub.admin, { day: 15, month: 1 })).resolves.toEqual([ @@ -324,7 +327,17 @@ describe(AssetService.name, () => { { title: '9 years since...', assets: [mapAsset(assetStub.imageFrom2015)] }, ]); - expect(assetMock.getByDayOfYear.mock.calls).toEqual([[authStub.admin.user.id, { day: 15, month: 1 }]]); + expect(assetMock.getByDayOfYear.mock.calls).toEqual([[[authStub.admin.user.id], { day: 15, month: 1 }]]); + }); + + it('should get memories with partners with inTimeline enabled', async () => { + partnerMock.getAll.mockResolvedValue([partnerStub.user1ToAdmin1]); + + await sut.getMemoryLane(authStub.admin, { day: 15, month: 1 }); + + expect(assetMock.getByDayOfYear.mock.calls).toEqual([ + [[authStub.admin.user.id, userStub.user1.id], { day: 15, month: 1 }], + ]); }); }); diff --git a/server/src/domain/asset/asset.service.ts b/server/src/domain/asset/asset.service.ts index 857f1648f..e54eb8439 100644 --- a/server/src/domain/asset/asset.service.ts +++ b/server/src/domain/asset/asset.service.ts @@ -172,7 +172,16 @@ export class AssetService { async getMemoryLane(auth: AuthDto, dto: MemoryLaneDto): Promise { const currentYear = new Date().getFullYear(); - const assets = await this.assetRepository.getByDayOfYear(auth.user.id, dto); + + // get partners id + const userIds: string[] = [auth.user.id]; + const partners = await this.partnerRepository.getAll(auth.user.id); + const partnersIds = partners + .filter((partner) => partner.sharedBy && partner.inTimeline) + .map((partner) => partner.sharedById); + userIds.push(...partnersIds); + + const assets = await this.assetRepository.getByDayOfYear(userIds, dto); return _.chain(assets) .filter((asset) => asset.localDateTime.getFullYear() < currentYear) diff --git a/server/src/domain/repositories/asset.repository.ts b/server/src/domain/repositories/asset.repository.ts index 8b14ce597..c4ddb3107 100644 --- a/server/src/domain/repositories/asset.repository.ts +++ b/server/src/domain/repositories/asset.repository.ts @@ -123,7 +123,7 @@ export interface IAssetRepository { select?: FindOptionsSelect, ): Promise; getByIdsWithAllRelations(ids: string[]): Promise; - getByDayOfYear(ownerId: string, monthDay: MonthDay): Promise; + getByDayOfYear(ownerIds: string[], monthDay: MonthDay): Promise; getByChecksum(userId: string, checksum: Buffer): Promise; getByAlbumId(pagination: PaginationOptions, albumId: string): Paginated; getByUserId(pagination: PaginationOptions, userId: string, options?: AssetSearchOptions): Paginated; diff --git a/server/src/infra/repositories/asset.repository.ts b/server/src/infra/repositories/asset.repository.ts index 871a44460..09cf2c779 100644 --- a/server/src/infra/repositories/asset.repository.ts +++ b/server/src/infra/repositories/asset.repository.ts @@ -109,18 +109,18 @@ export class AssetRepository implements IAssetRepository { } @GenerateSql({ params: [DummyValue.UUID, { day: 1, month: 1 }] }) - getByDayOfYear(ownerId: string, { day, month }: MonthDay): Promise { + getByDayOfYear(ownerIds: string[], { day, month }: MonthDay): Promise { return this.repository .createQueryBuilder('entity') .where( - `entity.ownerId = :ownerId + `entity.ownerId IN (:...ownerIds) AND entity.isVisible = true AND entity.isArchived = false AND entity.resizePath IS NOT NULL AND EXTRACT(DAY FROM entity.localDateTime AT TIME ZONE 'UTC') = :day AND EXTRACT(MONTH FROM entity.localDateTime AT TIME ZONE 'UTC') = :month`, { - ownerId, + ownerIds, day, month, }, diff --git a/server/src/infra/sql/asset.repository.sql b/server/src/infra/sql/asset.repository.sql index 39f46e0d0..e230a7346 100644 --- a/server/src/infra/sql/asset.repository.sql +++ b/server/src/infra/sql/asset.repository.sql @@ -76,89 +76,6 @@ WHERE ORDER BY "AssetEntity"."fileCreatedAt" DESC --- AssetRepository.getByDayOfYear -SELECT - "entity"."id" AS "entity_id", - "entity"."deviceAssetId" AS "entity_deviceAssetId", - "entity"."ownerId" AS "entity_ownerId", - "entity"."libraryId" AS "entity_libraryId", - "entity"."deviceId" AS "entity_deviceId", - "entity"."type" AS "entity_type", - "entity"."originalPath" AS "entity_originalPath", - "entity"."resizePath" AS "entity_resizePath", - "entity"."webpPath" AS "entity_webpPath", - "entity"."thumbhash" AS "entity_thumbhash", - "entity"."encodedVideoPath" AS "entity_encodedVideoPath", - "entity"."createdAt" AS "entity_createdAt", - "entity"."updatedAt" AS "entity_updatedAt", - "entity"."deletedAt" AS "entity_deletedAt", - "entity"."fileCreatedAt" AS "entity_fileCreatedAt", - "entity"."localDateTime" AS "entity_localDateTime", - "entity"."fileModifiedAt" AS "entity_fileModifiedAt", - "entity"."isFavorite" AS "entity_isFavorite", - "entity"."isArchived" AS "entity_isArchived", - "entity"."isExternal" AS "entity_isExternal", - "entity"."isReadOnly" AS "entity_isReadOnly", - "entity"."isOffline" AS "entity_isOffline", - "entity"."checksum" AS "entity_checksum", - "entity"."duration" AS "entity_duration", - "entity"."isVisible" AS "entity_isVisible", - "entity"."livePhotoVideoId" AS "entity_livePhotoVideoId", - "entity"."originalFileName" AS "entity_originalFileName", - "entity"."sidecarPath" AS "entity_sidecarPath", - "entity"."stackId" AS "entity_stackId", - "exifInfo"."assetId" AS "exifInfo_assetId", - "exifInfo"."description" AS "exifInfo_description", - "exifInfo"."exifImageWidth" AS "exifInfo_exifImageWidth", - "exifInfo"."exifImageHeight" AS "exifInfo_exifImageHeight", - "exifInfo"."fileSizeInByte" AS "exifInfo_fileSizeInByte", - "exifInfo"."orientation" AS "exifInfo_orientation", - "exifInfo"."dateTimeOriginal" AS "exifInfo_dateTimeOriginal", - "exifInfo"."modifyDate" AS "exifInfo_modifyDate", - "exifInfo"."timeZone" AS "exifInfo_timeZone", - "exifInfo"."latitude" AS "exifInfo_latitude", - "exifInfo"."longitude" AS "exifInfo_longitude", - "exifInfo"."projectionType" AS "exifInfo_projectionType", - "exifInfo"."city" AS "exifInfo_city", - "exifInfo"."livePhotoCID" AS "exifInfo_livePhotoCID", - "exifInfo"."autoStackId" AS "exifInfo_autoStackId", - "exifInfo"."state" AS "exifInfo_state", - "exifInfo"."country" AS "exifInfo_country", - "exifInfo"."make" AS "exifInfo_make", - "exifInfo"."model" AS "exifInfo_model", - "exifInfo"."lensModel" AS "exifInfo_lensModel", - "exifInfo"."fNumber" AS "exifInfo_fNumber", - "exifInfo"."focalLength" AS "exifInfo_focalLength", - "exifInfo"."iso" AS "exifInfo_iso", - "exifInfo"."exposureTime" AS "exifInfo_exposureTime", - "exifInfo"."profileDescription" AS "exifInfo_profileDescription", - "exifInfo"."colorspace" AS "exifInfo_colorspace", - "exifInfo"."bitsPerSample" AS "exifInfo_bitsPerSample", - "exifInfo"."fps" AS "exifInfo_fps" -FROM - "assets" "entity" - LEFT JOIN "exif" "exifInfo" ON "exifInfo"."assetId" = "entity"."id" -WHERE - ( - "entity"."ownerId" = $1 - AND "entity"."isVisible" = true - AND "entity"."isArchived" = false - AND "entity"."resizePath" IS NOT NULL - AND EXTRACT( - DAY - FROM - "entity"."localDateTime" AT TIME ZONE 'UTC' - ) = $2 - AND EXTRACT( - MONTH - FROM - "entity"."localDateTime" AT TIME ZONE 'UTC' - ) = $3 - ) - AND ("entity"."deletedAt" IS NULL) -ORDER BY - "entity"."localDateTime" DESC - -- AssetRepository.getByIds SELECT "AssetEntity"."id" AS "AssetEntity_id", From 40262c30cb7d43e059a3dbe0a146a5dd988ab0e6 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Mon, 18 Mar 2024 15:59:53 -0500 Subject: [PATCH 3/5] refactor(server): library service (#8050) * refactor: library service * chore: open api * fix: checks --- e2e/src/api/specs/library.e2e-spec.ts | 33 ++- mobile/openapi/doc/CreateLibraryDto.md | 2 +- .../ValidateLibraryImportPathResponseDto.md | 2 +- .../openapi/lib/model/create_library_dto.dart | 19 +- ...date_library_import_path_response_dto.dart | 3 +- open-api/immich-openapi-specs.json | 4 +- open-api/typescript-sdk/src/fetch-client.ts | 4 +- .../jobs/specs/library-watcher.e2e-spec.ts | 3 + server/e2e/jobs/specs/library.e2e-spec.ts | 11 +- server/package.json | 2 +- server/src/domain/access/access.core.ts | 29 --- server/src/domain/library/library.dto.ts | 4 +- .../domain/library/library.service.spec.ts | 245 +++++++----------- server/src/domain/library/library.service.ts | 81 ++---- .../domain/repositories/access.repository.ts | 1 - .../immich/controllers/library.controller.ts | 44 ++-- .../infra/repositories/access.repository.ts | 23 +- server/src/infra/sql/access.repository.sql | 10 - .../repositories/access.repository.mock.ts | 1 - .../forms/library-user-picker-form.svelte | 2 +- .../admin/library-management/+page.svelte | 10 +- 21 files changed, 198 insertions(+), 335 deletions(-) diff --git a/e2e/src/api/specs/library.e2e-spec.ts b/e2e/src/api/specs/library.e2e-spec.ts index d9ac1eddb..3e4f971cf 100644 --- a/e2e/src/api/specs/library.e2e-spec.ts +++ b/e2e/src/api/specs/library.e2e-spec.ts @@ -27,7 +27,7 @@ describe('/library', () => { await utils.resetDatabase(); admin = await utils.adminSetup(); user = await utils.userSetup(admin.accessToken, userDto.user1); - library = await utils.createLibrary(admin.accessToken, { type: LibraryType.External }); + library = await utils.createLibrary(admin.accessToken, { ownerId: admin.userId, type: LibraryType.External }); websocket = await utils.connectWebsocket(admin.accessToken); }); @@ -82,7 +82,7 @@ describe('/library', () => { const { status, body } = await request(app) .post('/library') .set('Authorization', `Bearer ${user.accessToken}`) - .send({ type: LibraryType.External }); + .send({ ownerId: admin.userId, type: LibraryType.External }); expect(status).toBe(403); expect(body).toEqual(errorDto.forbidden); @@ -92,7 +92,7 @@ describe('/library', () => { const { status, body } = await request(app) .post('/library') .set('Authorization', `Bearer ${admin.accessToken}`) - .send({ type: LibraryType.External }); + .send({ ownerId: admin.userId, type: LibraryType.External }); expect(status).toBe(201); expect(body).toEqual( @@ -113,6 +113,7 @@ describe('/library', () => { .post('/library') .set('Authorization', `Bearer ${admin.accessToken}`) .send({ + ownerId: admin.userId, type: LibraryType.External, name: 'My Awesome Library', importPaths: ['/path/to/import'], @@ -133,6 +134,7 @@ describe('/library', () => { .post('/library') .set('Authorization', `Bearer ${admin.accessToken}`) .send({ + ownerId: admin.userId, type: LibraryType.External, name: 'My Awesome Library', importPaths: ['/path', '/path'], @@ -148,6 +150,7 @@ describe('/library', () => { .post('/library') .set('Authorization', `Bearer ${admin.accessToken}`) .send({ + ownerId: admin.userId, type: LibraryType.External, name: 'My Awesome Library', importPaths: ['/path/to/import'], @@ -162,7 +165,7 @@ describe('/library', () => { const { status, body } = await request(app) .post('/library') .set('Authorization', `Bearer ${admin.accessToken}`) - .send({ type: LibraryType.Upload }); + .send({ ownerId: admin.userId, type: LibraryType.Upload }); expect(status).toBe(201); expect(body).toEqual( @@ -182,7 +185,7 @@ describe('/library', () => { const { status, body } = await request(app) .post('/library') .set('Authorization', `Bearer ${admin.accessToken}`) - .send({ type: LibraryType.Upload, name: 'My Awesome Library' }); + .send({ ownerId: admin.userId, type: LibraryType.Upload, name: 'My Awesome Library' }); expect(status).toBe(201); expect(body).toEqual( @@ -196,7 +199,7 @@ describe('/library', () => { const { status, body } = await request(app) .post('/library') .set('Authorization', `Bearer ${admin.accessToken}`) - .send({ type: LibraryType.Upload, importPaths: ['/path/to/import'] }); + .send({ ownerId: admin.userId, type: LibraryType.Upload, importPaths: ['/path/to/import'] }); expect(status).toBe(400); expect(body).toEqual(errorDto.badRequest('Upload libraries cannot have import paths')); @@ -206,7 +209,7 @@ describe('/library', () => { const { status, body } = await request(app) .post('/library') .set('Authorization', `Bearer ${admin.accessToken}`) - .send({ type: LibraryType.Upload, exclusionPatterns: ['**/Raw/**'] }); + .send({ ownerId: admin.userId, type: LibraryType.Upload, exclusionPatterns: ['**/Raw/**'] }); expect(status).toBe(400); expect(body).toEqual(errorDto.badRequest('Upload libraries cannot have exclusion patterns')); @@ -330,7 +333,10 @@ describe('/library', () => { }); it('should get library by id', async () => { - const library = await utils.createLibrary(admin.accessToken, { type: LibraryType.External }); + const library = await utils.createLibrary(admin.accessToken, { + ownerId: admin.userId, + type: LibraryType.External, + }); const { status, body } = await request(app) .get(`/library/${library.id}`) @@ -386,7 +392,10 @@ describe('/library', () => { }); it('should delete an external library', async () => { - const library = await utils.createLibrary(admin.accessToken, { type: LibraryType.External }); + const library = await utils.createLibrary(admin.accessToken, { + ownerId: admin.userId, + type: LibraryType.External, + }); const { status, body } = await request(app) .delete(`/library/${library.id}`) @@ -407,6 +416,7 @@ describe('/library', () => { it('should delete an external library with assets', async () => { const library = await utils.createLibrary(admin.accessToken, { + ownerId: admin.userId, type: LibraryType.External, importPaths: [`${testAssetDirInternal}/temp`], }); @@ -455,6 +465,7 @@ describe('/library', () => { it('should not scan an upload library', async () => { const library = await utils.createLibrary(admin.accessToken, { + ownerId: admin.userId, type: LibraryType.Upload, }); @@ -468,6 +479,7 @@ describe('/library', () => { it('should scan external library', async () => { const library = await utils.createLibrary(admin.accessToken, { + ownerId: admin.userId, type: LibraryType.External, importPaths: [`${testAssetDirInternal}/temp/directoryA`], }); @@ -483,6 +495,7 @@ describe('/library', () => { it('should scan external library with exclusion pattern', async () => { const library = await utils.createLibrary(admin.accessToken, { + ownerId: admin.userId, type: LibraryType.External, importPaths: [`${testAssetDirInternal}/temp`], exclusionPatterns: ['**/directoryA'], @@ -499,6 +512,7 @@ describe('/library', () => { it('should scan multiple import paths', async () => { const library = await utils.createLibrary(admin.accessToken, { + ownerId: admin.userId, type: LibraryType.External, importPaths: [`${testAssetDirInternal}/temp/directoryA`, `${testAssetDirInternal}/temp/directoryB`], }); @@ -515,6 +529,7 @@ describe('/library', () => { it('should pick up new files', async () => { const library = await utils.createLibrary(admin.accessToken, { + ownerId: admin.userId, type: LibraryType.External, importPaths: [`${testAssetDirInternal}/temp`], }); diff --git a/mobile/openapi/doc/CreateLibraryDto.md b/mobile/openapi/doc/CreateLibraryDto.md index e0caf1c8a..94e96493e 100644 --- a/mobile/openapi/doc/CreateLibraryDto.md +++ b/mobile/openapi/doc/CreateLibraryDto.md @@ -13,7 +13,7 @@ Name | Type | Description | Notes **isVisible** | **bool** | | [optional] **isWatched** | **bool** | | [optional] **name** | **String** | | [optional] -**ownerId** | **String** | | [optional] +**ownerId** | **String** | | **type** | [**LibraryType**](LibraryType.md) | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/mobile/openapi/doc/ValidateLibraryImportPathResponseDto.md b/mobile/openapi/doc/ValidateLibraryImportPathResponseDto.md index 4601d8d2f..1ebcb04ef 100644 --- a/mobile/openapi/doc/ValidateLibraryImportPathResponseDto.md +++ b/mobile/openapi/doc/ValidateLibraryImportPathResponseDto.md @@ -9,7 +9,7 @@ import 'package:openapi/api.dart'; Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **importPath** | **String** | | -**isValid** | **bool** | | [optional] [default to false] +**isValid** | **bool** | | [default to false] **message** | **String** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/mobile/openapi/lib/model/create_library_dto.dart b/mobile/openapi/lib/model/create_library_dto.dart index ef656ea2a..24cc04530 100644 --- a/mobile/openapi/lib/model/create_library_dto.dart +++ b/mobile/openapi/lib/model/create_library_dto.dart @@ -18,7 +18,7 @@ class CreateLibraryDto { this.isVisible, this.isWatched, this.name, - this.ownerId, + required this.ownerId, required this.type, }); @@ -50,13 +50,7 @@ class CreateLibraryDto { /// String? name; - /// - /// Please note: This property should have been non-nullable! Since the specification file - /// does not include a default value (using the "default:" property), however, the generated - /// source code must fall back to having a nullable type. - /// Consider adding a "default:" property in the specification file to hide this note. - /// - String? ownerId; + String ownerId; LibraryType type; @@ -78,7 +72,7 @@ class CreateLibraryDto { (isVisible == null ? 0 : isVisible!.hashCode) + (isWatched == null ? 0 : isWatched!.hashCode) + (name == null ? 0 : name!.hashCode) + - (ownerId == null ? 0 : ownerId!.hashCode) + + (ownerId.hashCode) + (type.hashCode); @override @@ -103,11 +97,7 @@ class CreateLibraryDto { } else { // json[r'name'] = null; } - if (this.ownerId != null) { json[r'ownerId'] = this.ownerId; - } else { - // json[r'ownerId'] = null; - } json[r'type'] = this.type; return json; } @@ -129,7 +119,7 @@ class CreateLibraryDto { isVisible: mapValueOfType(json, r'isVisible'), isWatched: mapValueOfType(json, r'isWatched'), name: mapValueOfType(json, r'name'), - ownerId: mapValueOfType(json, r'ownerId'), + ownerId: mapValueOfType(json, r'ownerId')!, type: LibraryType.fromJson(json[r'type'])!, ); } @@ -178,6 +168,7 @@ class CreateLibraryDto { /// The list of required keys that must be present in a JSON. static const requiredKeys = { + 'ownerId', 'type', }; } diff --git a/mobile/openapi/lib/model/validate_library_import_path_response_dto.dart b/mobile/openapi/lib/model/validate_library_import_path_response_dto.dart index 1297c824c..142055f2c 100644 --- a/mobile/openapi/lib/model/validate_library_import_path_response_dto.dart +++ b/mobile/openapi/lib/model/validate_library_import_path_response_dto.dart @@ -67,7 +67,7 @@ class ValidateLibraryImportPathResponseDto { return ValidateLibraryImportPathResponseDto( importPath: mapValueOfType(json, r'importPath')!, - isValid: mapValueOfType(json, r'isValid') ?? false, + isValid: mapValueOfType(json, r'isValid')!, message: mapValueOfType(json, r'message'), ); } @@ -117,6 +117,7 @@ class ValidateLibraryImportPathResponseDto { /// The list of required keys that must be present in a JSON. static const requiredKeys = { 'importPath', + 'isValid', }; } diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index 15ada078c..82562100a 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -7646,6 +7646,7 @@ } }, "required": [ + "ownerId", "type" ], "type": "object" @@ -10689,7 +10690,8 @@ } }, "required": [ - "importPath" + "importPath", + "isValid" ], "type": "object" }, diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index 6a660f4e1..6b5064252 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -466,7 +466,7 @@ export type CreateLibraryDto = { isVisible?: boolean; isWatched?: boolean; name?: string; - ownerId?: string; + ownerId: string; "type": LibraryType; }; export type UpdateLibraryDto = { @@ -491,7 +491,7 @@ export type ValidateLibraryDto = { }; export type ValidateLibraryImportPathResponseDto = { importPath: string; - isValid?: boolean; + isValid: boolean; message?: string; }; export type ValidateLibraryResponseDto = { diff --git a/server/e2e/jobs/specs/library-watcher.e2e-spec.ts b/server/e2e/jobs/specs/library-watcher.e2e-spec.ts index 475787689..5f05d736b 100644 --- a/server/e2e/jobs/specs/library-watcher.e2e-spec.ts +++ b/server/e2e/jobs/specs/library-watcher.e2e-spec.ts @@ -46,6 +46,7 @@ describe(`Library watcher (e2e)`, () => { describe('Single import path', () => { beforeEach(async () => { await api.libraryApi.create(server, admin.accessToken, { + ownerId: admin.userId, type: LibraryType.EXTERNAL, importPaths: [`${IMMICH_TEST_ASSET_TEMP_PATH}`], }); @@ -133,6 +134,7 @@ describe(`Library watcher (e2e)`, () => { await fs.mkdir(`${IMMICH_TEST_ASSET_TEMP_PATH}/dir3`, { recursive: true }); await api.libraryApi.create(server, admin.accessToken, { + ownerId: admin.userId, type: LibraryType.EXTERNAL, importPaths: [ `${IMMICH_TEST_ASSET_TEMP_PATH}/dir1`, @@ -190,6 +192,7 @@ describe(`Library watcher (e2e)`, () => { beforeEach(async () => { library = await api.libraryApi.create(server, admin.accessToken, { + ownerId: admin.userId, type: LibraryType.EXTERNAL, importPaths: [ `${IMMICH_TEST_ASSET_TEMP_PATH}/dir1`, diff --git a/server/e2e/jobs/specs/library.e2e-spec.ts b/server/e2e/jobs/specs/library.e2e-spec.ts index 4ebb00c4d..a4ee4977a 100644 --- a/server/e2e/jobs/specs/library.e2e-spec.ts +++ b/server/e2e/jobs/specs/library.e2e-spec.ts @@ -1,6 +1,6 @@ -import { LibraryResponseDto, LoginResponseDto } from '@app/domain'; +import { LoginResponseDto } from '@app/domain'; import { LibraryController } from '@app/immich'; -import { AssetType, LibraryType } from '@app/infra/entities'; +import { LibraryType } from '@app/infra/entities'; import { errorStub, uuidStub } from '@test/fixtures'; import * as fs from 'node:fs'; import request from 'supertest'; @@ -41,6 +41,7 @@ describe(`${LibraryController.name} (e2e)`, () => { }); const library = await api.libraryApi.create(server, admin.accessToken, { + ownerId: admin.userId, type: LibraryType.EXTERNAL, importPaths: [`${IMMICH_TEST_ASSET_TEMP_PATH}`], }); @@ -72,6 +73,7 @@ describe(`${LibraryController.name} (e2e)`, () => { it('should scan new files', async () => { const library = await api.libraryApi.create(server, admin.accessToken, { + ownerId: admin.userId, type: LibraryType.EXTERNAL, importPaths: [`${IMMICH_TEST_ASSET_TEMP_PATH}`], }); @@ -107,6 +109,7 @@ describe(`${LibraryController.name} (e2e)`, () => { describe('with refreshModifiedFiles=true', () => { it('should reimport modified files', async () => { const library = await api.libraryApi.create(server, admin.accessToken, { + ownerId: admin.userId, type: LibraryType.EXTERNAL, importPaths: [`${IMMICH_TEST_ASSET_TEMP_PATH}`], }); @@ -153,6 +156,7 @@ describe(`${LibraryController.name} (e2e)`, () => { it('should not reimport unmodified files', async () => { const library = await api.libraryApi.create(server, admin.accessToken, { + ownerId: admin.userId, type: LibraryType.EXTERNAL, importPaths: [`${IMMICH_TEST_ASSET_TEMP_PATH}`], }); @@ -192,6 +196,7 @@ describe(`${LibraryController.name} (e2e)`, () => { describe('with refreshAllFiles=true', () => { it('should reimport all files', async () => { const library = await api.libraryApi.create(server, admin.accessToken, { + ownerId: admin.userId, type: LibraryType.EXTERNAL, importPaths: [`${IMMICH_TEST_ASSET_TEMP_PATH}`], }); @@ -251,6 +256,7 @@ describe(`${LibraryController.name} (e2e)`, () => { }); const library = await api.libraryApi.create(server, admin.accessToken, { + ownerId: admin.userId, type: LibraryType.EXTERNAL, importPaths: [`${IMMICH_TEST_ASSET_TEMP_PATH}`], }); @@ -277,6 +283,7 @@ describe(`${LibraryController.name} (e2e)`, () => { it('should not remove online files', async () => { const library = await api.libraryApi.create(server, admin.accessToken, { + ownerId: admin.userId, type: LibraryType.EXTERNAL, importPaths: [`${IMMICH_TEST_ASSET_PATH}/albums/nature`], }); diff --git a/server/package.json b/server/package.json index c575571d0..d60f67a1f 100644 --- a/server/package.json +++ b/server/package.json @@ -153,7 +153,7 @@ "coverageDirectory": "./coverage", "coverageThreshold": { "./src/domain/": { - "branches": 79, + "branches": 75, "functions": 80, "lines": 90, "statements": 90 diff --git a/server/src/domain/access/access.core.ts b/server/src/domain/access/access.core.ts index 7063cb49a..40b01de1d 100644 --- a/server/src/domain/access/access.core.ts +++ b/server/src/domain/access/access.core.ts @@ -33,12 +33,6 @@ export enum Permission { TIMELINE_READ = 'timeline.read', TIMELINE_DOWNLOAD = 'timeline.download', - LIBRARY_CREATE = 'library.create', - LIBRARY_READ = 'library.read', - LIBRARY_UPDATE = 'library.update', - LIBRARY_DELETE = 'library.delete', - LIBRARY_DOWNLOAD = 'library.download', - PERSON_READ = 'person.read', PERSON_WRITE = 'person.write', PERSON_MERGE = 'person.merge', @@ -261,29 +255,6 @@ export class AccessCore { return ids.has(auth.user.id) ? new Set([auth.user.id]) : new Set(); } - case Permission.LIBRARY_READ: { - if (auth.user.isAdmin) { - return new Set(ids); - } - const isOwner = await this.repository.library.checkOwnerAccess(auth.user.id, ids); - const isPartner = await this.repository.library.checkPartnerAccess(auth.user.id, setDifference(ids, isOwner)); - return setUnion(isOwner, isPartner); - } - - case Permission.LIBRARY_UPDATE: { - if (auth.user.isAdmin) { - return new Set(ids); - } - return await this.repository.library.checkOwnerAccess(auth.user.id, ids); - } - - case Permission.LIBRARY_DELETE: { - if (auth.user.isAdmin) { - return new Set(ids); - } - return await this.repository.library.checkOwnerAccess(auth.user.id, ids); - } - case Permission.PERSON_READ: { return await this.repository.person.checkOwnerAccess(auth.user.id, ids); } diff --git a/server/src/domain/library/library.dto.ts b/server/src/domain/library/library.dto.ts index 5e4bb4ec6..fcce02f87 100644 --- a/server/src/domain/library/library.dto.ts +++ b/server/src/domain/library/library.dto.ts @@ -8,8 +8,8 @@ export class CreateLibraryDto { @ApiProperty({ enumName: 'LibraryType', enum: LibraryType }) type!: LibraryType; - @ValidateUUID({ optional: true }) - ownerId?: string; + @ValidateUUID() + ownerId!: string; @IsString() @Optional() diff --git a/server/src/domain/library/library.service.spec.ts b/server/src/domain/library/library.service.spec.ts index 57bdf7373..3b5258b97 100644 --- a/server/src/domain/library/library.service.spec.ts +++ b/server/src/domain/library/library.service.spec.ts @@ -706,7 +706,7 @@ describe(LibraryService.name, () => { libraryMock.getUploadLibraryCount.mockResolvedValue(2); libraryMock.get.mockResolvedValue(libraryStub.externalLibrary1); - await sut.delete(authStub.admin, libraryStub.externalLibrary1.id); + await sut.delete(libraryStub.externalLibrary1.id); expect(jobMock.queue).toHaveBeenCalledWith({ name: JobName.LIBRARY_DELETE, @@ -721,9 +721,7 @@ describe(LibraryService.name, () => { libraryMock.getUploadLibraryCount.mockResolvedValue(1); libraryMock.get.mockResolvedValue(libraryStub.uploadLibrary1); - await expect(sut.delete(authStub.admin, libraryStub.uploadLibrary1.id)).rejects.toBeInstanceOf( - BadRequestException, - ); + await expect(sut.delete(libraryStub.uploadLibrary1.id)).rejects.toBeInstanceOf(BadRequestException); expect(jobMock.queue).not.toHaveBeenCalled(); expect(jobMock.queueAll).not.toHaveBeenCalled(); @@ -735,7 +733,7 @@ describe(LibraryService.name, () => { libraryMock.getUploadLibraryCount.mockResolvedValue(1); libraryMock.get.mockResolvedValue(libraryStub.externalLibrary1); - await sut.delete(authStub.admin, libraryStub.externalLibrary1.id); + await sut.delete(libraryStub.externalLibrary1.id); expect(jobMock.queue).toHaveBeenCalledWith({ name: JobName.LIBRARY_DELETE, @@ -757,26 +755,16 @@ describe(LibraryService.name, () => { storageMock.watch.mockImplementation(makeMockWatcher({ close: mockClose })); await sut.init(); - await sut.delete(authStub.admin, libraryStub.externalLibraryWithImportPaths1.id); + await sut.delete(libraryStub.externalLibraryWithImportPaths1.id); expect(mockClose).toHaveBeenCalled(); }); }); - describe('getCount', () => { - it('should call the repository', async () => { - libraryMock.getCountForUser.mockResolvedValue(17); - - await expect(sut.getCount(authStub.admin)).resolves.toBe(17); - - expect(libraryMock.getCountForUser).toHaveBeenCalledWith(authStub.admin.user.id); - }); - }); - describe('get', () => { it('should return a library', async () => { libraryMock.get.mockResolvedValue(libraryStub.uploadLibrary1); - await expect(sut.get(authStub.admin, libraryStub.uploadLibrary1.id)).resolves.toEqual( + await expect(sut.get(libraryStub.uploadLibrary1.id)).resolves.toEqual( expect.objectContaining({ id: libraryStub.uploadLibrary1.id, name: libraryStub.uploadLibrary1.name, @@ -789,15 +777,16 @@ describe(LibraryService.name, () => { it('should throw an error when a library is not found', async () => { libraryMock.get.mockResolvedValue(null); - await expect(sut.get(authStub.admin, libraryStub.uploadLibrary1.id)).rejects.toBeInstanceOf(BadRequestException); + await expect(sut.get(libraryStub.uploadLibrary1.id)).rejects.toBeInstanceOf(BadRequestException); expect(libraryMock.get).toHaveBeenCalledWith(libraryStub.uploadLibrary1.id); }); }); describe('getStatistics', () => { it('should return library statistics', async () => { + libraryMock.get.mockResolvedValue(libraryStub.uploadLibrary1); libraryMock.getStatistics.mockResolvedValue({ photos: 10, videos: 0, total: 10, usage: 1337 }); - await expect(sut.getStatistics(authStub.admin, libraryStub.uploadLibrary1.id)).resolves.toEqual({ + await expect(sut.getStatistics(libraryStub.uploadLibrary1.id)).resolves.toEqual({ photos: 10, videos: 0, total: 10, @@ -812,11 +801,7 @@ describe(LibraryService.name, () => { describe('external library', () => { it('should create with default settings', async () => { libraryMock.create.mockResolvedValue(libraryStub.externalLibrary1); - await expect( - sut.create(authStub.admin, { - type: LibraryType.EXTERNAL, - }), - ).resolves.toEqual( + await expect(sut.create({ ownerId: authStub.admin.user.id, type: LibraryType.EXTERNAL })).resolves.toEqual( expect.objectContaining({ id: libraryStub.externalLibrary1.id, type: LibraryType.EXTERNAL, @@ -845,10 +830,7 @@ describe(LibraryService.name, () => { it('should create with name', async () => { libraryMock.create.mockResolvedValue(libraryStub.externalLibrary1); await expect( - sut.create(authStub.admin, { - type: LibraryType.EXTERNAL, - name: 'My Awesome Library', - }), + sut.create({ ownerId: authStub.admin.user.id, type: LibraryType.EXTERNAL, name: 'My Awesome Library' }), ).resolves.toEqual( expect.objectContaining({ id: libraryStub.externalLibrary1.id, @@ -878,10 +860,7 @@ describe(LibraryService.name, () => { it('should create invisible', async () => { libraryMock.create.mockResolvedValue(libraryStub.externalLibrary1); await expect( - sut.create(authStub.admin, { - type: LibraryType.EXTERNAL, - isVisible: false, - }), + sut.create({ ownerId: authStub.admin.user.id, type: LibraryType.EXTERNAL, isVisible: false }), ).resolves.toEqual( expect.objectContaining({ id: libraryStub.externalLibrary1.id, @@ -911,7 +890,8 @@ describe(LibraryService.name, () => { it('should create with import paths', async () => { libraryMock.create.mockResolvedValue(libraryStub.externalLibrary1); await expect( - sut.create(authStub.admin, { + sut.create({ + ownerId: authStub.admin.user.id, type: LibraryType.EXTERNAL, importPaths: ['/data/images', '/data/videos'], }), @@ -948,7 +928,8 @@ describe(LibraryService.name, () => { libraryMock.getAll.mockResolvedValue([]); await sut.init(); - await sut.create(authStub.admin, { + await sut.create({ + ownerId: authStub.admin.user.id, type: LibraryType.EXTERNAL, importPaths: libraryStub.externalLibraryWithImportPaths1.importPaths, }); @@ -963,7 +944,8 @@ describe(LibraryService.name, () => { it('should create with exclusion patterns', async () => { libraryMock.create.mockResolvedValue(libraryStub.externalLibrary1); await expect( - sut.create(authStub.admin, { + sut.create({ + ownerId: authStub.admin.user.id, type: LibraryType.EXTERNAL, exclusionPatterns: ['*.tmp', '*.bak'], }), @@ -997,11 +979,7 @@ describe(LibraryService.name, () => { describe('upload library', () => { it('should create with default settings', async () => { libraryMock.create.mockResolvedValue(libraryStub.uploadLibrary1); - await expect( - sut.create(authStub.admin, { - type: LibraryType.UPLOAD, - }), - ).resolves.toEqual( + await expect(sut.create({ ownerId: authStub.admin.user.id, type: LibraryType.UPLOAD })).resolves.toEqual( expect.objectContaining({ id: libraryStub.uploadLibrary1.id, type: LibraryType.UPLOAD, @@ -1030,10 +1008,7 @@ describe(LibraryService.name, () => { it('should create with name', async () => { libraryMock.create.mockResolvedValue(libraryStub.uploadLibrary1); await expect( - sut.create(authStub.admin, { - type: LibraryType.UPLOAD, - name: 'My Awesome Library', - }), + sut.create({ ownerId: authStub.admin.user.id, type: LibraryType.UPLOAD, name: 'My Awesome Library' }), ).resolves.toEqual( expect.objectContaining({ id: libraryStub.uploadLibrary1.id, @@ -1062,7 +1037,8 @@ describe(LibraryService.name, () => { it('should not create with import paths', async () => { await expect( - sut.create(authStub.admin, { + sut.create({ + ownerId: authStub.admin.user.id, type: LibraryType.UPLOAD, importPaths: ['/data/images', '/data/videos'], }), @@ -1073,7 +1049,8 @@ describe(LibraryService.name, () => { it('should not create with exclusion patterns', async () => { await expect( - sut.create(authStub.admin, { + sut.create({ + ownerId: authStub.admin.user.id, type: LibraryType.UPLOAD, exclusionPatterns: ['*.tmp', '*.bak'], }), @@ -1084,10 +1061,7 @@ describe(LibraryService.name, () => { it('should not create watched', async () => { await expect( - sut.create(authStub.admin, { - type: LibraryType.UPLOAD, - isWatched: true, - }), + sut.create({ ownerId: authStub.admin.user.id, type: LibraryType.UPLOAD, isWatched: true }), ).rejects.toBeInstanceOf(BadRequestException); expect(storageMock.watch).not.toHaveBeenCalled(); @@ -1117,14 +1091,9 @@ describe(LibraryService.name, () => { it('should update library', async () => { libraryMock.update.mockResolvedValue(libraryStub.uploadLibrary1); - await expect(sut.update(authStub.admin, authStub.admin.user.id, {})).resolves.toEqual( - mapLibrary(libraryStub.uploadLibrary1), - ); - expect(libraryMock.update).toHaveBeenCalledWith( - expect.objectContaining({ - id: authStub.admin.user.id, - }), - ); + libraryMock.get.mockResolvedValue(libraryStub.uploadLibrary1); + await expect(sut.update('library-id', {})).resolves.toEqual(mapLibrary(libraryStub.uploadLibrary1)); + expect(libraryMock.update).toHaveBeenCalledWith(expect.objectContaining({ id: 'library-id' })); }); it('should re-watch library when updating import paths', async () => { @@ -1137,15 +1106,11 @@ describe(LibraryService.name, () => { storageMock.checkFileExists.mockResolvedValue(true); - await expect( - sut.update(authStub.admin, authStub.admin.user.id, { importPaths: ['/data/user1/foo'] }), - ).resolves.toEqual(mapLibrary(libraryStub.externalLibraryWithImportPaths1)); - - expect(libraryMock.update).toHaveBeenCalledWith( - expect.objectContaining({ - id: authStub.admin.user.id, - }), + await expect(sut.update('library-id', { importPaths: ['/data/user1/foo'] })).resolves.toEqual( + mapLibrary(libraryStub.externalLibraryWithImportPaths1), ); + + expect(libraryMock.update).toHaveBeenCalledWith(expect.objectContaining({ id: 'library-id' })); expect(storageMock.watch).toHaveBeenCalledWith( libraryStub.externalLibraryWithImportPaths1.importPaths, expect.anything(), @@ -1158,15 +1123,11 @@ describe(LibraryService.name, () => { configMock.load.mockResolvedValue(systemConfigStub.libraryWatchEnabled); libraryMock.get.mockResolvedValue(libraryStub.externalLibraryWithImportPaths1); - await expect(sut.update(authStub.admin, authStub.admin.user.id, { exclusionPatterns: ['bar'] })).resolves.toEqual( + await expect(sut.update('library-id', { exclusionPatterns: ['bar'] })).resolves.toEqual( mapLibrary(libraryStub.externalLibraryWithImportPaths1), ); - expect(libraryMock.update).toHaveBeenCalledWith( - expect.objectContaining({ - id: authStub.admin.user.id, - }), - ); + expect(libraryMock.update).toHaveBeenCalledWith(expect.objectContaining({ id: 'library-id' })); expect(storageMock.watch).toHaveBeenCalledWith( expect.arrayContaining([expect.any(String)]), expect.anything(), @@ -1411,7 +1372,7 @@ describe(LibraryService.name, () => { it('should queue a library scan of external library', async () => { libraryMock.get.mockResolvedValue(libraryStub.externalLibrary1); - await sut.queueScan(authStub.admin, libraryStub.externalLibrary1.id, {}); + await sut.queueScan(libraryStub.externalLibrary1.id, {}); expect(jobMock.queue.mock.calls).toEqual([ [ @@ -1430,9 +1391,7 @@ describe(LibraryService.name, () => { it('should not queue a library scan of upload library', async () => { libraryMock.get.mockResolvedValue(libraryStub.uploadLibrary1); - await expect(sut.queueScan(authStub.admin, libraryStub.uploadLibrary1.id, {})).rejects.toBeInstanceOf( - BadRequestException, - ); + await expect(sut.queueScan(libraryStub.uploadLibrary1.id, {})).rejects.toBeInstanceOf(BadRequestException); expect(jobMock.queue).not.toBeCalled(); }); @@ -1440,7 +1399,7 @@ describe(LibraryService.name, () => { it('should queue a library scan of all modified assets', async () => { libraryMock.get.mockResolvedValue(libraryStub.externalLibrary1); - await sut.queueScan(authStub.admin, libraryStub.externalLibrary1.id, { refreshModifiedFiles: true }); + await sut.queueScan(libraryStub.externalLibrary1.id, { refreshModifiedFiles: true }); expect(jobMock.queue.mock.calls).toEqual([ [ @@ -1459,7 +1418,7 @@ describe(LibraryService.name, () => { it('should queue a forced library scan', async () => { libraryMock.get.mockResolvedValue(libraryStub.externalLibrary1); - await sut.queueScan(authStub.admin, libraryStub.externalLibrary1.id, { refreshAllFiles: true }); + await sut.queueScan(libraryStub.externalLibrary1.id, { refreshAllFiles: true }); expect(jobMock.queue.mock.calls).toEqual([ [ @@ -1478,7 +1437,7 @@ describe(LibraryService.name, () => { describe('queueEmptyTrash', () => { it('should queue the trash job', async () => { - await sut.queueRemoveOffline(authStub.admin, libraryStub.externalLibrary1.id); + await sut.queueRemoveOffline(libraryStub.externalLibrary1.id); expect(jobMock.queue.mock.calls).toEqual([ [ @@ -1566,17 +1525,15 @@ describe(LibraryService.name, () => { storageMock.checkFileExists.mockResolvedValue(true); - const result = await sut.validate(authStub.external1, libraryStub.externalLibraryWithImportPaths1.id, { - importPaths: ['/data/user1/'], + await expect(sut.validate('library-id', { importPaths: ['/data/user1/'] })).resolves.toEqual({ + importPaths: [ + { + importPath: '/data/user1/', + isValid: true, + message: undefined, + }, + ], }); - - expect(result.importPaths).toEqual([ - { - importPath: '/data/user1/', - isValid: true, - message: undefined, - }, - ]); }); it('should detect when path does not exist', async () => { @@ -1585,17 +1542,15 @@ describe(LibraryService.name, () => { throw error; }); - const result = await sut.validate(authStub.external1, libraryStub.externalLibraryWithImportPaths1.id, { - importPaths: ['/data/user1/'], + await expect(sut.validate('library-id', { importPaths: ['/data/user1/'] })).resolves.toEqual({ + importPaths: [ + { + importPath: '/data/user1/', + isValid: false, + message: 'Path does not exist (ENOENT)', + }, + ], }); - - expect(result.importPaths).toEqual([ - { - importPath: '/data/user1/', - isValid: false, - message: 'Path does not exist (ENOENT)', - }, - ]); }); it('should detect when path is not a directory', async () => { @@ -1603,17 +1558,15 @@ describe(LibraryService.name, () => { isDirectory: () => false, } as Stats); - const result = await sut.validate(authStub.external1, libraryStub.externalLibraryWithImportPaths1.id, { - importPaths: ['/data/user1/file'], + await expect(sut.validate('library-id', { importPaths: ['/data/user1/file'] })).resolves.toEqual({ + importPaths: [ + { + importPath: '/data/user1/file', + isValid: false, + message: 'Not a directory', + }, + ], }); - - expect(result.importPaths).toEqual([ - { - importPath: '/data/user1/file', - isValid: false, - message: 'Not a directory', - }, - ]); }); it('should return an unknown exception from stat', async () => { @@ -1621,17 +1574,15 @@ describe(LibraryService.name, () => { throw new Error('Unknown error'); }); - const result = await sut.validate(authStub.external1, libraryStub.externalLibraryWithImportPaths1.id, { - importPaths: ['/data/user1/'], + await expect(sut.validate('library-id', { importPaths: ['/data/user1/'] })).resolves.toEqual({ + importPaths: [ + { + importPath: '/data/user1/', + isValid: false, + message: 'Error: Unknown error', + }, + ], }); - - expect(result.importPaths).toEqual([ - { - importPath: '/data/user1/', - isValid: false, - message: 'Error: Unknown error', - }, - ]); }); it('should detect when access rights are missing', async () => { @@ -1641,17 +1592,15 @@ describe(LibraryService.name, () => { storageMock.checkFileExists.mockResolvedValue(false); - const result = await sut.validate(authStub.external1, libraryStub.externalLibraryWithImportPaths1.id, { - importPaths: ['/data/user1/'], + await expect(sut.validate('library-id', { importPaths: ['/data/user1/'] })).resolves.toEqual({ + importPaths: [ + { + importPath: '/data/user1/', + isValid: false, + message: 'Lacking read permission for folder', + }, + ], }); - - expect(result.importPaths).toEqual([ - { - importPath: '/data/user1/', - isValid: false, - message: 'Lacking read permission for folder', - }, - ]); }); it('should detect when import path is in immich media folder', async () => { @@ -1659,26 +1608,26 @@ describe(LibraryService.name, () => { const validImport = libraryStub.hasImmichPaths.importPaths[1]; when(storageMock.checkFileExists).calledWith(validImport, R_OK).mockResolvedValue(true); - const result = await sut.validate(authStub.external1, libraryStub.hasImmichPaths.id, { - importPaths: libraryStub.hasImmichPaths.importPaths, + await expect( + sut.validate('library-id', { importPaths: libraryStub.hasImmichPaths.importPaths }), + ).resolves.toEqual({ + importPaths: [ + { + importPath: libraryStub.hasImmichPaths.importPaths[0], + isValid: false, + message: 'Cannot use media upload folder for external libraries', + }, + { + importPath: validImport, + isValid: true, + }, + { + importPath: libraryStub.hasImmichPaths.importPaths[2], + isValid: false, + message: 'Cannot use media upload folder for external libraries', + }, + ], }); - - expect(result.importPaths).toEqual([ - { - importPath: libraryStub.hasImmichPaths.importPaths[0], - isValid: false, - message: 'Cannot use media upload folder for external libraries', - }, - { - importPath: validImport, - isValid: true, - }, - { - importPath: libraryStub.hasImmichPaths.importPaths[2], - isValid: false, - message: 'Cannot use media upload folder for external libraries', - }, - ]); }); }); }); diff --git a/server/src/domain/library/library.service.ts b/server/src/domain/library/library.service.ts index 12d135fa3..000acac29 100644 --- a/server/src/domain/library/library.service.ts +++ b/server/src/domain/library/library.service.ts @@ -8,8 +8,7 @@ import { EventEmitter } from 'node:events'; import { Stats } from 'node:fs'; import path, { basename, parse } from 'node:path'; import picomatch from 'picomatch'; -import { AccessCore, Permission } from '../access'; -import { AuthDto } from '../auth'; +import { AccessCore } from '../access'; import { mimeTypes } from '../domain.constant'; import { handlePromiseError, usePagination, validateCronExpression } from '../domain.util'; import { IBaseJob, IEntityJob, ILibraryFileJob, ILibraryRefreshJob, JOBS_ASSET_PAGINATION_SIZE, JobName } from '../job'; @@ -226,24 +225,17 @@ export class LibraryService extends EventEmitter { } } - async getStatistics(auth: AuthDto, id: string): Promise { - await this.access.requirePermission(auth, Permission.LIBRARY_READ, id); - + async getStatistics(id: string): Promise { + await this.findOrFail(id); return this.repository.getStatistics(id); } - async getCount(auth: AuthDto): Promise { - return this.repository.getCountForUser(auth.user.id); - } - - async get(auth: AuthDto, id: string): Promise { - await this.access.requirePermission(auth, Permission.LIBRARY_READ, id); - + async get(id: string): Promise { const library = await this.findOrFail(id); return mapLibrary(library); } - async getAll(auth: AuthDto, dto: SearchLibraryDto): Promise { + async getAll(dto: SearchLibraryDto): Promise { const libraries = await this.repository.getAll(false, dto.type); return libraries.map((library) => mapLibrary(library)); } @@ -257,7 +249,7 @@ export class LibraryService extends EventEmitter { return JobStatus.SUCCESS; } - async create(auth: AuthDto, dto: CreateLibraryDto): Promise { + async create(dto: CreateLibraryDto): Promise { switch (dto.type) { case LibraryType.EXTERNAL: { if (!dto.name) { @@ -282,14 +274,8 @@ export class LibraryService extends EventEmitter { } } - let ownerId = auth.user.id; - - if (dto.ownerId) { - ownerId = dto.ownerId; - } - const library = await this.repository.create({ - ownerId, + ownerId: dto.ownerId, name: dto.name, type: dto.type, importPaths: dto.importPaths ?? [], @@ -297,7 +283,7 @@ export class LibraryService extends EventEmitter { isVisible: dto.isVisible ?? true, }); - this.logger.log(`Creating ${dto.type} library for user ${auth.user.name}`); + this.logger.log(`Creating ${dto.type} library for ${dto.ownerId}}`); if (dto.type === LibraryType.EXTERNAL) { await this.watch(library.id); @@ -364,29 +350,19 @@ export class LibraryService extends EventEmitter { return validation; } - public async validate(auth: AuthDto, id: string, dto: ValidateLibraryDto): Promise { - await this.access.requirePermission(auth, Permission.LIBRARY_UPDATE, id); - - const response = new ValidateLibraryResponseDto(); - - if (dto.importPaths) { - response.importPaths = await Promise.all( - dto.importPaths.map(async (importPath) => { - return await this.validateImportPath(importPath); - }), - ); - } - - return response; + async validate(id: string, dto: ValidateLibraryDto): Promise { + const importPaths = await Promise.all( + (dto.importPaths || []).map((importPath) => this.validateImportPath(importPath)), + ); + return { importPaths }; } - async update(auth: AuthDto, id: string, dto: UpdateLibraryDto): Promise { - await this.access.requirePermission(auth, Permission.LIBRARY_UPDATE, id); - + async update(id: string, dto: UpdateLibraryDto): Promise { + await this.findOrFail(id); const library = await this.repository.update({ id, ...dto }); if (dto.importPaths) { - const validation = await this.validate(auth, id, { importPaths: dto.importPaths }); + const validation = await this.validate(id, { importPaths: dto.importPaths }); if (validation.importPaths) { for (const path of validation.importPaths) { if (!path.isValid) { @@ -404,11 +380,9 @@ export class LibraryService extends EventEmitter { return mapLibrary(library); } - async delete(auth: AuthDto, id: string) { - await this.access.requirePermission(auth, Permission.LIBRARY_DELETE, id); - + async delete(id: string) { const library = await this.findOrFail(id); - const uploadCount = await this.repository.getUploadLibraryCount(auth.user.id); + const uploadCount = await this.repository.getUploadLibraryCount(library.ownerId); if (library.type === LibraryType.UPLOAD && uploadCount <= 1) { throw new BadRequestException('Cannot delete the last upload library'); } @@ -565,11 +539,9 @@ export class LibraryService extends EventEmitter { return JobStatus.SUCCESS; } - async queueScan(auth: AuthDto, id: string, dto: ScanLibraryDto) { - await this.access.requirePermission(auth, Permission.LIBRARY_UPDATE, id); - - const library = await this.repository.get(id); - if (!library || library.type !== LibraryType.EXTERNAL) { + async queueScan(id: string, dto: ScanLibraryDto) { + const library = await this.findOrFail(id); + if (library.type !== LibraryType.EXTERNAL) { throw new BadRequestException('Can only refresh external libraries'); } @@ -583,16 +555,9 @@ export class LibraryService extends EventEmitter { }); } - async queueRemoveOffline(auth: AuthDto, id: string) { + async queueRemoveOffline(id: string) { this.logger.verbose(`Removing offline files from library: ${id}`); - await this.access.requirePermission(auth, Permission.LIBRARY_UPDATE, id); - - await this.jobRepository.queue({ - name: JobName.LIBRARY_REMOVE_OFFLINE, - data: { - id, - }, - }); + await this.jobRepository.queue({ name: JobName.LIBRARY_REMOVE_OFFLINE, data: { id } }); } async handleQueueAllScan(job: IBaseJob): Promise { diff --git a/server/src/domain/repositories/access.repository.ts b/server/src/domain/repositories/access.repository.ts index 6aa70a212..7924a29dd 100644 --- a/server/src/domain/repositories/access.repository.ts +++ b/server/src/domain/repositories/access.repository.ts @@ -26,7 +26,6 @@ export interface IAccessRepository { library: { checkOwnerAccess(userId: string, libraryIds: Set): Promise>; - checkPartnerAccess(userId: string, partnerIds: Set): Promise>; }; timeline: { diff --git a/server/src/immich/controllers/library.controller.ts b/server/src/immich/controllers/library.controller.ts index 801dc173d..2b509645c 100644 --- a/server/src/immich/controllers/library.controller.ts +++ b/server/src/immich/controllers/library.controller.ts @@ -1,5 +1,4 @@ import { - AuthDto, CreateLibraryDto as CreateDto, LibraryService, LibraryStatsResponseDto, @@ -12,7 +11,7 @@ import { } from '@app/domain'; import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Post, Put, Query } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { AdminRoute, Auth, Authenticated } from '../app.guard'; +import { AdminRoute, Authenticated } from '../app.guard'; import { UUIDParamDto } from './dto/uuid-param.dto'; @ApiTags('Library') @@ -23,55 +22,52 @@ export class LibraryController { constructor(private service: LibraryService) {} @Get() - getAllLibraries(@Auth() auth: AuthDto, @Query() dto: SearchLibraryDto): Promise { - return this.service.getAll(auth, dto); + getAllLibraries(@Query() dto: SearchLibraryDto): Promise { + return this.service.getAll(dto); } @Post() - createLibrary(@Auth() auth: AuthDto, @Body() dto: CreateDto): Promise { - return this.service.create(auth, dto); + createLibrary(@Body() dto: CreateDto): Promise { + return this.service.create(dto); } @Put(':id') - updateLibrary(@Auth() auth: AuthDto, @Param() { id }: UUIDParamDto, @Body() dto: UpdateDto): Promise { - return this.service.update(auth, id, dto); + updateLibrary(@Param() { id }: UUIDParamDto, @Body() dto: UpdateDto): Promise { + return this.service.update(id, dto); } @Get(':id') - getLibrary(@Auth() auth: AuthDto, @Param() { id }: UUIDParamDto): Promise { - return this.service.get(auth, id); + getLibrary(@Param() { id }: UUIDParamDto): Promise { + return this.service.get(id); } @Post(':id/validate') @HttpCode(200) - validate( - @Auth() auth: AuthDto, - @Param() { id }: UUIDParamDto, - @Body() dto: ValidateLibraryDto, - ): Promise { - return this.service.validate(auth, id, dto); + // TODO: change endpoint to validate current settings instead + validate(@Param() { id }: UUIDParamDto, @Body() dto: ValidateLibraryDto): Promise { + return this.service.validate(id, dto); } @Delete(':id') @HttpCode(HttpStatus.NO_CONTENT) - deleteLibrary(@Auth() auth: AuthDto, @Param() { id }: UUIDParamDto): Promise { - return this.service.delete(auth, id); + deleteLibrary(@Param() { id }: UUIDParamDto): Promise { + return this.service.delete(id); } @Get(':id/statistics') - getLibraryStatistics(@Auth() auth: AuthDto, @Param() { id }: UUIDParamDto): Promise { - return this.service.getStatistics(auth, id); + getLibraryStatistics(@Param() { id }: UUIDParamDto): Promise { + return this.service.getStatistics(id); } @Post(':id/scan') @HttpCode(HttpStatus.NO_CONTENT) - scanLibrary(@Auth() auth: AuthDto, @Param() { id }: UUIDParamDto, @Body() dto: ScanLibraryDto) { - return this.service.queueScan(auth, id, dto); + scanLibrary(@Param() { id }: UUIDParamDto, @Body() dto: ScanLibraryDto) { + return this.service.queueScan(id, dto); } @Post(':id/removeOffline') @HttpCode(HttpStatus.NO_CONTENT) - removeOfflineFiles(@Auth() auth: AuthDto, @Param() { id }: UUIDParamDto) { - return this.service.queueRemoveOffline(auth, id); + removeOfflineFiles(@Param() { id }: UUIDParamDto) { + return this.service.queueRemoveOffline(id); } } diff --git a/server/src/infra/repositories/access.repository.ts b/server/src/infra/repositories/access.repository.ts index 25691846d..ad650bf0e 100644 --- a/server/src/infra/repositories/access.repository.ts +++ b/server/src/infra/repositories/access.repository.ts @@ -307,10 +307,7 @@ class AuthDeviceAccess implements IAuthDeviceAccess { } class LibraryAccess implements ILibraryAccess { - constructor( - private libraryRepository: Repository, - private partnerRepository: Repository, - ) {} + constructor(private libraryRepository: Repository) {} @GenerateSql({ params: [DummyValue.UUID, DummyValue.UUID_SET] }) @ChunkedSet({ paramIndex: 1 }) @@ -329,22 +326,6 @@ class LibraryAccess implements ILibraryAccess { }) .then((libraries) => new Set(libraries.map((library) => library.id))); } - - @GenerateSql({ params: [DummyValue.UUID, DummyValue.UUID_SET] }) - @ChunkedSet({ paramIndex: 1 }) - async checkPartnerAccess(userId: string, partnerIds: Set): Promise> { - if (partnerIds.size === 0) { - return new Set(); - } - - return this.partnerRepository - .createQueryBuilder('partner') - .select('partner.sharedById') - .where('partner.sharedById IN (:...partnerIds)', { partnerIds: [...partnerIds] }) - .andWhere('partner.sharedWithId = :userId', { userId }) - .getMany() - .then((partners) => new Set(partners.map((partner) => partner.sharedById))); - } } class TimelineAccess implements ITimelineAccess { @@ -457,7 +438,7 @@ export class AccessRepository implements IAccessRepository { this.album = new AlbumAccess(albumRepository, sharedLinkRepository); this.asset = new AssetAccess(albumRepository, assetRepository, partnerRepository, sharedLinkRepository); this.authDevice = new AuthDeviceAccess(tokenRepository); - this.library = new LibraryAccess(libraryRepository, partnerRepository); + this.library = new LibraryAccess(libraryRepository); this.person = new PersonAccess(assetFaceRepository, personRepository); this.partner = new PartnerAccess(partnerRepository); this.timeline = new TimelineAccess(partnerRepository); diff --git a/server/src/infra/sql/access.repository.sql b/server/src/infra/sql/access.repository.sql index 638be9f90..a0c4e1927 100644 --- a/server/src/infra/sql/access.repository.sql +++ b/server/src/infra/sql/access.repository.sql @@ -196,16 +196,6 @@ WHERE ) AND ("LibraryEntity"."deletedAt" IS NULL) --- AccessRepository.library.checkPartnerAccess -SELECT - "partner"."sharedById" AS "partner_sharedById", - "partner"."sharedWithId" AS "partner_sharedWithId" -FROM - "partners" "partner" -WHERE - "partner"."sharedById" IN ($1) - AND "partner"."sharedWithId" = $2 - -- AccessRepository.person.checkOwnerAccess SELECT "PersonEntity"."id" AS "PersonEntity_id" diff --git a/server/test/repositories/access.repository.mock.ts b/server/test/repositories/access.repository.mock.ts index a1f09aa75..e10dd7d9a 100644 --- a/server/test/repositories/access.repository.mock.ts +++ b/server/test/repositories/access.repository.mock.ts @@ -42,7 +42,6 @@ export const newAccessRepositoryMock = (reset = true): IAccessRepositoryMock => library: { checkOwnerAccess: jest.fn().mockResolvedValue(new Set()), - checkPartnerAccess: jest.fn().mockResolvedValue(new Set()), }, timeline: { diff --git a/web/src/lib/components/forms/library-user-picker-form.svelte b/web/src/lib/components/forms/library-user-picker-form.svelte index cc1d31b88..294cf7076 100644 --- a/web/src/lib/components/forms/library-user-picker-form.svelte +++ b/web/src/lib/components/forms/library-user-picker-form.svelte @@ -20,7 +20,7 @@ const dispatch = createEventDispatcher<{ cancel: void; - submit: { ownerId: string | null }; + submit: { ownerId: string }; delete: void; }>(); diff --git a/web/src/routes/admin/library-management/+page.svelte b/web/src/routes/admin/library-management/+page.svelte index e6f4332ee..1efc7f778 100644 --- a/web/src/routes/admin/library-management/+page.svelte +++ b/web/src/routes/admin/library-management/+page.svelte @@ -28,7 +28,6 @@ removeOfflineFiles, scanLibrary, updateLibrary, - type CreateLibraryDto, type LibraryResponseDto, type LibraryStatsResponseDto, type UserResponseDto, @@ -117,14 +116,9 @@ } } - const handleCreate = async (ownerId: string | null) => { + const handleCreate = async (ownerId: string) => { try { - let createLibraryDto: CreateLibraryDto = { type: LibraryType.External }; - if (ownerId) { - createLibraryDto = { ...createLibraryDto, ownerId }; - } - - const createdLibrary = await createLibrary({ createLibraryDto }); + const createdLibrary = await createLibrary({ createLibraryDto: { ownerId, type: LibraryType.External } }); notificationController.show({ message: `Created library: ${createdLibrary.name}`, From 1a2554548a2ed44d619f0804773ee9b38d22f941 Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Mon, 18 Mar 2024 22:54:30 +0100 Subject: [PATCH 4/5] chore: Simplify install script (#8048) * chore: Simplify install script The default .env file now contains a set UPLOAD_LOCATION already * fix: Remove leftover line --- install.sh | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/install.sh b/install.sh index fc894ce21..232ee1597 100755 --- a/install.sh +++ b/install.sh @@ -6,7 +6,7 @@ ip_address=$(hostname -I | awk '{print $1}') create_immich_directory() { echo "Creating Immich directory..." - mkdir -p ./immich-app/immich-data + mkdir -p ./immich-app cd ./immich-app || exit } @@ -20,21 +20,6 @@ download_dot_env_file() { curl -L https://github.com/immich-app/immich/releases/latest/download/example.env -o ./.env >/dev/null 2>&1 } -replace_env_value() { - KERNEL="$(uname -s | tr '[:upper:]' '[:lower:]')" - if [ "$KERNEL" = "darwin" ]; then - sed -i '' "s|$1=.*|$1=$2|" ./.env - else - sed -i "s|$1=.*|$1=$2|" ./.env - fi -} - -populate_upload_location() { - echo "Populating default UPLOAD_LOCATION value..." - upload_location=$(pwd)/immich-data - replace_env_value "UPLOAD_LOCATION" "$upload_location" -} - start_docker_compose() { echo "Starting Immich's docker containers" @@ -59,7 +44,6 @@ start_docker_compose() { show_friendly_message() { echo "Successfully deployed Immich!" echo "You can access the website at http://$ip_address:2283 and the server URL for the mobile app is http://$ip_address:2283/api" - echo "The library location is $upload_location" echo "---------------------------------------------------" echo "If you want to configure custom information of the server, including the database, Redis information, or the backup (or upload) location, etc. @@ -75,5 +59,4 @@ show_friendly_message() { create_immich_directory download_docker_compose_file download_dot_env_file -populate_upload_location start_docker_compose From 4aae1da8418e0475f4f3d8eb8cb20fd48d34d27e Mon Sep 17 00:00:00 2001 From: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> Date: Mon, 18 Mar 2024 22:56:39 +0100 Subject: [PATCH 5/5] fix(web): repair page typo (#8051) fix typo --- web/src/routes/admin/repair/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/routes/admin/repair/+page.svelte b/web/src/routes/admin/repair/+page.svelte index fa0f66ec3..abe12d8dc 100644 --- a/web/src/routes/admin/repair/+page.svelte +++ b/web/src/routes/admin/repair/+page.svelte @@ -286,7 +286,7 @@