From 36ad42beb2b12da05f3334709956ed9b3ac17b3f Mon Sep 17 00:00:00 2001 From: xinwen <coderWen@126.com> Date: Fri, 16 Jul 2021 14:15:10 +0800 Subject: [PATCH 1/5] =?UTF-8?q?fix:=20xrdp=20=E8=AE=BE=E7=BD=AE=E5=88=86?= =?UTF-8?q?=E8=BE=A8=E7=8E=87=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/authentication/api/connection_token.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/authentication/api/connection_token.py b/apps/authentication/api/connection_token.py index a160eea92..0f70d59ab 100644 --- a/apps/authentication/api/connection_token.py +++ b/apps/authentication/api/connection_token.py @@ -97,10 +97,10 @@ class UserConnectionTokenViewSet(RootOrgViewMixin, SerializerMixin, GenericViewS options = { 'full address:s': '', 'username:s': '', - 'screen mode id:i': '0', + 'screen mode id:i': '1', # 'desktopwidth:i': '1280', # 'desktopheight:i': '800', - 'use multimon:i': '1', + 'use multimon:i': '0', 'session bpp:i': '32', 'audiomode:i': '0', 'disable wallpaper:i': '0', From 1da187c37346fcbe85e4a515263a0f13f660eb5c Mon Sep 17 00:00:00 2001 From: wojiushixiaobai <296015668@qq.com> Date: Fri, 16 Jul 2021 13:07:20 +0800 Subject: [PATCH 2/5] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=20MFA=20?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/locale/zh/LC_MESSAGES/django.mo | Bin 75919 -> 75923 bytes apps/locale/zh/LC_MESSAGES/django.po | 10 +++++----- apps/users/templates/users/_base_otp.html | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index af23010136102c977ce6e0bf552c10b65942e0f9..87aa477f507b51daecd64407f7b7f9496dfe5df2 100644 GIT binary patch delta 21908 zcmZA82b@h;+xPJ^Gsfsfol$2P#^?s4M~|LpQ6h*EEqaf7qW2P`M~U9+kRe*sL`Z@l zB6=qTqegvy|FbU7>vQkVvwYWet+Ll%d+&1&xt}S=6U81+v~i-JH@U~-iS6w1q`-yd zT1-d09TVfPm<mr~5MH(XKbVp@0YlK!#my6nNeOeK`WMDvEQ#r{1}4K6T|8c2r6Y;7 zBzmJJ9F2K#y5)CccjDvLUa70c6F^)Sqp%_7!NI77FU3IIhD~rcMq|cqZvGmWhPZJz zuUlzHOZ39zG>k;8bgJc-p{^j_{24P6|7Gz5OhN3&Ds>^LQ2ldYYAlMGu(IWwqvr4G zrJ@1DF$>PX9Jt9k{DC^rE!2c>QCAq;!;Q;@YA=a8!N->Gh`Pc-sQ!~sw`dUt<91Yk z?=Mue@@tp@A7W|@>gn!X2x_Ham=%j-Dy)w>aVylq`=k2BVlb{m&9@yj-|rS*L@nrv zi@lzty<8#;6VXr%L$MTUg8G;lJD^T5+}dYZ`$o$jLf!MfF$rGAlz0bqOP^ydOw`+5 zKweD7^XDl=r63JeP)}`7)Q${7UCCI~TQCPT;dj=)9yQ?()Cn%3#^1#>_!RvyNgp>p zIqIoTi`uztn1u6tic`@EKd^>c7(v_`V{jA}!yQ-#@1u4kUthOlAEHiN3w7d8un4wC zEqoU0#0yXtunIF^JbE?oS1Q{2KT#ddp&phys1y13a}#AVbD`er{Fn`kp?0D^YFt0d zPsa4bYf<y;wfG$Bd=LAv|60IP5?ZOJzndTkbtPeDv{}V$gz0GSfN60MX28j)d%qMl z?>aNy+-n{|^*hy{{nyr9u*7XtoM662EhNcT9#3h^jCv+MK`po)>I0|?YDZ?ECZ3P# zw;VM--r~ckoj8kn{hoNKXyvH~xE1F{-$y3uwJB*<$HK%-Fa*b7CR~Vm9k-*l`e)R* z^QgDs9%`YFP`CC4>RC%N(4EJdfr_p;8){&bHI%}f#1$>y7Ih`PQ70UQx&_m%eWke# zb>%;!cH%G81zkbisynE+<ux)N_kWP<kOehy1Zsk!mal@L#I;cazd&6<4{INSz6Du4 z9d+;Lq53UHy*+WLow$iv@Lx=-_dnTSx0UJ5La19(1GO_Pu?=>z_M@mPyMdbUK5FNl zqP95k5O*umqZX3aEQaC4AE3s!#N>MaJ5bS9_Qs4j2K9O@KwZHS)PRi^Z%3Wz5bDGy zQ9E!AwctmX8Q)l(X{cLBF4TO5P~*#@R}<HyqI=W;HDNQ<g1)qPDC$ZlqfRsf^W#!1 zfX7e^evO*XpQ}<oU0o^6jG3?@YG=Em7C6Go{_DgGNcirR8HbwaN7O<Nqqg$Ac@uS| z4^iKiudo(o|Jse~gj!H9)WZ9to}HoQc+~tezh+=lDho+yOP*s^OgxP5YK%a|?Xe<` zKn*;AdcA(dy!Z!d=U$^um~yy11E_~NFY4_ngL;_jpf0?fmx?CrYWBmN#L8>J#i-Y2 zGwP{5h>>_1!!XGR_sb><bxWF|c5F0i++5TG)}iLxjk-0zncnkM)bTEAMQ^PkXrx<l zMpQlub!A0R3odE-ik7c|*~r($aO`UFWK{pPs9U_%;(f?`Ue6IKI>8B-@SL>{mr?iZ z4(7n8s0l(xxhu(yy3!b|j5V<_PQ>MS6?fqH(XM~BG47T$M$OY1ec%6IQPGu+z#t7k zZP7H;2^OKYa4YJeJA`^xj$;sBL_OU%QLnGxSa-ru)V+>Ef2@SMpsJ{cxgMtE`SUcR zqR;M*s1pytL^#p>26e)jsE2W><@cf{I%M%N)Co?ZuJAI3<G+{$Q;&1=hoai^pjS_2 zaVmjW4fT-JL7lKUs^gca1@=c>$wYGs>I$c!POt_w-xk#PLzoj!n$Pe9;>_dS!`pN` z_g`E56$#yfi5QKsxEc?l9;zM_+*VIUEp(>E^DJJ9g~_kRx_B0gV7`g&mVAcEiF=_I zIuy0jV<xiyzO5zU+gjAyu-7`CG|!tiQ1|>k=EY~IaXBWrXQMo7zM80=Y=Ziv>wrmd zI3~l1s0GdPQqfA5U~$}R9d4plnt=K7rRDQXcE1gaVgUKZm>rv;wt9d$4|Re)sGU86 zDe(mAA-#mU5brZ8`e1pBy7DYj+(d;i6>)t`fvr#jx}t7DUvm&@p~Fxo9FMxCGf^j8 zjk@A(7Vk$b;5c$#ujdvO4NNrEoiG?9iNjC>tDzQFAGL*FpibD$;{K?9!%+Puq87Xm z^)Rlr_TA=T)B;ap2<P|QqM|MGeB%}ng!;hAh}z;(s1uh%owyq6-q%Ie?iql(fTYvh z#2HW*kQbG&hiS1n=Em-ppMlBr{x71E2G^RqF*Wfq4982TEAoqV3rU5#HKC}5=P?VR zP8fsw{HTQbx~+z~WzEetsAr}ldi8pZp`!PAnYkPFzW<4u;4Y>`|LN{o$$)B)M%~M5 z7Pl~ap)OzyYUgI57PJV}e>tYdUDMhBqEt?h(AEada1E(YaRlnh3!o+_jp|<>3t&%- z#s#R?@EGb@xQ7w=9JP?FGu`+CsGW#L&0BIN`>z32NtD96s0qiSw)O|q`@0u)CFd-@ zfq97iX1NpOMSU`sM!hBF&^Iq?p1PKAjOy1CwSd-MD%#p^s4W?WdKPA)R=yI|aU1Fi z52AMB3YNs1s1t<Eb|;QRjVpwD7RqBftc6-oOVrMGLf`w}%Mt_45vUVRL|yqD)WWu4 zMm&r<;U(0BH?2JZHF3}!_udDiPMjS>u&7xJBZ=E!u-^Z1uHu<%9oAqt9rmN1@@rTa zAE9<8Vy-g=b*0r&A7D)|6ZS@3*(Bryo*CwHRR4I)g+F1S-v7J43LmwoD|n9j<nsI0 z?LcbOEy`!{2bhJpDQcoV7>aXH3)qYW@hIw+y};raGSAIZ2le^#IVRHkKa7gDd^Bq1 zv8aW7i(1H1)V<t{dI)!;cH(DL|Ffw6S5UX;AIysW^IiWiRC`{Fi=u8_IrRFrkcwWb zCa8(WV-(KAFg%DE@H%QCFR>5?EpWG}1ZrU)qVH+9xG}1KD-6dj=({zj*Ko!H_Fn_O zwT8v01*}HpccNClAN4F8MNRlO`W`;ii4#!cUZEb=R14ks2s0mQd^Cn*Mbs^7z0m7c zGKEAmi5aMlKcTkrG#0>nsD)(y&fSs-%tjoIzAH8xqZZTxwZIOjXQvnHibtVd-wCLP zbE=n$CRl`e23DdLuoX4Y0n`=$hPqW}QTaQl1wFR-HEMj&BG;ZC_3UJ~xBzPFOIW@< zYP`1&6}_j8P$%ewTEGB{$D$TE+gxb*<)|I_9;@O>%z~K~y9LCc7El4T10SIl&<eFP z9g*{RJ-w-9CNUg!3+AI9w%<_;x{g}V6V!?mEpb<x5;b9FR6Zwai}Pb7Mx(a6Df(^+ zYKJ<Y`uD-)djE$|(fc_Lb)~y~4LtRzg&jw|-*-{>EO4p&{?CXdh%2J5s6T4_aMXgw zVIrK3+JX6~_Km3ac*UIGbBKzr<X6;*PFegfCL(@{+KHEzPrl4;Z93G%IZz8Nj=Ivi zs1to^wn9Ba9Z+vaZ`1<DqF485mUUQW4VzG}(~qc$PoS>+9_m?nW9?~|yDQIS7Dg?& z3~H+@ptiaWYGI8m{@mI-E@%I>b$v+$;@7Av8jV`m9Ml9WP!HQi)DHcI`h>fQT416T z&M;KJGN=VN#Te{_IdLKC%J-obczgx>udTg6A`1V-92m0FeZQB+g2b&cA5Os*_=6d` ziph!lVHjRQeJ$&6FU_G8R>m2qXXOkQ#?)*0=NGKtrScV(LD&u-V?J!Q*8L4;6h;z% zkGit+m<wN`t}J|=>(?0b6OX}<Fb?&#>$l#WI1|<<u7~`eXEA@M-CKWy`_}4&`otT7 z+S0iggj+Es?m}(p5!5qq4)riSuzcV~_snF(?Bt_R{i~zKH^mg#9+P8lWPbhyh>9MX zF_;u5;xL?vPcU>7zxgrMW_RM=n45SE_QG{o3B%*ut!jfa^vZpUWm+2VfUeTI70 zreiw2|8uG6p<0jHlAlmJaS^rRr<fW8wz`$4LoGNA)t(D=h0&M+D_|;YgqrUQ493Cc zB-Dj2z~*}YS5nbd2Y&CiFePe>!cadb@?&EB(5!>HMGa9~-3|5dO+r08>o6S8pce2S zCc`xGZl0{D3yMJBfB!2+MGL54R!6O{F1E%`F$3;EUHNfT|I_9L)Cq2&cH$xGVSbBx zDBEpw7xWEkXXc}JZtXVqUmrBvNrd1L)Kh*Hi=p3kH*pMVM=D}ktb^Lp&ruWhKrPsd zI^j5rw_+&q9#sD`sPVTk3BKCS{_DhnKRB~t3~>x<YdfPJmhq?+Peonne5`;gQ4`%l z^?QiARnJgc{06mCsdl&v$cS2KPV9^Yyi{^gnT=Z6F4RQFP*;2!wV*3l1VeYahqETC ze=F1l^hVv93Fup>IUmcDUyWMWZ7husuqb--?Q)-ZEs!_O<HZP!-tBCJg^35CPPhuw z<4(+t$59hLLv3~R9`_%qYGG#LQK)C<JJh)Eu@D|XcE;;@VGaI2x+@65tbP>KXLjkm zZbzD<wyq6o;x4FrItI1XvoRg6L_HHbF$W$&?aV#Y&L*HP<T(cG{ZGD+uSP#ki1%^i zesb97AX|xFA95e5lYY{2`SFQg;AcPcn)&lBi35l)|H5~_@<+Ihcmek?e%?|3WsJD_ zZ~R?=ILYt6&mvF2aTcNpw^7jwkD%`PG1NnK4%6Uu)D}K7Q=V||djzVz3aWo2%!e(p zD2~HyxDzAsENbWc{&1fUS<$NjA5c-pj#vUmBNye_g>i~cx~(pA$~}CwQSW&hvj^%{ z3`M;iQ!GCh^)Rk9x0?IR-%qij>Tu2yx6P-hr#0ZTn;;n~4naKw*)1Q1dgx*-{@B_- zL-lWGb}@US&Nt8;bDI56OJX_+O}ql5a1&<0v)BwDSbOb1-NcPB5BcWiNOP^VpTv)8 z{~L>8zBBH`EioN&XVm$;UMhNe$61Ft=5p&0XYnrc7xPc^n)%RtgL?Xt|K;Y*jJm*l z7Jq=cu#Ze{TPoQ}3@~S-2E<#3Ur-O(C5scxBxl`3*)a?4#VxL9wl@b``!tK!V<`O( zAQ$fSoTs9Da?gB$x_3c;yDLbAT5)!Zi(6b3vyg9QaX-{fPBiD4Yps2!dBVJfzVH7x zRCL0$=iJINnMF}MQ`_P%F$?hsix-;PP~(rI?&%rSLatbxfH{a?Sw8!Dcfo})O7DMJ zOMGGWG>4)lo?!7bb0KPBYb`#4z7wPG#27$(g0(+211`7=2u96Y0KMA!VpL>B%#0sl ze(Z=jaXJ>lc+`7-12w@j)VMch@{4X^p{VwfsP^)xhqAWW%-TC$<o>H;59`<;_3({E zJtVWN<3`jK#iOot2ZrE5%#P<#<6fb@WKv&p<8z@d=mU$JqR!V7wXm-)dEJDgNa!J( zf?DY^bBnp(Jc0V;yKLUK{A<+0Qe1XsG{en&W^vR4%A;=8hhD2RGTWJb%~4p9jx$gT zJdK**F6yKE5$eR*uef{^>dFeE`j@k~0cwXnH+z}hQB*X+Y}CYytznh96HAc)9d%0* zUv-9|uAmg^L^UjKiJGUI*%vkcVAR4!TRzssUe8=A`qEfo4Vy8Nc)RQ1xn$l$o$v+f zN|If36J|5>nI+AtsD;$GxT)C=wV+<UcJBXRYZzfp^)>Jt4|T;$Q3G~a`%f01wD<z* zME_WvV7|rb<WpRC?Vq3){uye%ZkU?$d%mKgtr@EX&ae*4um$l3)Ki@DhMOn~H9=ui z|I(=OHBl#MjES)ms$UP(TQbn%IjC_<(5owqqoR9w6cghW)P%Rqr)I!Smk&mrD4SWt z@>Njt)w8&h+0PtdPDPz({!M%Tmy*zHwFb4a?bh+Ibv$kHdCWok9W%u(H&G!o2DR{V zm<Ma37TVJsiCW++)B-l%V*fQDo`gJL4aZRnIb-=-<`dKZw)=IQ8cWl!7;1c1)WieL zVU{0j&M+5aW%_OKS|S0p(zmGJ`DyRCxC$z6jM||ws1wXU?ZiCPLU&vKH`F|*%v-1{ zeu-LO`hVQ`9H`hEWr-LJBT>#8nqyMpPM8aOV*#9vTF^n%=fYEr#DaI-Z^KVeC+v)R zrbeO`G}l~b{)l{=dOd$o(TVP33jEJZe9y({P*)so=0Wu@WN|6f2`Zqzo*STcrW>l? zRMfn4EnZ=6!o-~4v%^>6ABD`rr~$`NSAO1N|9@RRHEPSVqV9bGtdH$+9&W=8*yz67 ziNFWW?5KH5qAsYaV!i*hEz#6Ee2&_}E~qOTW%=3WGSmc{F&l12eLnn&`c_OpEil<b z*Do{b#5ph-7P7cB`u_dD8Wjy_jGDN;*%dXg4{AZfP+L0J+LxMZQ2jQWdr;5PQB?oC zmVb&mPe6h*U4p&;5hQ|X$cLJ!ENWm4>(~JOiQAa%P!Cr}48)<B6-Qz!T!e*jqj?D% z5C=bUJKEOl_lW)16^|nkg;Q}cZbzM<`D54K%N$^SZH~c8^qY*e@fhlv$@;{ds1oXe zK0%$QwZ$FHzFsQ2XTvQq7j@+;Py;rZ+sr+fkNhFjXZk}-g27MSmS(~<#Cb72mPO4| z54Dgc<`<^7Cl#%Ds3n$QTH=kU*J!`xucIEa1Ps8G&)h#wrNMCG{Fo8zU~+7WI$?Lz ze1kC)PC;GZD$JnwKh8QFMm=Qb%qNyl_1q1}Vdh6&Q4H$J%b`y6A?id8P!Cx<%l9>h zTl*AiU+l|s|2JEQJ*a2ksKrlE6Z-$>7LWmT!Z6ecqs$o8t*C5qYt*=I77sHgqaN~a z&9%zw{oh4J1Aal>+w-U^Nb<tHub~)99DyaU98SUB$QF76Ub;`dOjv|C1~tCD<@;eV z;%OEiLXEqE-Yis}TSNL+ZeS7AL={mTd!qV{L0$P0)GgR(##??j>fRnfUC=4Z-$M0& zV)<8Q>et+Vb<FwN4TwRlyoTA-@*PoIJP5TDbImwwKWgzs)B>NIfp6T2)1r1Z6Y6|b zQNItGykY;fVlRnwI1UxhH&>XOPy=?DSFs>*^0)5oDUBM}60>7R)QQHRu6(Y!2(`eK z=2kBi-P3&-iT|MngnRsa6XZb+D1(`>I_g%mM(xxPYoBD!HCLeK*<$W6_gVX4)B?Sy zt#TVR;VbKq!q1&J6Y3d=L`_%@^J5i@yPN$`3msyPH)mP<Qq&Huv3RS~>)A;~1NU3Q zG1Nl-G;g9-`pnvs`MZhIpgwT2pcYmXHBV`?8fsia)O_txJJ-+RX&9>S|HV|)aR=%X z?>E#$4^a2=wZ&Nj+(dcNcOuk;)ld&*8`MGuS^IEvia8I}f0e}t(f8l~PFUhE^9E|m zA6c9<kvnllGZMAX5~zMnQ4eo7)I&NPwbiRpukjYtg0G`?A_28f|3E+Y_y43+l*ou0 zn9a;%Mw?|(6MTr8un}rp8`LLTC)7?3M9nh^)o&K+lXI!%*I7P3(9i4J;schriUsKS z0CQrt#O{O@QNLX3VIlksb!*0>PP7WOkT~-P%kM?KHAgIe9d!YBEq;~Q>jnk{xs@hE zO%#HfIJ@Pe%oww>Sr>H+nxn3~7i!!n)I3vAJ1`T=;u6#|aM9Xdda3CB_fO(FmPSof z4fTojDQcpT);<As!r7KzZ*E1Mcqi(Fhfq88hs6n~dETPtPn^{CtC`6vk!CT}7F9Is zp-$M!+WT341g0b(i~7D_6x*p}7O!s7aqDpowWPbKB|Wt`AeqajL_M}4sHNpMi=z6M zM!i?nup@qM@z1DvFPs0M`aem=)1-;~`PX|rZb?xMX;CK%L;ch#hMKskwf8iKniI^~ zsQH#zycYFqb31DM9&0~iUQEu@q?O$up*?(n+7bO{1mCv>YQoa!+hf#3^~_GF@xxIs z_(ZIL>rof-FKYZti~Uo&I5nz0qnC<)oJCk7k98<+mPNe}l`U?LiHO^xo{EmBg$+VY zIKlF>Q43vT`2(nh9!D+cZ_9hHP|*bU&9|tIsZ+TLGojie%@UZExEg8!ZOwk>IMn!g z=5o{tH=-68Zys=ZJ;yC^!TiU3jv5%4+MO^3YT~@8d@;+HL0xGRi+f-Q@g&p<mtkhy zjQYs?6{GM1hUwcRDA-+L9@K!6W>r+j`lye#ffmn4-RncB5AR!87lYII`Tp~DD=baC z0`(qVM)iA!WiTwQpYMOU*bK99eorhFO}GK|&>hDn_!fs_lXQN*|GCRq)Pho{cN3RF z-I|XrZizZk9}LHNsCjpxzEv)wb}Bf7d#m!IS0BzFQ<;WCQ1>)AqcZ|EpoGPBQMaHC zYNxuO7BIlt$C>jizro@?sE7E3<?o`#zskt_uS(Jom&j;Fpzd)I)Co&scdUd5aT9)w z{X^ZeaR{>!U&Ybrm&wml1IMCn#c}k#&YAr@b%;x2QyiU{_g|m#7fI-ZS+ck*&x!iW zSPbefXSK}cs0DXJ?bINPC!@xHYw=>#z2AWP06U2KaKD4PMM?SZrTSKh_EOOmeq=Vm zfyAv*6P`mowO6hEG3qze8;dh!bN#|lw;~etdX_L7q8{EJs9PC}8ow5GUhjS?x}smr zv*u0IC*foBEowo@vio_eU>ejtZG_5qM@`tz{2Ddyc+^hK!tuBoOJPiyuifkEMnx+h zgqmmqYQQwqcfc}>w_|JKqo@-V3U`)5jjwDrFx#LO&<l0%y%w)S?ZgkhnD_4wDw^OD zYT^f|1-w9YOqs*aQw}3h4_RB(#KX+VsBzz-c4issLT;lz+8<c^W7N1e)}A~k{q+8) zRRuF)7Ys+8coJ$M%TWWjTYLz0MSqz=5w3rX`7!EY>wsFoXw(A7qvn~8`lpXY=+%ku zQPBs)W6X`YbGZ+W+PH+cE9xUOO>Xzp7C=4KHBdX(6}8YIs1K;Am=CvG{u&k|eujGL z^GCY=)gyWT^_nyzp@BV63z~yk>30^dLq0P+TQGwBkv#6o?xU{k5o!Ui&EP0EJ_5DC zBB*{9Q46SrI#2s3ubZeV2`!{2>bKDt<b1xPpH;r{=Y3^Azj)U`>tk~7j={9)wl$?3 zp}vQHuW8ro_zH^>CnKN7#<Z5Y|KC!I+oT2XG@af*hS9Mni7Ym7FnwaIzh0@r<X=** zTD!(hWscwI^Nsb(Mcj;fD1Ew6uVa0^8>|w7XXr4T@~15z#;nhT-83sldiqr+?@zz} z)b-qS!S1*a-yLkM=eUhOM{=Om)n0;r-%_r*>*v*?(T@QSDJN})+0=(n-*1y%u?eDy z(@-Bt8A_i6#LKZ4@hQwpyu|vRvay=-7jnGOo@$h%#2biP>HqJs9hDI_V37@YKqnoo z$;VmS_ry2JPo_^i^%j;dWvc&5+Pcsu8@Z}VaMYx1qztjSJKEgy=yS$PvbrVIIh^<w z4ZCg9*~B^3U<W^nJXa`zl;+k)O&#brk+{x#b2Xv<#Ksk*zKK3MR?&|a$+MAI&!6u| zOmetQcoMJBc!5sCXdQzaaIj6_MzC1=@q^j-YW61i(i+N<`;fAfqN54@{$lJe)az2t zk#DGmcjv!Ohn7S)eK~$M)8Q(m2ZQ#~rlXbVBKPMgNKC)4D5WVn?$Iy!y}p;3qbu<d z+P|RwBYpJg=MJtv#e1D2sIQ}prSo*kT?VWnZunlGZ^^GD-iYsxg7nkz4`mr`HHhm| zW)Xi)`GCG<@n6dOM_JwfQe>Vns59jOC6w~1^@=fPlk**k9BY{{shu<!cT#?*X)FB( zxh|e-<h~}JM_iTug{XgE^AsaqN8a1dCMiI}Ba%ajCs7s?uOj~6;|_^Ln#jiWq+W#b zJ$)0iIQ|{abDQ|xQJH?Vi0jc_0k=@1-!<y~zajXDWCqH+<1U?3P<k@>D*4sab^J|S z9nazfa%E{dM!8JcPEN<S)W^E2=QDB}=vTzr?o%&7eKLJ?bPVAB|3mT;r76h)ls~A? zr_8ZVrKk_0{*;oL!Ve)&AXnOyiN2%$J2s$nqhzE#HRhlU-~=ylI7P=r+H~*}&@+bm zbu6m;uOAgZ5o{#cm-rO1ekAIvcpv##)VHCIr?kJci4=FC{7UX~`n4s08+Ej&)FuD! zcy43-Sok{f{0j2~kn_F&J*f1f+#=bD5gjRgD77egDStAc1MT6|YhYE1j+vA{DP<Vf zgW@}A8%kw?#bLyYsn1}JA8{aliGR>%lFt7ViBTkSQ*?ak@N7dbgIm(BV=rYNC7zuA z(!yV6JXxvl#N_lzPklJ~p2R;<e|KCXeoRS0pN4pYa-GH`lvsWK*P(L|!7jXH1OK6O z7#;QZH65#ob^PY=w4iOQ_1%wAwEu<qurZ~Y^_xUL{+{VcLvB1JD@DgNJWaln?th3) zRE5M@s~5x(#7pTMX@fdb?`!SF$#E+^-H6vxjw&YMPtgw;9XZKm!IZQIk>{_I|98}& zc9ht6|JTy7wl$8#T*Ufquj7oJP=6^2BHx)(($~VbBYn3~HrZH9`?zdDBdpCFedtpL z2Qa=0Zq+&TJ9Qcj<?SS$%&!=<m~uV#b<HgGH&OeL?m8;c;~69L`?d<@9Qhu~V=MAk zsq4s0yp+DhC{w9V#}|}SlnSw(YGv^*q4&?U=!fkb{D@MRTzg!JyU2e<?{`NZ@=GbD zDaR;H>9d7K{jR(~8A9J5t$zS*`^j~n=x<vGD6=WQFs>7A9Q<b#f>#VkLV|y2`@iER z`9j2ZD66Q~P#xRY<aLR^BR)iYg;9Q%57DgT8xx<z2G|{2kmoP<zJEg4ZfE&e5B?Z} z=9I2<8c*l3SQ^Wb8$^9C<**GHiH(?KH0^QJr%^`Jo<L5=CCU%Py(r()Ckf@<k)PaV zN=b^2-i-NGuXZ}h7&X`=u9=%f<stbtHsA>HbINhz26z#dy*n}W<;*jKypHPBf5!T> zAH#*jI>uT5x6~sk-n0Bsn4;q{jcc(lC7SwZ%0U~bHT1Un2<j7Q`<n8U^8PWCKIJIY zHGrcnR`k{W{~yPx-k?uc-TzE<*kzs7WhV9WG!~|uu`v@+f7R1bmG)Vb`P7f#?<}Aw zb^gK5bAT~FP|B140()a7Y=JsHad__IYx+0T{hwlu4M<d^j3iD?hlSL2%*2U!!s4H( zH=)mHe9h!7DLPJ&OGZgWeGBTSW^HY$?<4oK&7rop)IZmgnwQE#63ytmmHKJw#i=Ku zZGug7%_h=79TDU&;!a9g#`s%%8|sVHful0@iS)~lgI&t^A1SQrnM$7PcSj{U-k_Sm zMBQoF@joY2ua7Br$uFS%poAUG8C#5c1mhZ0dQo(gBEQMzDNlTlc>8<vey;OBu|zxH z5cfw-CP+-@zX{_}#~eyL`HPfg<X#ZxWb8kb+t%lxoml-dP(Gj>RKQWs&NG)jr>*}} zUH^I-Q_(nz@*fSmiTB_XjpESXsNWr%=`(~09+Q|x{Q~_K+hhx{5^cjM#i-YNHwgF8 zSI2Ym{qR5fbfo@=?!SlNBqcZXuPODda~g6}C@bmmH~v7;(cRirUqt;dWB#J8B=ukL z38lRCt)TfiN>IME`as&=-S>BTQqdSlr?>A-K7)=siNCRdIjHxij3X{h-y1lc(w};i zosg>Mk^bOVPv4uA1Q&Wf#06IOV_Z3Z*0GL(9c=Ijk~+R&P#?-eijL*vf3-eKsF$#M zcI)2`SI}<&`6a#)d?VXfg^4L4v{kmYn)LsX@+trD;)$}3H8CfhKEdRa@95l&a*SLy zIzOQ3NKaYgtMMI-lWBkd@TXrbN-+6dlzY}b`MplJXpbOX<h8~pBvNzI%_MW9jzP5j zMtvS;!C{myDWAD!&wR%GPP~`)H<Y%N+T;@9ZR@k0`Z)UN2*fbjKce2AdLVUgGycdy zCmpXGo})G(7I)CDV=g6;)mQs6Y&q>!$TcB;hUq9TnJd=jQ@8!p&s%?ymH05_Q^wv8 z;AieWDj68~8U9CyHPqi7g{U8=b7sotw4W#bmBu&Jt5N?O%UJ)q)OGwtX-xUv^7+U= zBu*RKqG5=4Ju`KqOdwkUw@~g|Pda(>5O<}_Be$A9JE*5q1IG#C0DeGzMlL_~cgJDs zXUWZF%o|D&@n+%=F$n*p+@*6Jy>`8*%%EX8j;BG#9E_uEr9O`G9ql@%Qks*$<%{@s zp?<;I9&w`i)Mr_oi$4F7dv_EipN3#ACXj!@*z5sSxeAhbNH!uFL-~XH19Io-(2{b8 zxCG@8^^~;Vdp9HIBDdQw)~{AZZ!M~`C_mG64X&cOJto5g=wWC^N+sI=rRb<fe2|h( z?Hq5Ze?l2WIY*ym<PP~-`1-~v<N|2Zk<a1#Gn9X@<$vwKPhG-SHd!M&e?uHh$xHoz zkKOctL_Vpt<zw6q>r{mL$K<!s=P_0y-;P{=<taMW)3yhn6Auk&=*xLlko=UQBR{1x zjZxS}363~x>r4I<o9Ga^kEpMp{AY`qgstPUH6D^7ZgJ<9nc`wbB@KxUo|iavpN{Rq zd$jJ|yMOmyUxasWA6H`D;=s6sMU}G$wQk$Cd*5z-;)?xv#4k4Os2s7c_jZl^q+pd^ z?OONg)V*85s;&F9D-&L{NYUtmMM@TojtP%0Ri;Sk{6$I?DH7LVU!!z!`%fhajeB(O zSjNP+cE?^HwJd&5BEQ(c_;$(s8fHy=Ys>N*W8>rFBmLI;Wu80o`i9XrzZ-Ua{lpt% Zr{3K0&Gq$jZ^TZzwrk$3)=_?i{vSPRs`mf@ delta 21901 zcmZA82bfLQyT|b}!)U_{qnBYAMvdNyPSogKBoZ}x4-yBX8+G&=UGx$?!ssn}4bgjv z5?xI0_jlIo|9I|x?($jhyUJdB?Y+-A<bR`2#vOk$?%F6nZ+wr(6W!6{3B*~L7?+yA zVshdbjE8422rr|?J+%Bkn1uKprp5%F+&p2JkoYrH|6-UF%VG+w)5+uYB%;!WgzSbP zH~=-_ILwK&Ex#YT5?{3TYMnivIK+)H2R6s-I25(;l^B4#urcn(0+_Ljo4-yMug8;& zL`xD{X*X2d9|JK8wbJR9Uxm7Yo#qKlMSR`jH<*|>A*<Adq(b%2iNRPB(_(eYxAs!e z33{UjjK=gh2Q%YVYrlj#(Nolf@w>SzOoJMi2i0B{b%I8g?}oadNYsu@LEWNXFe!Rt zsA#|`)XE=WN_>mK7~I|6yG*EsX2%Rz8iTMY>cs6)3-_Y>&BCO(7BycCYQFOp-$fSW z^?a~IvL0@Q*)c91OJN!;hnk=%ro*nN6O6X@dDgzg^2bp3{3a&A`<Miuqi(6Er^k~O z5@QhO_Y|O_hp!xdhBZ*nLO;}wM53-_0_rW8kD73qwQoXAxCeEDd#Ld*Fd4?8KPK(v z#wSOeFCC`h{GM!7w9?Y36INCO*28e@fJJaD7Q#JP5?`Zsq+oBiW3^Bxu7^5t3(SvQ zPz#@jI`I<J1*}7FN-8_4Xy94Y)?Y<+xP^LHo}*5bsE?Z{o0$joUKhepEQQ*Mrl@fP zEk6}g5dVsr=a9v>`mp~x;ad_~KrCvd3HrJTf>BqJ-7I0&Fu%g&w0Ff2jKq{U6}6)) zQS)vzcbbRH(|y^0b^MEjw&o5herEAIGvEiekfd0G_AIDpq6KQfoiPXYLhZ;L)I5t( z{Z^wcWT(X^Q9E(NOGU5W2h_?__j4=$41FJ&sMn^fSsU{ae~qbeJf_8^sMj$Dwbdt3 z<8GtghL@;?zDM0!|Nib-^CqRD6NRF7ARB66e#@7`EW}kU-w|~s15hU%i@F7~t$nSz z3w7luP&;uQb)E;PTlE}yTfClt0dB%%s1D(%iF2bSC~5f`n1;AM>NV?xdRu<5_F?E- zkj1l6_kIzo-)hv`vmLb)PcXgS|5sGhG2}<Ll^M*Us9RD8wKHw;TkLM_XHZx6H)_Jy zsGW;NZE?^~?p9<#&0oMQg<-^%F@fIywp4UQT~S*(08`<3)Z4KHbp<O>C){Fj4C+M3 zP$#~O+JQ%?1;5917;m79Gou!g2Q^<&^lE~NR5Wp2)GcU+n($lHf_hjy9Cf8rQ74*% zxp5`t!3(Gb2iRMc2-Pn+7RM}@7Mr7Xwzrr4*9ymw(219z?_QbPQ42eWTF6P%72GzT zpsw^S>f18zAii2L0yVBXYC-)`3-_XSdbl}h5Che5E{P_%6tyFs!R}iw2rCfgwzvzH zBOZeqcNFz{oyDAZ3AJ+pL)-~dqF%=gsE4@#>g}n3dYBt{sp!f(qbBTa4#X_PBTy4A zN4+-NFg^Z(5qKXnVbVzV%O*eSmVArav2mzz3s4K#h?;Ld>ehJAS>-mW;|tV+;tzEl zf>A5Zh|1?jZDn!Pg3DUIs^#loDEY=1hP^GGit7I>>K5;CvDb5$iY7dbI>Db7-*6o~ z_fhxkITprP%#4MGxrrL0?_ovX!-^GXAC8Ui5H7*6;k^5J0M$Qogl-M@KbneGv<&qy zZA2|-7skf}sI5AVI>8mxRz64dk2BKVcZ^S*0riw;MZLylP$z7Ny60`s9|vL}=l2Yz zqNjQ+>fxJ)dT17-PP`4{;vw@Gs^4kMfY&V_i<&3SDAzv;YUe^w7nl*lFgGT^n&{OD z8d`_esC(TV127V`@=>T0&OlAH6t%!#QCD)vJc_!)<ERtdL(TULH9pR0_fRJ@3y)_1 zKc}HF2|dMAP+Pnabqfw*0X%`r(SMA4xK^RI`Uq;Fr!Br{@pa5c{w~(W)KTu2P&?Eu znT~<DCW`&nO1G2HPV7bB)}n7~QEx>os$a6P&U9utY9V<rCl*GHYl(?)04BlVsGXdQ z`oLR+32~>FiaH)bt>_GDA=gk(`x9%=I?kOqALb@s95t>rhGSQZgVC4~r(qV{WL`wg z|1WB16O4BY^9EDVmV~0Nq%i6OrZnoxo1iA@h(S0G6XP6I|K+G#u-@E)+Ns}BCp>_< zrKd3o-bF3^rHk4B32p&Fs1s*H4J?m3VJ(cn7N~)dsD+I~ZQ*>>30GMBE2`h`sD6h~ z3%-nc81GyAd!L*?-bA;;WT>B1*-%^bIcfowP#-w;QCr*_b>e=g6Gx)%eH3z0o=vC= zs4~gTTMu;sZBhBL7=kk}8|U||w1!itm0!VRc;9@F!Nf_T-TNDgx}q|uh15VTv>|HY zt<8?86ZSxTehfr??M9+**$nimGLMQLn#HKk?!Bn@_=fo&^}eT=>?X*GA;e`-x2ztf zz%Hm~DbnJZ<{H!m>_sj33~E7FCiDJlz)kD;4hs?oPjOpY0aFmyu=pF)m3Kf*&<E9j z0OrBfSO71fUc)3)-Hzr$y(L9Z3u%fP-(f2IuN~+@LKF8w-Gaeb9HUSZ?n7<uYt;K2 zi@K7u(_9>m*@?@bPS6(h$=C<=mh?m4yr_AiEFbNqqK>mr3z&=A+7+lP{~h%#oJLK2 z8`bY6>I(g*yDQ0r#fY<_PS65%;_p!7I-;J10hk;|pcdqvMMY2X64Zb-7H>9pp-y-R zb>-(!3wwsCFy0Jz!cf$NSyAozQ1ezoz4x_HCvJ|Zv8&VT89^n2#5_!j`_1#NgXbQG zk@w7WPkCm{N0=YAGvAm!P**w>^-xa6w73>^VTV!kpE7S^u)hCaP{~R|+*$5f$Z6(7 zT|p7l6_mkrSQB-N+F9Hm(-TiY&9e^E;5pO+p5SMgaJKtMFNPZ52{Y^c_fpZ*I3Kmu zOHeD`fLg$I)B^UR?%^ra!*>O>1NTt<-=X^Z&vCaV5Hk>GLG>?-YOiK-J@o3HwV<M{ zYlnKB`l2RYjydo*%!IcwB?ioO3rUZ8iL;|VfEuAr)CTnscD1+<YT<)045LsBUNx8f z*Xy^Dga&N4hTW(I9Jc&r)XHz7PV@*h;d|5t#GmI*9D*8`0re2(Ma^5$td1IA7sK$I zd0uyK29wZ2)?fkLi0XJ3^_0KDJecHXw~&&kTT&52u`c?q*zAMaiJwpl9D%y$lThbb zjJoA3yj1j5u0>4{gL(!Iq84x#HPJ2975|O8Rqs&wMDyK(QlR2c)cEWc7e+0#jKwuk zTi?j?-j-CfwVhD!XK&OAMxhok!{TMA1#U5ST7Ez3DL;qWiKkczgBG~AqCRS2T~Q0^ zhuVn|$U?lHnN+kz3s5Iqg?i0?L*0t=sE01$LbtF?sDAlS3onDZ;xABF*1+;DP+Q#w zBd{ZC%O{~0Gz}ATe$RX=nrJm@i#KCo+=IH}H<teowXncN?){EH-MX@v6YF46?2o#j zb*S;bp%%Oc<KijQ4xGn$oZs_+iaI<~0zHe}mBdGVkOW(t1LG3sN8O?#mamN3+FGcI zo1+%m1$CvPQ1eEcGf@{hAH8}_R#DLccB3XbX&tUw{vqnMdWV`g@e+6C*-_6-aa4Ov z)Rnh1JD?Wa3w4Y7p>}#WYGLD-u>VTTunr4Q6Rg1i+=jZMU8sefM)kjrde|PIb|}G8 z_eqx-wZJlFQ&hiRs9QA&i{L`cf)|&v|GM&jNoa+E%iPwc!5qXnFf-Q0?AQ}O!&#UM z58+q%!mRfTKPrgVVkS(t+<h&V#1_OoumT=OJu4yJ74F-t8kQo_4}ZXo*aq{ibSIjO z`H6R81U^MwS?X2pOQ#6x%9^42O~Bk3gSGH6>T9>uYIoxLSeMv4nhO8txy&ExFlLQ= zpBJJ&`F5bT^bE$wCzu3Zqqa0)t$PMip`N8&sC-$}Gf@XK;<uI`j2b@)6YKr|nMxpu zRj3neMLjezsE1@f4#pGs66>ww7cN#^?@qi5vk}K&54?-zvDpT9t7c;k;=@=4|G{Qh z@>l)D<Ni;fqKEAmCdV_Vhw2_`NBlOrok)wU*pnZF@pII|YoQk0)Y@C3uCODf#C{lr z<5Ba?#iY1N>is`JMOS(O^^n{^?L^s4ZVSIaov115qqYskL$5g;b&JNLwt5-r;X8o2 z@Ggd7$Y!^ILYRoS26{D7BPzP0uTUrIj9NfHb1-Uwqp%f5V@iC9y7Is+u76T94eA78 zsGZ1-dYDUKZk&fY&yg+czqaN)32p5i)I;+RrpAD+?kNw&Ld2y|6L&>T&>ur^IBH90 zpypeSTJToX3HMn11k(_|MfDHa#{O%9@NMpcr6}seWzEJ|gt#keYZs%QmA$A1A4V<c zJeI{9m;keEcl~mscDMj)hl`_jwkqlZ>UgPWr7f@{w#BS?3bnA;s1qjo%?(J3T2Kbe zkM%GWMxy%9L|wot)UDZvzJ;3Su?+cJ=zE63cewwekqZmb&>A!2G~`Y5Y{hWw_`7pF z<|E#KI^j)Bfv+$d2JUq86+mruM=Xg$F&*wiJv)CQ<Gh}yRPvGt*yScFj9Pg$%;4wo ze2Mz3?ik~CVjOD6CZi^ti@KLvQCoZ%^&0<)dKUgh&G!Mdlm5Hi!V_Rpz5nT{l=0*D z9X`R1d$<a0zK^ZLcKh8&Xs-iWF5i;a8Y>*+3HRq;!>}Lm!NVTU5ao~Xsfqh=C*vcJ z@;i^X;xWEKiJu@JEuIG_ScoQ^chaqJJq8kQMm<D(Fc}_2ZP^v`1!f{nbjr2oLiI0= zxv(-8#BLah3o!y?P&;-H!!XWiE=U8iQc=g+SQI-W7v))m8x)^$Tb%i<d)Nx1-s@^+ zW7I8ZgL)hKSbi|-;TvzxHh)1qe4Ea)q3W>18V;N1&0E&-nZ<7`4mjtYfyAissZbAF zxW%Qdy&CF7_048xE7Z95=h%N$dXosjA*hFI3g*Chm=X_SGrVH$CC<BvD`Ix?)y*E} zOl#kbU($XE3t^fI?tC>dIdM}j6`im%>gnxk9Y&awt$n`5E6gqCKJ%1$)qI3{`ro4F zO>og&U>a1M8+BpcQdX&p8A-G=hog36v9)hOJ&eaJzGl8M6aVRc?`J_xT*ho*esArA zES`;N^g^wtq7@xM-HJ=*J=DE>Y3=`_CQf|G_0NKe3u1b#YH@4SeErSQ=1gl}Ztn8Q z{Xa)V_u>)igr3XpVTx~tp?0Q(#Z53had(TynoCgQccO0Te$+xvSbPmL6F;zg;=i~U zz5f}g=wZvL1lBXZHanpv?q~5Jb1Z6MGcDeVz7wPG#2AP6Yu0|te1^J!SoD4Wr@P`# zoY~Ba>F7`jb7LdSf<rJbE=IlYXHW~fjav94^DSm1j(63yXG68;K|Pcu%&J$p|C*q& zb!=%J+n^r49>_!D8D{NsQCGAWb)~;xYTST2;Stoh2dFQl52*1W*W3l=M#WW7=l%Mc z*R8BA2~F4&^-%qUT4}Voz+7kULVW@rH~+HyL)1L)%(&NG9Au_3v!E7`$4f=`s*qXH ztZ#m2_QZ1Zi$pDOFKU86Q6J&gQ72A(!{t+<wmcNoKbOVjP&-u1^nPQNo~Q|iqb8nU z`Dx~IEJ}U{Y71YONp89eh(MjFsKqr=^RzI(L(Ts^YGJ)x-s>4`iIJ!;k14Lf^D{;e zFSYh#<|WjQ-9uf;8_NgYaucU9vzY}^3n^=H6|+7j^l<;bu@2u`Lw9qa<;S3|coOOg zR#^K+i+5Xm6m_DD7GE<T;}_)LS$l=sZsFB1A?NqBprR{ki`tq#7DuWBaWsB~b5O74 zd(??i-Er-qsPWlR<BOqorV_@(#;AE(qTZ7B7LP!$22P}+E1ZwIhubh7o<L1_-n?Z# zGh<OF3cTygi0WSeHD4Kv8=I}o?&iR|?0-Bujv*l@p<b&QsD&-Hj+?E0uf<0&Gwm15 zch;Wao|`8ewUAtx9gCqB`nA~uwZLKb*ngdPE(r}-Y_3P;ccK=u-}2|oo90str~Lz# zz|8mEJk3$#+nZf2-^YwJCwQq;pyM1%Ttlt&G3H0l0~Z%S#g$My)EjkzNYqY@MlE!u z<$puXv&TG#y5jq&3-y2K#(RUQD3Qt%;h2dym*uNtLgL1l6<c8*9FAJh2Gr-mEsVhQ zkKAv>3aAq{MLknJPzxGq&T@J^tEuSQC<b++zc4Z0HD8#1kKKxc%#^7987z)Ko!~Rn zeC1F((*o6RAZp%`7EkfX{hvogTltH**4&I5@H^@uI)d7Pe=MKoZ`Ym;we<y2&p-vN zi$CIQJcetq;}f?d>7P0aqwo8_78Na^nG)E_;w~2VMs4K~)D_OM{AzPMYWzVA#p9^Y ziN~mK#{|#Z0>e=K@}tgE41NFpU&#`+QCHH!?1UQdqZx@BI2yH}X{fDTYwg?27*xN5 z=2_G;bpzGk|G8^V{G9h+CrnF1=0u&a1SZ9D*0C;XU`tfL_UMm4m;+D`*+2}y$(R9W zVi0b|e7N6yh4qLd{^9<IQ0e!NGYYkUd6)y2-~v33zNh$wYaeNjH>a9&usr=2VGX>4 zdS(i~bn`bx?acS6^YryvVxTz&b<d_-ycTukJ5U1-n8(bsn2Y>n)MtDASMKkE5vZNY zhsm%krog(WdD@~D;_Yme{^khOiYHsV6}3bAQLocQ%fClGWC>oopJd^fmN+|xVR=l2 z-(n#4L!EFKYQ9NGf3IgT6<y&@Oo@lA!&THn_S_77;|69$^)F_YM_o}3On~)JCu)v5 zQG3)*46ytdbGomc`@h&aY_W!e=2_G;aKqxjw{F5Ts0HLkov;Y%gk{Vcs9Vv*;=ZVb z47GTgxd?s#{<lsQI_$QF)2IR0Q1|v9)D>iW=YApO#Wchvuqf8U@i+>#gK6KpPr!Vb zpST8U{EwE8!a~H$(3_shWhxr@1{DYW>&%53SOqmvBUHZ;);<Sy<y%p=V88i?<<FpY z>N@Iz9$G#Y)j#k9_g@VmA6$oQW^uCyY5^_HE|wpN+Tw|*omgugvi2JmzeFuCDAt)C zb>bYToy`|(?|(BA`i$?4TJaQ2j`J+uVD2yvp!%OQ-{NP)ng4TdPi@pZy)YvVL|y0{ z)B@I;o4r)D!r#p!sC#+=BQV(G=NnKIHNoeo{&g@deucVaeNj6VZS4!qwdM}gi4U76 zP5%ACO?VY`f=A|ms0l;-TzeKXAL<z>jhe6?=EkNL4>O}s3yn5^Hdk5uHe`pqo)}9U zF;AfeUbOfQY9Wu!52%GE@plUdLv3|-)CW!h%U4CsQ`>BT8rK0e-;e0~-~UEgVj1dT z+JfqM67`993pG)^IDWo+nH&`tL`_uI;@YTN(E>Hk52ziQXzkO@#pZfU@1?^|OI$(? zxM%Sb^Iz1KCyeV(oC$T}JZ5RsLTjS>bwNG6Ls1Xubkys+3$^fPsPVDr`}==TfNMyJ zT0j=mmgY1InV*|qpeCq`ny?jWTo=>_S#Q)14oA&11J!RK>JxLV<+ld-xqtuLLqe~~ z3G4U-^AP`wSukfjcfy*Oh`0sj#dfH1Q&A_{h+4=_bHC;PK)o&JE&mL40dL}Y-GBt~ zox!M;rm{F3HE}M>7dFeAUz*KPTi+ga<pWXUCZZNJ3pMWoEQM=O&&orub%>w9&-dO3 zp*mJZO;iu{N!125(FALshC1OQ%WpGdP$xc!n&%X1hpt*2i<&1ep_{*22o-hAW)?Kd zqPD1}*#dRKPS!re^5ZcH`FYVDilz7JoBkvj-K4*)$34`N-k{FppUB0*W?Iza8jf08 zF|!Q%wgP=yfqJjnV0#>B@m<vX{G+|sS4qUb-fLhA)P$K)k6jMS7eJk`4C<#&J=DZ~ zt$l(y$6Ri1M$Na^;v=YEn-@^yuLRoD^x8VcqE;5be@4(=2BUT+6YAR{7iz*L*8VkW zqORsh)cE<R7kmYl#XnFNm?ViCpAHpg_F5vZC5m7i8Y);^#oFte%~0<}D~ktUT;d_9 zEgyke_)OFZmRo)^YN3ZMe-pJ(?^7zeqIcHd7vv@gGBct&=0#0d-13#phM0kT8`J`Z zm{ZJUsPWs)eW>#tN9OZ-&bf-`ruo$TU?vK7Cr*tTm=$%x+^C7GTE3p;o1(6?kHzCL zHStQ+1?<IicoKd8HR%zR93(zqCX7hxcAyGsKqK=zRKIShkGL5Y|AxBPw^1M7@ss)a z{wK`&unMskOW=Og`^XoxuU{%Gsc(}qRElFi)JM#E)P%=S58YF2j2V;r`TlcNA1qA# z7PX+fDcr=3QTM*H#Xq4I6pdlH9X0P|)VE74dbL&gQo7fwD(XYJGfu+UsC$|(m9qk> ze?yDApl-on)J}~-EnvE}FEh7W{+PvAP!I95RJ{Kh5SZFcklxH;7BMTJ?tN|42^(Qo z{08^o3H%bLrg6{4Z44#$PwVFyj$v38m!fXPQ}n&g>3IKZl4z37&-edLvKaMgAB#F+ z$@K2Z%cK4>)&TXFvkv9})Rm7#?bJ+*SE0slvp5EI?~kEAz;2;F<P&=N52m_DIZ*e$ z4(bX!nSHQ7@gUTM?@?da{-Lg4a@23AP>Tzr`jtWLY-QBj($MUIdU(g9Zl!lU6-{si zb>bVSD|%$UHREM;pM=THjHnak#EO_7bx(U)ejIAPDds%XyuYA!Y7>su`+tavp8f`z zY%5VKpNTrba@2rzsPBNi7GJ<t#1By?sukvJj2hp{>~0Q5Enp(*-p}>LynjcjXe%yS zhv%pX{zFY1oY^fPEvjE0ERB^>57`jZ#6O#>P~*0tc4jZ?LK0+gAML@Y_T=dM*Q8J? z>X6GUU>3(t<jbN?yb`q&`%ovmVDW9#6}>Sd!d?FcW@psHHXQZcvKY01U(l<GHc-*O zee6OlBym>v0g)WD5m!QeaD0yoF$(n&nm?O+XltOJ>UOA|i$X1QHtGXv4eBS+1<S{Y z@bmq3HdO@gzn=Q)Bs8Ec>NV+y8aN)cz%8hS?L$60JV!B{_-1x@Me%dED+)x-lhVwA z8ea;vu&SslZ-Scd+Z<juK?f2#ac9&oqDbUCzN4>I`up>jaQ3gw#|Bzok^6WIq)oS} zDdi99G4%V7cD;VF8cUp*d`=tloz&<5Y)TQE^fSCbr%#VaI`$wDY6E|wPf_bXhI|3? zA1Jr1U1KLP#|ipGTfYe6=G4>CrwjEjt*>{jRnp?0bQnsxXbUK2)?>o1nw29J{VI`< zL%)913y|xA-SB7pcnqTbw2l9Z<d0TYdvW^BrrdVd&!-=a{tWnsa@J;;Nqr#oy*BAB zo1hSJa_Yk=+&#}e;$_&2_&nw&UTl5OQQu<qqsW`+`GWEX^R6TQ)}Q@vM`f6GTEGAu z&*`M&JMtT?Z8PzG@)I;E^{*{o(p3LnXzNU$Oynvn!BL&Ej^eesJJ{TF>2p!Zs+Lga zEW{6J*kzN>AkLx&JNS*_xkZUbX=#1b)Pa8Eh--Z^R}<>5Y+PRI>*=Fo1^sw&JnM+{ z{P~UqB!}9B=kO+t*XT5a)={_?2igQ~1Ph}dKWsgG`+9nj{MQ;jC$2(SLebHbet$Cd z2=zLYE94uf;p6%5(&1~Od%hgs&vdv=>A|2qwCVWPbdmdWIPljoPd`dYijF7r3;Cq) z4d&=d{0HrAsmIW#rmv^|;QE6;>70%F8p>!oPo+F&z$)T~pY)kSemU`a{CMP}pN>bA zrL<Kiu1}dxJeX33zWUC1LizOgT=!qUNOW{&;B!hkN;8-8{S8yqndEf%>Bm0DY9<V{ zlZN09$_etD>Gz|r2Rle^2=N@^%Jk1qy{yesn0PgL?+-RfUK(DK97H^xvWR#E@&7*_ zl8C2?Y+O(31u0wT8;`}s(*BV6<57uzLuji@DNlZr`hRTH{{Kf%n`G)w2K`OvB$S>E zzD<55bsd+9^*inojwSawZKo(VDci{Dm_vP(t9rg7w~l@Vt?e20ywoSqN5}VZxc`qy z-k>xiIe>DO`aH@k>r{gJPt@N~GEn%v;tAkNn=#P>>L;)Pr5hy;?a45lqMvR5;!ui? z>$K_M7o2Al^}ASD_g_CE4iT&;*_Zenv3?Wkt9LK?$*6BJ9dBs=*CtZjnR1NWH}q>m z{vqmUN2yEx<MGzU__OfU<oVI$2_VPy^O{llf%1Ul_rx72y(u*)IVl$y(1G?a>eaCd zMaMMC1xhK#b*Jd?r%jXoY;k7dMbxJ;$8P))JK`Doj8oTxBu0>kpy=r6@NC7w4E~08 z9lI%eC|k+tFDd-p#FLTw@0f%>si;Si??HTs`p4rA@heIYeH!3B${iXLP^Ref|4TZ@ zC)kNMY~Uk0htW}g7tpbSSjTaPrzLIqtiF#ixoE$Hd9VrP3u_xsKmJ<iNlq?`l98fg zGF~9xQTIQsowO2(%T~{a!-yBtIfo7EM7^)I7bT~Uf^NjCDSs#?5r+~;UPo4P`gIjd zdwlZzb@6{kHEPF*efNJA9cx<SaEu_<Z+RVm+6f0xPe{HqrMRz!k7W98qinFTmiBSO zf<{=2IeOElG!9^VWt%gdewR+Bp`0Z;n*A8Gka8#bL$&mE*Him~VLB?%<1Hifd$tng zFY?`$$5!NTQP+`ycnN)rP$p5Iitj1sDdnO&R8Q|+Oz%Uq=!fh~tWC*Ju01Zt-^ur< z_s63T`Nfn{l#`UE^w~&bLdsQ&m%h8Le_Y!3l50=VU#|91W>AhW?t9us$6@1B5PV=j zLK2B6ACG(F^ASIyET>)#A7X3zzQ;Pm^YI|@O$Nn59r{O(!Q`6|pT!2)9b1yukLDt{ zjiRHD9{iD1zM^!cQxu&?V=4Tc+)vbZQw~$tF^tlPNk-ECEA?o~NZMbJ({Y`$owygJ zCVdi7J|3Tu+dwHn(b0=B$F*H4DWgahw@F+xuO*d#$hWouM~UB3P7&9~Yq<2|iK#DR zo~h(@RHJ?f>(PD^=M(D~^YI)QLF~Q6ANke7ag*dK>_aI?eI(_84b&QXTYV_?akLGl zyrF!0Os7v7N;M7OXoKZl^?!e!qIQoyUG(Cmr^D~oSv@vUze-~P%0(Lzh5D<Vjw-ZI zr_7~(6i>2%LeztBKVyEQlq263dt-Y18g(>uc%I^a^lzy9KhYZNlPFIaP8>{!`P6kx z$FX?E;)B$i(q{z5GWj<Y9jD19rUX&nh&rlTTWjij$Q`yh)aFOrN*{c=Nd8Qs1)Voj zKTo|V^+dFdrRcb06S;^lMe^4Oc2G()Ca$%AM}2{Hsz`kt{qo>Xmdj&`N#uPWd<rVk z@h-k#qHZ+o_<tu<pW2ka$^T5*u7n*e8C#foR>n1^^rYx0Nq&RPQ<nH|;_aWz`;E^3 z+7fLw!j9@pkbusYiMODRnUt;MuTz$gdrzE|v5zSatj_^EvHGW^l%ecbz){c6Gn+o= zt^aFX{~8*T(l~<hoQ9pmyKsU=afCR0fBs6JflTm{XfpMy^jm0?&BF?`MN*1Tulvck z82ajXN4_t<r_cA)&*=X95uBrBr#^&I-#Ukon@IVE0e|6d6dm2IUG;_34>RTxZ6&B5 z#n+Uw*0(%uI*L&`S$zO)gOud>-~CTYV}LSo^@lsA(eZaCjkbZ|)caA!5SOIOU7Sk! zfqG6mp+>&Y9~^7xd!O=;3w{3#JkRQJ7+1!h^RHoGdmB8Aq>g9?_0d3zj-}*}Tc1VL zi&;I)`nSVn^y^Q4k#7W_@itarJW3kcDq33&`o~b3@eePaT-LD$hSRALCZWuyb92fm za+&D-jG`k2Wu>piryowB{nH~Z{c2K@k>5#qV(sHU>2#m=aN>ntYkaK%oOA=p?5N{M z+D=fPi=h}v=|pManmuzFbCP(E=AhmhYheIBus++VkD-r__?VgYFR8bu9-q3m1%G7G z1RNh6o?|v(3jRjBj#-p=R$t-E@L<wjnOqa%x0sUhfw`vGeCoE3`W5RhLWz%1nltuU z9DZl-rIMO~U*S7Ctfc<&$WQ$=ozqiV(SC*a7>)l?uS)$dEN%VkQrGb(r7>l*<@1n# zPMjk8tNN+EYniDlWh~ipxQX)AdeX_0gSZQ24!M=|*+D(I8aU3_8CsD0%<9S?p?;a% zEX_kbA>~)%FE9aKq&%jnmR`4>RHo6e6r*U+F$*_RHc=l<SwOpviIlI%-}goO?}U8l zTiZ)cHjnxYi?h<_$tM?5n0zvFv+)J_e;FGVrxN=~GAGH#B#TkbQh!G7DjmM2JR&Ym zIY>R2_P=TScw{5D%P-omdMa-Xsxv5u>ADJ+)2AIK!u{ya&@_~av_GZjs7Jh?l7e;} ze&ibwkDy$kzJ%NXUkkq*a3Z+?+H~Y{`2I}GKiGPX)6j}A)+TFA=Sjp#DY>ct|6?cp zUy={Bw%m;S%{mpJUWfcv`n<vl<lB<_fl`~IV-0P)@E!4>IQ5m{Lx*H@ijLfrPBiAg z@08&9)!O=yZ)g)8AonHpUnuWvG2`*u4WW&GO1WWD$F^ycb?Vf$Z&<JPZF;r|>)ESK zx1M3qM`E&Ucr`RI^@fbIX9lGHu6K_Pz50dq>e{hQm#{vqI(2B>s#k}uT{di-UpeCj z|6PauqW_NRv>|eLz2qB?oefTt{ob0*ccMn!9k%q=_QkihjJdOF@%`nCZm*8IGjhV+ z?GtaWo_QyF?5!QMH(Y*vGS%kIas9>zgxp>|>h`c@x3(|3J1Xk_@~C@j25+vM$ge?$ R%|A!@t?--HE{9*9{{uOvy;T4J diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 1922354d7..5568da58c 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -4028,17 +4028,17 @@ msgid "name not unique" msgstr "名称重复" #: users/templates/users/_base_otp.html:14 -msgid "Security token validation" -msgstr "安全令牌验证" +msgid "Please enter the password of" +msgstr "请输入" #: users/templates/users/_base_otp.html:14 xpack/plugins/cloud/models.py:78 #: xpack/plugins/cloud/serializers.py:178 -msgid "Account" +msgid "account" msgstr "账户" #: users/templates/users/_base_otp.html:14 -msgid "Follow these steps to complete the binding operation" -msgstr "请按照以下步骤完成绑定操作" +msgid "to complete the binding operation" +msgstr "的密码完成绑定操作" #: users/templates/users/_granted_assets.html:7 msgid "Loading" diff --git a/apps/users/templates/users/_base_otp.html b/apps/users/templates/users/_base_otp.html index a9589c50b..cac472621 100644 --- a/apps/users/templates/users/_base_otp.html +++ b/apps/users/templates/users/_base_otp.html @@ -11,7 +11,7 @@ </h2> </div> <div> - <div class="verify">{% trans 'Security token validation' %} {% trans 'Account' %} <span>{{ user.username }}</span> {% trans 'Follow these steps to complete the binding operation' %}</div> + <div class="verify">{% trans 'Please enter the password of' %} {% trans 'account' %} <span>{{ user.username }}</span> {% trans 'to complete the binding operation' %}</div> <hr style="width: 500px; margin: auto; margin-top: 10px;"> {% block content %} {% endblock %} From e44c8ae9401b04fe789800ef7e657b70e459779f Mon Sep 17 00:00:00 2001 From: Bai <bugatti_it@163.com> Date: Fri, 16 Jul 2021 11:22:26 +0800 Subject: [PATCH 3/5] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E8=B7=B3=E8=BD=ACflash=E6=97=B6=E9=97=B4=E9=97=B4?= =?UTF-8?q?=E9=9A=94=E5=8F=AF=E9=85=8D=E7=BD=AE=EF=BC=9B0=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E7=9B=B4=E6=8E=A5=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/authentication/views/login.py | 21 +++++++++++++-------- apps/jumpserver/conf.py | 1 + apps/jumpserver/settings/custom.py | 2 ++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/apps/authentication/views/login.py b/apps/authentication/views/login.py index 0aa9f90b5..195496e9b 100644 --- a/apps/authentication/views/login.py +++ b/apps/authentication/views/login.py @@ -56,14 +56,19 @@ class UserLoginView(mixins.AuthMixin, FormView): if not auth_url: return None - message_data = { - 'title': _('Redirecting'), - 'message': _("Redirecting to {} authentication").format(auth_type), - 'redirect_url': auth_url, - 'has_cancel': True, - 'cancel_url': reverse('authentication:login') + '?admin=1' - } - redirect_url = FlashMessageUtil.gen_message_url(message_data) + if settings.LOGIN_REDIRECT_FLASH_MESSAGE_INTERVAL == 0: + redirect_url = auth_url + else: + message_data = { + 'title': _('Redirecting'), + 'message': _("Redirecting to {} authentication").format(auth_type), + 'redirect_url': auth_url, + 'interval': settings.LOGIN_REDIRECT_FLASH_MESSAGE_INTERVAL, + 'has_cancel': True, + 'cancel_url': reverse('authentication:login') + '?admin=1' + } + redirect_url = FlashMessageUtil.gen_message_url(message_data) + query_string = request.GET.urlencode() redirect_url = "{}&{}".format(redirect_url, query_string) return redirect_url diff --git a/apps/jumpserver/conf.py b/apps/jumpserver/conf.py index 449ae7974..72ad7f3c5 100644 --- a/apps/jumpserver/conf.py +++ b/apps/jumpserver/conf.py @@ -306,6 +306,7 @@ class Config(dict): 'SESSION_EXPIRE_AT_BROWSER_CLOSE_FORCE': False, 'FORGOT_PASSWORD_URL': '', 'HEALTH_CHECK_TOKEN': '', + 'LOGIN_REDIRECT_FLASH_MESSAGE_INTERVAL': 3, 'TERMINAL_RDP_ADDR': '' } diff --git a/apps/jumpserver/settings/custom.py b/apps/jumpserver/settings/custom.py index c60c53788..d8f763b0d 100644 --- a/apps/jumpserver/settings/custom.py +++ b/apps/jumpserver/settings/custom.py @@ -128,3 +128,5 @@ HEALTH_CHECK_TOKEN = CONFIG.HEALTH_CHECK_TOKEN TERMINAL_RDP_ADDR = CONFIG.TERMINAL_RDP_ADDR SECURITY_LUNA_REMEMBER_AUTH = CONFIG.SECURITY_LUNA_REMEMBER_AUTH + +LOGIN_REDIRECT_FLASH_MESSAGE_INTERVAL = CONFIG.LOGIN_REDIRECT_FLASH_MESSAGE_INTERVAL From c21217d50c0929b5faedee5279a83e3f4a294eb7 Mon Sep 17 00:00:00 2001 From: Bai <bugatti_it@163.com> Date: Fri, 16 Jul 2021 12:37:14 +0800 Subject: [PATCH 4/5] =?UTF-8?q?perf:=20=E6=B7=BB=E5=8A=A0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=A1=B9=20LOGIN=5FREDIRECT=5FTO=5FBACKEND?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/authentication/views/login.py | 29 ++++++++++++++++++++++------- apps/jumpserver/conf.py | 2 +- apps/jumpserver/settings/custom.py | 2 +- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/apps/authentication/views/login.py b/apps/authentication/views/login.py index 195496e9b..0eef00579 100644 --- a/apps/authentication/views/login.py +++ b/apps/authentication/views/login.py @@ -46,24 +46,39 @@ class UserLoginView(mixins.AuthMixin, FormView): return None next_url = request.GET.get('next') or '/' auth_type = '' - auth_url = '' + if settings.AUTH_OPENID: auth_type = 'OIDC' - auth_url = reverse(settings.AUTH_OPENID_AUTH_LOGIN_URL_NAME) + f'?next={next_url}' - elif settings.AUTH_CAS: + openid_auth_url = reverse(settings.AUTH_OPENID_AUTH_LOGIN_URL_NAME) + f'?next={next_url}' + else: + openid_auth_url = None + + if settings.AUTH_CAS: auth_type = 'CAS' - auth_url = reverse(settings.CAS_LOGIN_URL_NAME) + f'?next={next_url}' - if not auth_url: + cas_auth_url = reverse(settings.CAS_LOGIN_URL_NAME) + f'?next={next_url}' + else: + cas_auth_url = None + + if not any([openid_auth_url, cas_auth_url]): return None - if settings.LOGIN_REDIRECT_FLASH_MESSAGE_INTERVAL == 0: + if settings.LOGIN_REDIRECT_TO_BACKEND == 'OPENID' and openid_auth_url: + auth_url = openid_auth_url + + elif settings.LOGIN_REDIRECT_TO_BACKEND == 'CAS' and cas_auth_url: + auth_url = cas_auth_url + + else: + auth_url = openid_auth_url or cas_auth_url + + if settings.LOGIN_REDIRECT_TO_BACKEND: redirect_url = auth_url else: message_data = { 'title': _('Redirecting'), 'message': _("Redirecting to {} authentication").format(auth_type), 'redirect_url': auth_url, - 'interval': settings.LOGIN_REDIRECT_FLASH_MESSAGE_INTERVAL, + 'interval': 3, 'has_cancel': True, 'cancel_url': reverse('authentication:login') + '?admin=1' } diff --git a/apps/jumpserver/conf.py b/apps/jumpserver/conf.py index 72ad7f3c5..87577d696 100644 --- a/apps/jumpserver/conf.py +++ b/apps/jumpserver/conf.py @@ -306,7 +306,7 @@ class Config(dict): 'SESSION_EXPIRE_AT_BROWSER_CLOSE_FORCE': False, 'FORGOT_PASSWORD_URL': '', 'HEALTH_CHECK_TOKEN': '', - 'LOGIN_REDIRECT_FLASH_MESSAGE_INTERVAL': 3, + 'LOGIN_REDIRECT_TO_BACKEND': None, # 'OPENID / CAS 'TERMINAL_RDP_ADDR': '' } diff --git a/apps/jumpserver/settings/custom.py b/apps/jumpserver/settings/custom.py index d8f763b0d..36a2357cf 100644 --- a/apps/jumpserver/settings/custom.py +++ b/apps/jumpserver/settings/custom.py @@ -129,4 +129,4 @@ HEALTH_CHECK_TOKEN = CONFIG.HEALTH_CHECK_TOKEN TERMINAL_RDP_ADDR = CONFIG.TERMINAL_RDP_ADDR SECURITY_LUNA_REMEMBER_AUTH = CONFIG.SECURITY_LUNA_REMEMBER_AUTH -LOGIN_REDIRECT_FLASH_MESSAGE_INTERVAL = CONFIG.LOGIN_REDIRECT_FLASH_MESSAGE_INTERVAL +LOGIN_REDIRECT_TO_BACKEND = CONFIG.LOGIN_REDIRECT_TO_BACKEND From 3f0a0b33b5308699389d3a4e8e108ea19fbf31b7 Mon Sep 17 00:00:00 2001 From: xinwen <coderWen@126.com> Date: Fri, 16 Jul 2021 17:09:06 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=E5=BA=94=E7=94=A8=E6=8C=89?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=AD=9B=E9=80=89=E5=8F=AF=E4=BB=A5=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E5=A4=9A=E4=B8=AA=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/applications/api/application.py | 6 +++--- apps/applications/filters.py | 12 ++++++++++++ apps/perms/api/application/application_permission.py | 5 +++-- .../user_permission/user_permission_applications.py | 3 ++- 4 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 apps/applications/filters.py diff --git a/apps/applications/api/application.py b/apps/applications/api/application.py index 867a8ddd3..1933f6280 100644 --- a/apps/applications/api/application.py +++ b/apps/applications/api/application.py @@ -1,11 +1,11 @@ # coding: utf-8 # - from orgs.mixins.api import OrgBulkModelViewSet from ..hands import IsOrgAdminOrAppUser from .. import serializers from ..models import Application +from applications.filters import ApplicationFilter __all__ = ['ApplicationViewSet'] @@ -13,7 +13,7 @@ __all__ = ['ApplicationViewSet'] class ApplicationViewSet(OrgBulkModelViewSet): model = Application - filterset_fields = ('name', 'type', 'category') - search_fields = filterset_fields + filterset_class = ApplicationFilter + search_fields = ('name', 'type', 'category') permission_classes = (IsOrgAdminOrAppUser,) serializer_class = serializers.ApplicationSerializer diff --git a/apps/applications/filters.py b/apps/applications/filters.py new file mode 100644 index 000000000..948fa9187 --- /dev/null +++ b/apps/applications/filters.py @@ -0,0 +1,12 @@ +from django_filters import rest_framework as filters + +from .models import Application +from applications import const + + +class ApplicationFilter(filters.FilterSet): + type = filters.MultipleChoiceFilter(choices=const.ApplicationTypeChoices.choices) + + class Meta: + model = Application + fields = ['id', 'name', 'category', 'type', 'comment'] diff --git a/apps/perms/api/application/application_permission.py b/apps/perms/api/application/application_permission.py index e7b449b5a..700b5384d 100644 --- a/apps/perms/api/application/application_permission.py +++ b/apps/perms/api/application/application_permission.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # from applications.models import Application +from applications.filters import ApplicationFilter from perms.models import ApplicationPermission from perms import serializers from ..base import BasePermissionViewSet @@ -12,8 +13,8 @@ class ApplicationPermissionViewSet(BasePermissionViewSet): """ model = ApplicationPermission serializer_class = serializers.ApplicationPermissionSerializer - filterset_fields = ['name', 'category', 'type'] - search_fields = filterset_fields + filterset_class = ApplicationFilter + search_fields = ['name', 'category', 'type'] custom_filter_fields = BasePermissionViewSet.custom_filter_fields + [ 'application_id', 'application' ] diff --git a/apps/perms/api/application/user_permission/user_permission_applications.py b/apps/perms/api/application/user_permission/user_permission_applications.py index 6916f6f29..5e5c27d22 100644 --- a/apps/perms/api/application/user_permission/user_permission_applications.py +++ b/apps/perms/api/application/user_permission/user_permission_applications.py @@ -3,6 +3,7 @@ from rest_framework.generics import ListAPIView from rest_framework.response import Response +from applications.filters import ApplicationFilter from common.mixins.api import CommonApiMixin from applications.api.mixin import ( SerializeApplicationToTreeNodeMixin @@ -25,7 +26,7 @@ __all__ = [ class AllGrantedApplicationsMixin(CommonApiMixin, ListAPIView): only_fields = serializers.ApplicationGrantedSerializer.Meta.only_fields serializer_class = serializers.ApplicationGrantedSerializer - filterset_fields = ['id', 'name', 'category', 'type', 'comment'] + filterset_class = ApplicationFilter search_fields = ['name', 'comment'] user: None