From c3e2e536e06da0604c9bacd2337a7898078e3187 Mon Sep 17 00:00:00 2001 From: xinwen Date: Thu, 17 Dec 2020 10:24:52 +0800 Subject: [PATCH 1/5] =?UTF-8?q?fix:=20=E3=80=90=E7=94=A8=E6=88=B7=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E3=80=91-=E5=88=9B=E5=BB=BA=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=BB=84-=E5=8F=AF=E5=B0=86=E7=B3=BB=E7=BB=9F=E5=AE=A1?= =?UTF-8?q?=E8=AE=A1=E5=91=98=E5=8A=A0=E5=85=A5=E5=88=B0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=BB=84=20#579?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/users/serializers/group.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/users/serializers/group.py b/apps/users/serializers/group.py index 8dba1025d..102b562a8 100644 --- a/apps/users/serializers/group.py +++ b/apps/users/serializers/group.py @@ -53,3 +53,7 @@ class UserGroupSerializer(BulkOrgResourceModelSerializer): Prefetch('users', queryset=User.objects.only('id')) ).annotate(users_amount=Count('users')) return queryset + + def validate_users(self, users): + users = [user for user in users if user.role != User.ROLE.AUDITOR] + return users From 3f2925116e19d1b9eb1402219a5240a7c1dbecea Mon Sep 17 00:00:00 2001 From: Bai Date: Thu, 17 Dec 2020 11:29:09 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dmetrics=E8=8E=B7?= =?UTF-8?q?=E5=8F=96terminal=E8=BF=87=E6=BB=A4is=5Fdeleted=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/terminal/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/terminal/utils.py b/apps/terminal/utils.py index b480503d5..ab694ae3c 100644 --- a/apps/terminal/utils.py +++ b/apps/terminal/utils.py @@ -109,7 +109,7 @@ class ComponentsMetricsUtil(object): @staticmethod def get_components(tp=None): from .models import Terminal - components = Terminal.objects.all().order_by('type') + components = Terminal.objects.all(is_deleted=False).order_by('type') if tp: components = components.filter(type=tp) return components From a3a591da4b6f98b7417121356bb3bc8837729387 Mon Sep 17 00:00:00 2001 From: Bai Date: Thu, 17 Dec 2020 14:29:54 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E5=AF=BC=E5=87=BAexcel=E6=A0=BC=E5=BC=8F=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/drf/renders/excel.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/common/drf/renders/excel.py b/apps/common/drf/renders/excel.py index 0d1cb8d51..e4cd9f0ce 100644 --- a/apps/common/drf/renders/excel.py +++ b/apps/common/drf/renders/excel.py @@ -1,5 +1,6 @@ from openpyxl import Workbook from openpyxl.writer.excel import save_virtual_workbook +from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE from .base import BaseFileRenderer @@ -20,7 +21,9 @@ class ExcelFileRenderer(BaseFileRenderer): self.row_count += 1 column_count = 0 for cell_value in row: + # 处理非法字符 column_count += 1 + cell_value = ILLEGAL_CHARACTERS_RE.sub(r'', cell_value) self.ws.cell(row=self.row_count, column=column_count, value=cell_value) def get_rendered_value(self): From d2a15ee7029ac5bc704eb250ba9ecee7e5c7d745 Mon Sep 17 00:00:00 2001 From: xinwen Date: Thu, 17 Dec 2020 12:28:46 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20=E7=94=B3=E8=AF=B7=E8=B5=84=E4=BA=A7?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=A6=82=E6=9E=9C=E7=B3=BB=E7=BB=9F=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=B2=A1=E5=A1=AB=E5=86=85=E5=AE=B9=E4=B8=8D=E6=8E=A8?= =?UTF-8?q?=E8=8D=90=E7=B3=BB=E7=BB=9F=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/tickets/serializers/request_asset_perm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/tickets/serializers/request_asset_perm.py b/apps/tickets/serializers/request_asset_perm.py index 83c480e61..9bc70b79a 100644 --- a/apps/tickets/serializers/request_asset_perm.py +++ b/apps/tickets/serializers/request_asset_perm.py @@ -133,9 +133,9 @@ class RequestAssetPermTicketSerializer(serializers.ModelSerializer): def _recommend_system_users(self, data, instance): confirmed_system_users = data.get('confirmed_system_users') - if not confirmed_system_users and self._is_assignee(instance): - system_user = data.get('system_user') + system_user = data.get('system_user') + if all((not confirmed_system_users, self._is_assignee(instance), system_user)): recomand_system_users_id = SystemUser.objects.filter( name__icontains=system_user )[:3].values_list('id', flat=True) From 4f5f92deb87a073ecfa3ed813167ead2e27d1ecd Mon Sep 17 00:00:00 2001 From: xinwen Date: Thu, 17 Dec 2020 14:41:55 +0800 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=94=A8=E6=88=B7=E6=8A=A5=E9=94=99=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=A4=AA=E4=B8=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/drf/exc_handlers.py | 5 +- apps/common/exceptions.py | 6 + apps/locale/zh/LC_MESSAGES/django.mo | Bin 63501 -> 63607 bytes apps/locale/zh/LC_MESSAGES/django.po | 162 ++++++++++++++------------- 4 files changed, 93 insertions(+), 80 deletions(-) diff --git a/apps/common/drf/exc_handlers.py b/apps/common/drf/exc_handlers.py index ae0688145..93ff84146 100644 --- a/apps/common/drf/exc_handlers.py +++ b/apps/common/drf/exc_handlers.py @@ -1,11 +1,12 @@ from django.core.exceptions import PermissionDenied, ObjectDoesNotExist as DJObjectDoesNotExist from django.http import Http404 from django.utils.translation import gettext +from django.db.models.deletion import ProtectedError from rest_framework import exceptions from rest_framework.views import set_rollback from rest_framework.response import Response -from common.exceptions import JMSObjectDoesNotExist +from common.exceptions import JMSObjectDoesNotExist, ReferencedByOthers from logging import getLogger logger = getLogger('drf_exception') @@ -31,6 +32,8 @@ def common_exception_handler(exc, context): exc = exceptions.PermissionDenied() elif isinstance(exc, DJObjectDoesNotExist): exc = JMSObjectDoesNotExist(object_name=extract_object_name(exc, 0)) + elif isinstance(exc, ProtectedError): + exc = ReferencedByOthers() if isinstance(exc, exceptions.APIException): headers = {} diff --git a/apps/common/exceptions.py b/apps/common/exceptions.py index 396430df3..3422f0e0c 100644 --- a/apps/common/exceptions.py +++ b/apps/common/exceptions.py @@ -33,3 +33,9 @@ class Timeout(JMSException): class M2MReverseNotAllowed(JMSException): status_code = status.HTTP_400_BAD_REQUEST default_detail = _('M2M reverse not allowed') + + +class ReferencedByOthers(JMSException): + status_code = status.HTTP_400_BAD_REQUEST + default_code = 'referenced_by_others' + default_detail = _('Is referenced by other objects and cannot be deleted') diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index b4b073c4ed6bbcfe6a8397f7e7fbabf3dd11dd67..c32804ee51540574955994e92e8f46151ec99ce2 100644 GIT binary patch delta 18129 zcmYk^2YgOv|Httok`O`=5d;}x#ug)pJyNl$+61vjjiT1A_NaN6+El4kqqfq=ro*by zYLyZcts1qddOqKrpV!NIy{_kd{eIVVu653RC-FT0|MdH5pWaXFxtz^+uEW(et>fgu zDq)T@&DU|-l~>krCMP&fAs@$?f~|?as_!_{F=L|R495l7lJ@Kk9Opc7??#T(DvjgR zXzVzFxUh-iJRrZispCvl|7MOe2BVuh&PB)ZIIF0fpyNj^7=(cuw{)D-bm-d3aYC>h zv-)EqX2NEe5j$ZH?1Paw&Rm7z#K$lf-bD7}q-oWc+&1nPuVV1GQ06|hQ2x8GpYgk!NVPQ*gE3H|VA)OeRrC;As=#oV1Z zf32`sCwHagP)Ai2wbJ^iXWSOG!-1F$J*XYc!EjuNI@+&M6P-jo^WRVlxQd$RCaV2D zYM%c(d3at_G99uaV%4N)Db>H4eZ;^-AN|Yk>|r)7>8PDbJRk6qTcpF zsBu=HFRnwK$R^Ci{LV2dnei&>b9o;%pV&^Uk8apcMV?0O@Cv5G+o(tI05yPb4>z9!wa|R10n4JEZB5jP zG`F}P<|Ou@PG&ypW!{MS@JJ8NUlUy?q0i$T)Xtuv@_s#CGog+&1l1mnkys4%DQJW` zp|Qx%FJ}q{;40L(n@}6rgF2}bm>w_m{TVe5f)I7U9R5ZX*)B?_+jx+@`-~-f={%dh)Z+Aga zsDX>22987RuqNu{TA;>jhgw)4)JDfxeiCXP&!?pJ%)~V?D>kuwXViqfQ1cA1{BY&<`5#L~U!ha1!)nwQ z(q`0A|7rQBsDYe;?u6-3Cl-XthoL5jvV0825?4Syfh~JJ=l{0M$PjHE>Rhz-ZJ-)IsgI5o)7tQSU%s)P@HQ z=KR%R90?zsWqMHq%tI|;83yA9)KMQmeS>|A>+mM(5zhI*J%P>UF4Tnku_PYF#`pxa z;JTh6?nKQ{C(sr(VK3BBD31)riGP5PnkBMnB4Qv#K* zh+2TB78On07-O-6b?~AlT8c5a+VW>nM}8SK(KXajKEkxTyO<(UC4k?R+)n!0o7&9>);;8MV;AQ3L#odfCE1bU&_zP$yIim2ZhU`VMAS zOg&lDxWiIop8q&1ns7GibH4_);=@=FPor*lit6Vx+&#)%s1wR>aWPcC@~DN>K)qWn zET4pWhx%YBj=|K=|9mRi*)r7UbR+60PopL{hkCY`Pzy^p!W}3WwZKBC2^(PnOhWaW zgj$dn^@x_DJ_Q?5C%PX!5mbJnqLn^Hy(GRP-34VvJ(|2`G-}`&)H_fCb;MQ7ny6=- zfci9a$DBC9T#DI=ccK<>d?cTLtvrQ!TL* zF6O~Dm>-9t#$9CX>ro5djJkivD4xFtI7C7_J&8J^^QgD`Cg#RxsD%ZOcH_KQpSU7w zf^n$t4=?KFn}-^ADQcp%sEzJGJ?igJCvm|;MHBvw8t66Zh9DLefq76ni^mFB6SdIc zsEIy8y;M_Bk7kL*Yf&fm4XWQ!)B;Xg{;KKulZqyMh}x+$#$8z$>ZL1%dIW7y6AwV` zY?wI?HPH;zLOw;k-RsRmSdjQ4>O_4$at+1^-ajXrijJfXmc$mQ6B%#LL!HbT48vXK zIm|_TAGN~_W8HzXnfX!AI@YX&T4;6D_rN=tTR;EbqoSi3n3~{iMNPCEqj4|lExwAH z@C6pf?Bm?~YGNtkcTtaOB5Fa?P!oDl6D~$QqIK53L+#A({Ev!`_!#Q#y^MOooTZD+8I&4GjU=M1=KcFT!Yw;Z{O#BEnK;Dnt{!ys@Wl$$p2{lmy>V(>201iPd zWQ;ipv+MIegNly!bJQc)f|~dwYQUSQfgWQ<%rf2Wp9htX!9c8w`U-B2+Ie?#AZo#* zQ2oZD9?eYjXl3&)vBEm6M-8wG^=J;E`hAC)@GNS8t5^vC#0bnb!?i4G11(TrXnj#H z;Z)S4T7%_q_Y6M&QB>}c(9vg`=^k+uMiM8YCg_XpaW3}6hp3;1?Pu{9uJTwD|3N+b za{uGDdSycZ9bKG}r?HtZuD?3f16yC+b818j{>-_{967NTSDl&hXk zQIFsP>KUh?cJc)Eh?;-u=3AqVzAuL2M9hIpQO|xm2H`=}yW}}TMH5`cEO^a)WF7qG zy9>#R8Xy;HAq6d83bPVdL=9LU^_I6Z+oRs4uBeUmN9}w9=3{hD%1{kpeEjr`SFhBvn+P|vnh1anW&Rgd0{Dv8@+5G<#7C_ne}lot#5G`zxp& z+(sSUOEW8XhZ7eWm>2hBLA;DQQNQi($2bDjUIXiB&mF0JOJWr= zm(y>D`;8T~)BR?QGwY!q$-5SJL%mdk&5z6(=udu;#VgEBmfve0!T_E5_txQ@c@=Xq zz+H>e?Q-9Z?5KhBp(ZY1aTznttZwb~%oeCmLlWxKG8lDYqp`4_`C2M%@C@oLF239C z*c~x$ps(HbJZ2HIyjcrVKmScE(H=EnFVsK-%n6wK zL(1A$n;TI(+K&2^?6de3MiT#mTHs4F{T}zndk89Dbr0vSN+JpEpp`WYMJ;5!#na6B zsD7(Z6CXxReA3!4qmKG7OpE_n-e<2nUJz=&9A^H#oPTZ-rAWkJB1Yj*EP)GAFWq;j z1^tQ|;Hr5SwV;>Qo}15}`bDDp6-Ipzl(T$oGtq43p`wnhEzu3N^1c{~15gu8vGz5n z{+loa_o8-u1~t(Q^O2eMe{Mb->JdhoB`xoXr=p{5V74?nnZ3-xsGW^Q9r*-vuDQzG zZXUtv^gEBbFULOjtxtUY5Oa#T7uo`uRU!h*O0)&D!xiTs3G z_#deJbJPET8waEAkFdB926#xsT0>RT0ClWGD>E6jvw^6IrdhlQwX<#J_n43P3TmR) zs1x%)=*C%4aj35v6 z+;MB*0^$UZB~nlW+%}(BKJ8I=q710^+-4!nPaKPJ*a{co9Q4QH$6RAk_f<9%%y+RS zc~56ctU?{t7A%EFEPi5f06(L(^Gc`*5>PvAjA?OzMxcNs2k^?23l;cHFuyEa>)E11BidL_#$dUDVBeXRf%7t#;f|h z`t$q~Q!D&pff}%*+0E>04o2NL0t?|})Q&b={=AujVdU>wobd=IT3ZE7xUsm)DNv)sFOR3>Yw4b`$ZLsilb03X-U-m)y%pWNZb%T znz#*>033wsILaK4fyC1=9Ot9@?LrNF&^&{>F9r3}@;0j93-m$X6Rzpdk2nMBhgFsn zoWFJ)PC^5e!CV-JE3i50`{0SS2cC5M1)I6C2JMlUh+QxcH(C2$iw~KnQ9o5LS^H!C zbGUB!mxNXvaLOhyb7N8Rk*I|>!1UM=vttiTJu%cc?_bO3_|eUK z@>5aA@~E%kTBwugj5_*0r~$@Wey+I;wez(Ygqu<0>^D!K?)%l+|F--qEKEMbnbiIs zrz{msTpcxWN7NDbbUQc$O%JNy#}=CUYs%A9vEu*Wft#2-G2?$FZ+4-zM`lTs*5_g z=2D;kHr9}YI)Q!`4^s!?38 z9u-ZTWcD^cFg>WZcnazfY(y>S1Zu!5=1tUucg>fUPye&qKM3`xqAV`^Gv}XrBqa29 zHplwd7qz2ZsP=Eo^Ja>954DhgQT>B1xN$ftE`z$irr8+vv1^Cg@aPMie+-q$B(#%l z<{r#Rd=NFjMe`Qw#>c4suTk%e|1WMFh3a3#;_|44#G4IKC)ggf@R1%W8fd0D4>iFO zi&vut+=#ki4{E@ZsEIFI`~q_lXZY3KVSdzobx;#Fvv>gN{?QhDW>C>Ui_D#;qmh36`yZ8H5<5^Ir|(e{{DbQF z8Z}YmZ?1(=CsfjmGi#ylYl!OK2KBNfp-yff>b?o6elsz>KL3lYVHN7AHd%+0*oycf z7Q@&}?%#$6JZkMJsBv$jmiijYW6YA8e$+&#&0o#ysJHAcY9gPjt^ug=vzU2N3n=Qb4)LfR z*EZXuZWv8O*KgIdrk4Acj6yEPm{ zO?W=FfoF(X=}XiO{cgB72AX+L6Ba|g?R8Q8J6qfbwV}zV3Fl%STxI!#n2q_JQ&e)OEPP7@u zV}EPkfVyv+hl;+Ok6~8)&Af{m(7Ee&%!G;~P!kkK?JyQKQA5kWXLdkMkZkS4EI$_Y z<7$fKJqxX}(mHHJ?Q}b8r$3k%Q9Jny^{mt1a~Bk2Ry6CN7S_z--l&ruX7Nnaf)~57 z$N9nHcxsvt#N%%tcbs zgfXZIt6~*=5A)(Dr~$W_`%ouy9CcDz9=hL*p{Rw1q52mpgNmW{t1_u?MxoRrom`Lw#&}KX$)IR-iuS-=OCC z1&iXH$DDszDxpu@4vDA^-7y4*qb8h%InwZ7u%i~Z@u|DOEvWu`%~Plar=T9yJ=8{C zTRz~KJ6;adIC-DdbDw!63EfZ*_4B_DYT&NOys1BO!5L4`)JHYiOw}KI2b2$O{RNqc z3c0G#bH8rox`;8%SBl~#&Wvrav$fyEmc;2PX=r;$Jl)#%k^9SgwR~{of0h}-EK8~H z!ZxBND5NQL~#x5!>4Ta|1(tWTVil9h2APuP7CsNR;gTJ+WR zEA_Xp5%lZiT~Z;mX=Us2(0Y`k+aT(G*uX|BM4w>F$K+eRHBwo-cL04~QZ~^x(Cb$* z#`Em0UiIizkCA3kzNG|HijjMYK{mpC`tPEYrVOBzrR_J0uB@1WvW)tn)C}*awPm!p zF8Aot`^n|qRM9U@Bk%T#g=)MCg<3t8=e26XAOR++{|H0pXxy&{WgO+1_OE2R{<_LPsQZ*sdilW_{UH&-X> z#cAI|(N&C+hjAh)E2yug{7u_<&Cj2VPH%$dl%CXE(5W!xEcJ@yzGbj2)StgK!5QLl z#4(n;ijnkvbFHD?onWUWhTxy{8E7$oMW$YlJapWsfh>`oiFMVt!K&K?${izDlz0;5 zC}k?SbmY=;Pf@#1{Wg)SNP9Qxf7m!3X>UjQNgeEZpFW;G)?7UN~k9rEyIbb(bAdz zov43G?se+j{EtqF$5HglPkTyL%P+JM75+>6K*|#8Ev&r`@jA-y^wZC(*_8j;J(H*} zqHVtZ%hSe8ypo_l$%2%Gw+8-;{9VdW@`>bEd$Yy|=c>XT_lfk|Ob&cTkE7JT^2W!9 zCif*XflLQ_HN&aIGch-DL;Rg`fU=$PJ$Lz1bls!hR>~SmF!60{M|n=YEqzZ=pGAEI z`gwQ9hvjO@h=H`|xM6d zYa?X~?We8JFye2hSHK7Ke@ob*Oc0B=p@kj z2Jye%SJgs2do&DXFs*m+XB>)W=;g}@%c$=s7fo4DDMG9(iT3}w)ztsIN8Ew74V2^7 z=S}lB#QNXv=z5niYf&FfJyhqFXbtHxnvQKKzfjf_`_t(tzJotf&QX6wd2`*R-(<>C zN~9$}p#DC6)>6hN2E0*?U z)IX#=B>owXrM9@gPoDQC)d=>iw%%&kVfAe`OI|EMsii`DUe4o`^;v6uTHA;Y@kZL- zvAojfDEr8z<-Tl~owy%HQG(olEuAq`ephe1y3+U`xhuGr+zDJksX@_I9#7jO%^0`| zr5f=P^8G3QQ19Y>r)Ie4B()ZlUKCvyDNC%rjrwJJ*T?MS-eVM9&0L&1S;8$Y)` z%I~NCDfwOsxaLyV6;HmnE%Y6{Z}|+=L#S_{PkI|?UK)Liap`CG4@%mNQ;73Z(vT}? zxzvvQM+UpOvL$ZQZ#=m;NB7_2iDM_#q{P*5kBZuu+I3jF@tf;2>iGx~EusI%9;dtm z>I8@QS+9|_oTJX4P|h^(f;usty7Xyctqm}clAm&s5=~nvdVWfoN!*M1!YNg$dnw73 zmh>q?E`s`Y$~;OYa_^9PbNxU)ANe;|3UL|wa8*kE$E$Zq{Af3frsEgXzooT1^`4Zv z)OS%Da?^U^2eeP}j;b5(2_+Nj4&}_F$5~ny(_;+2!cq9<`6$a-NlO3=Lk>1$+8rsg?GGH0kh-n~*w)6%McY}*X7ZcKk5LExb8&Byg{XPFc@x5`q^J88HE>m@ delta 18040 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 NAJSs&(Ibmv{|~9bQw;zB diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index ab3e7cc2a..e72a992b3 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-10 21:21+0800\n" +"POT-Creation-Date: 2020-12-17 14:38+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -95,7 +95,7 @@ msgstr "类型" #: assets/models/domain.py:55 assets/models/group.py:23 #: assets/models/label.py:23 ops/models/adhoc.py:37 orgs/models.py:26 #: perms/models/base.py:56 settings/models.py:32 terminal/models/storage.py:28 -#: terminal/models/storage.py:65 terminal/models/terminal.py:142 +#: terminal/models/storage.py:65 terminal/models/terminal.py:145 #: tickets/models/ticket.py:43 users/models/group.py:16 #: users/models/user.py:528 users/templates/users/user_detail.html:115 #: users/templates/users/user_granted_database_app.html:38 @@ -154,7 +154,7 @@ msgstr "Kubernetes应用" #: assets/serializers/admin_user.py:32 assets/serializers/asset_user.py:47 #: assets/serializers/asset_user.py:84 assets/serializers/system_user.py:191 #: audits/models.py:38 perms/forms/asset_permission.py:89 -#: perms/models/asset_permission.py:92 templates/index.html:82 +#: perms/models/asset_permission.py:94 templates/index.html:82 #: terminal/backends/command/models.py:19 #: terminal/backends/command/serializers.py:13 terminal/models/session.py:39 #: users/templates/users/user_asset_permission.html:40 @@ -342,7 +342,7 @@ msgstr "系统平台" #: assets/models/asset.py:191 assets/serializers/asset_user.py:45 #: assets/serializers/gathered_user.py:20 settings/serializers/settings.py:51 #: tickets/api/request_asset_perm.py:67 -#: tickets/serializers/request_asset_perm.py:25 +#: tickets/serializers/request_asset_perm.py:23 #: users/templates/users/_granted_assets.html:25 #: users/templates/users/user_asset_permission.html:157 msgid "Hostname" @@ -359,7 +359,7 @@ msgid "Protocols" msgstr "协议组" #: assets/models/asset.py:199 assets/models/user.py:98 -#: perms/models/asset_permission.py:93 +#: perms/models/asset_permission.py:95 #: xpack/plugins/change_auth_plan/models.py:56 #: xpack/plugins/gathered_user/models.py:24 msgid "Nodes" @@ -373,7 +373,7 @@ msgstr "激活" #: assets/models/asset.py:203 assets/models/cluster.py:19 #: assets/models/user.py:66 templates/_nav.html:44 -#: xpack/plugins/cloud/models.py:143 xpack/plugins/cloud/serializers.py:115 +#: xpack/plugins/cloud/models.py:143 xpack/plugins/cloud/serializers.py:114 msgid "Admin user" msgstr "管理用户" @@ -565,7 +565,7 @@ msgstr "每行一个命令" #: assets/models/cmd_filter.py:56 audits/models.py:57 #: authentication/templates/authentication/_access_key_modal.html:34 #: perms/forms/asset_permission.py:20 -#: tickets/serializers/request_asset_perm.py:65 +#: tickets/serializers/request_asset_perm.py:63 #: tickets/serializers/ticket.py:30 #: users/templates/users/_granted_assets.html:29 #: users/templates/users/user_asset_permission.html:44 @@ -617,12 +617,12 @@ msgstr "默认资产组" #: audits/models.py:69 audits/serializers.py:81 authentication/models.py:44 #: authentication/models.py:88 orgs/models.py:18 orgs/models.py:396 #: perms/forms/asset_permission.py:83 perms/forms/database_app_permission.py:38 -#: perms/forms/remote_app_permission.py:40 perms/models/asset_permission.py:169 +#: perms/forms/remote_app_permission.py:40 perms/models/asset_permission.py:171 #: perms/models/base.py:49 templates/index.html:78 #: terminal/backends/command/models.py:18 #: terminal/backends/command/serializers.py:12 terminal/models/session.py:37 #: tickets/models/ticket.py:30 tickets/models/ticket.py:136 -#: tickets/serializers/request_asset_perm.py:66 +#: tickets/serializers/request_asset_perm.py:64 #: tickets/serializers/ticket.py:31 users/forms/group.py:15 #: users/models/user.py:159 users/models/user.py:643 #: users/serializers/group.py:20 @@ -650,7 +650,7 @@ msgstr "新节点" msgid "empty" msgstr "空" -#: assets/models/node.py:400 perms/models/asset_permission.py:144 +#: assets/models/node.py:400 perms/models/asset_permission.py:146 msgid "Key" msgstr "键" @@ -658,7 +658,7 @@ msgstr "键" msgid "Full value" msgstr "全称" -#: assets/models/node.py:405 perms/models/asset_permission.py:148 +#: assets/models/node.py:405 perms/models/asset_permission.py:150 msgid "Parent key" msgstr "ssh私钥" @@ -667,7 +667,7 @@ msgstr "ssh私钥" #: users/templates/users/user_asset_permission.html:41 #: users/templates/users/user_asset_permission.html:73 #: users/templates/users/user_asset_permission.html:158 -#: xpack/plugins/cloud/models.py:139 xpack/plugins/cloud/serializers.py:116 +#: xpack/plugins/cloud/models.py:139 xpack/plugins/cloud/serializers.py:115 msgid "Node" msgstr "节点" @@ -733,14 +733,14 @@ msgstr "用户组" #: assets/models/user.py:211 audits/models.py:39 #: perms/forms/asset_permission.py:95 perms/forms/remote_app_permission.py:49 #: perms/models/application_permission.py:22 -#: perms/models/asset_permission.py:94 +#: perms/models/asset_permission.py:96 #: perms/models/database_app_permission.py:22 #: perms/models/k8s_app_permission.py:22 #: perms/models/remote_app_permission.py:16 templates/_nav.html:45 #: terminal/backends/command/models.py:20 #: terminal/backends/command/serializers.py:14 terminal/models/session.py:41 #: tickets/api/request_asset_perm.py:68 -#: tickets/serializers/request_asset_perm.py:27 +#: tickets/serializers/request_asset_perm.py:25 #: users/templates/users/_granted_assets.html:27 #: users/templates/users/user_asset_permission.html:42 #: users/templates/users/user_asset_permission.html:76 @@ -1060,7 +1060,7 @@ msgid "Success" msgstr "成功" #: audits/models.py:43 ops/models/command.py:28 perms/models/base.py:52 -#: terminal/models/session.py:51 tickets/serializers/request_asset_perm.py:29 +#: terminal/models/session.py:51 tickets/serializers/request_asset_perm.py:27 #: xpack/plugins/change_auth_plan/models.py:177 #: xpack/plugins/change_auth_plan/models.py:307 #: xpack/plugins/gathered_user/models.py:76 @@ -1151,7 +1151,7 @@ msgstr "多因子认证" msgid "Reason" msgstr "原因" -#: audits/models.py:106 tickets/serializers/request_asset_perm.py:64 +#: audits/models.py:106 tickets/serializers/request_asset_perm.py:62 #: tickets/serializers/ticket.py:29 xpack/plugins/cloud/models.py:224 #: xpack/plugins/cloud/models.py:282 msgid "Status" @@ -1177,7 +1177,7 @@ msgstr "状态(显示名称)" msgid "MFA for display" msgstr "多因子认证状态(显示名称)" -#: audits/serializers.py:66 audits/serializers.py:78 ops/models/adhoc.py:244 +#: audits/serializers.py:66 audits/serializers.py:78 ops/models/adhoc.py:246 #: terminal/serializers/session.py:34 msgid "Is success" msgstr "是否成功" @@ -1614,6 +1614,10 @@ msgstr "您的请求超时了" msgid "M2M reverse not allowed" msgstr "" +#: common/exceptions.py:41 +msgid "Is referenced by other objects and cannot be deleted" +msgstr "被其他对象关联,不能删除" + #: common/fields/form.py:33 msgid "Not a valid json" msgstr "不是合法json" @@ -1786,46 +1790,46 @@ msgstr "Become" msgid "Create by" msgstr "创建者" -#: ops/models/adhoc.py:237 +#: ops/models/adhoc.py:239 msgid "Task display" msgstr "任务展示" -#: ops/models/adhoc.py:238 +#: ops/models/adhoc.py:240 msgid "Host amount" msgstr "主机数量" -#: ops/models/adhoc.py:240 +#: ops/models/adhoc.py:242 msgid "Start time" msgstr "开始时间" -#: ops/models/adhoc.py:241 +#: ops/models/adhoc.py:243 msgid "End time" msgstr "完成时间" -#: ops/models/adhoc.py:242 xpack/plugins/change_auth_plan/models.py:180 +#: ops/models/adhoc.py:244 xpack/plugins/change_auth_plan/models.py:180 #: xpack/plugins/change_auth_plan/models.py:310 #: xpack/plugins/gathered_user/models.py:79 msgid "Time" msgstr "时间" -#: ops/models/adhoc.py:243 ops/models/command.py:26 +#: ops/models/adhoc.py:245 ops/models/command.py:26 #: terminal/serializers/session.py:38 msgid "Is finished" msgstr "是否完成" -#: ops/models/adhoc.py:245 +#: ops/models/adhoc.py:247 msgid "Adhoc raw result" msgstr "结果" -#: ops/models/adhoc.py:246 +#: ops/models/adhoc.py:248 msgid "Adhoc result summary" msgstr "汇总" -#: ops/models/adhoc.py:286 xpack/plugins/change_auth_plan/utils.py:137 +#: ops/models/adhoc.py:288 xpack/plugins/change_auth_plan/utils.py:137 msgid "{} Start task: {}" msgstr "{} 任务开始: {}" -#: ops/models/adhoc.py:295 xpack/plugins/change_auth_plan/utils.py:149 +#: ops/models/adhoc.py:297 xpack/plugins/change_auth_plan/utils.py:149 msgid "{} Task finish" msgstr "{} 任务结束" @@ -1983,16 +1987,16 @@ msgstr "剪贴板粘贴" msgid "Clipboard copy paste" msgstr "剪贴板复制粘贴" -#: perms/models/asset_permission.py:95 perms/serializers/asset/permission.py:60 +#: perms/models/asset_permission.py:97 perms/serializers/asset/permission.py:60 msgid "Actions" msgstr "动作" -#: perms/models/asset_permission.py:99 templates/_nav.html:78 +#: perms/models/asset_permission.py:101 templates/_nav.html:78 #: users/templates/users/_user_detail_nav_header.html:31 msgid "Asset permission" msgstr "资产授权" -#: perms/models/base.py:53 tickets/serializers/request_asset_perm.py:31 +#: perms/models/base.py:53 tickets/serializers/request_asset_perm.py:29 #: users/models/user.py:533 users/templates/users/user_detail.html:93 #: users/templates/users/user_profile.html:120 msgid "Date expired" @@ -2101,100 +2105,100 @@ msgstr "设置" msgid "Auto" msgstr "自动" -#: settings/utils/ldap.py:389 +#: settings/utils/ldap.py:411 msgid "Host or port is disconnected: {}" msgstr "主机或端口不可连接: {}" -#: settings/utils/ldap.py:391 +#: settings/utils/ldap.py:413 msgid "The port is not the port of the LDAP service: {}" msgstr "端口不是LDAP服务端口: {}" -#: settings/utils/ldap.py:393 +#: settings/utils/ldap.py:415 msgid "Please add certificate: {}" msgstr "请添加证书" -#: settings/utils/ldap.py:395 settings/utils/ldap.py:422 -#: settings/utils/ldap.py:452 settings/utils/ldap.py:480 +#: settings/utils/ldap.py:417 settings/utils/ldap.py:444 +#: settings/utils/ldap.py:474 settings/utils/ldap.py:502 msgid "Unknown error: {}" msgstr "未知错误: {}" -#: settings/utils/ldap.py:409 +#: settings/utils/ldap.py:431 msgid "Bind DN or Password incorrect" msgstr "绑定DN或密码错误" -#: settings/utils/ldap.py:416 +#: settings/utils/ldap.py:438 msgid "Please enter Bind DN: {}" msgstr "请输入绑定DN: {}" -#: settings/utils/ldap.py:418 +#: settings/utils/ldap.py:440 msgid "Please enter Password: {}" msgstr "请输入密码: {}" -#: settings/utils/ldap.py:420 +#: settings/utils/ldap.py:442 msgid "Please enter correct Bind DN and Password: {}" msgstr "请输入正确的绑定DN和密码: {}" -#: settings/utils/ldap.py:438 +#: settings/utils/ldap.py:460 msgid "Invalid User OU or User search filter: {}" msgstr "不合法的用户OU或用户过滤器: {}" -#: settings/utils/ldap.py:469 +#: settings/utils/ldap.py:491 msgid "LDAP User attr map not include: {}" msgstr "LDAP属性映射没有包含: {}" -#: settings/utils/ldap.py:476 +#: settings/utils/ldap.py:498 msgid "LDAP User attr map is not dict" msgstr "LDAP属性映射不合法" -#: settings/utils/ldap.py:495 +#: settings/utils/ldap.py:517 msgid "LDAP authentication is not enabled" msgstr "LDAP认证没有启用" -#: settings/utils/ldap.py:513 +#: settings/utils/ldap.py:535 msgid "Error (Invalid LDAP server): {}" msgstr "错误 (不合法的LDAP服务器地址): {}" -#: settings/utils/ldap.py:515 +#: settings/utils/ldap.py:537 msgid "Error (Invalid Bind DN): {}" msgstr "错误(不合法的绑定DN): {}" -#: settings/utils/ldap.py:517 +#: settings/utils/ldap.py:539 msgid "Error (Invalid LDAP User attr map): {}" msgstr "错误(不合法的LDAP属性映射): {}" -#: settings/utils/ldap.py:519 +#: settings/utils/ldap.py:541 msgid "Error (Invalid User OU or User search filter): {}" msgstr "错误(不合法的用户OU或用户过滤器): {}" -#: settings/utils/ldap.py:521 +#: settings/utils/ldap.py:543 msgid "Error (Not enabled LDAP authentication): {}" msgstr "错误(没有启用LDAP认证): {}" -#: settings/utils/ldap.py:523 +#: settings/utils/ldap.py:545 msgid "Error (Unknown): {}" msgstr "错误(未知): {}" -#: settings/utils/ldap.py:526 +#: settings/utils/ldap.py:548 msgid "Succeed: Match {} s user" msgstr "成功匹配 {} 个用户" -#: settings/utils/ldap.py:559 +#: settings/utils/ldap.py:581 msgid "Authentication failed (configuration incorrect): {}" msgstr "认证失败(配置错误): {}" -#: settings/utils/ldap.py:561 +#: settings/utils/ldap.py:583 msgid "Authentication failed (before login check failed): {}" msgstr "认证失败(登录前检查失败): {}" -#: settings/utils/ldap.py:563 +#: settings/utils/ldap.py:585 msgid "Authentication failed (username or password incorrect): {}" msgstr "认证失败 (用户名或密码不正确): {}" -#: settings/utils/ldap.py:565 +#: settings/utils/ldap.py:587 msgid "Authentication failed (Unknown): {}" msgstr "认证失败: (未知): {}" -#: settings/utils/ldap.py:568 +#: settings/utils/ldap.py:590 msgid "Authentication success: {}" msgstr "认证成功: {}" @@ -2803,27 +2807,27 @@ msgstr "运行时间" msgid "Args" msgstr "参数" -#: terminal/models/terminal.py:132 +#: terminal/models/terminal.py:134 msgid "type" msgstr "类型" -#: terminal/models/terminal.py:133 +#: terminal/models/terminal.py:136 msgid "Remote Address" msgstr "远端地址" -#: terminal/models/terminal.py:134 +#: terminal/models/terminal.py:137 msgid "SSH Port" msgstr "SSH端口" -#: terminal/models/terminal.py:135 +#: terminal/models/terminal.py:138 msgid "HTTP Port" msgstr "HTTP端口" -#: terminal/models/terminal.py:136 +#: terminal/models/terminal.py:139 msgid "Command storage" msgstr "命令存储" -#: terminal/models/terminal.py:137 +#: terminal/models/terminal.py:140 msgid "Replay storage" msgstr "录像存储" @@ -2913,12 +2917,12 @@ msgid "Ticket has %s" msgstr "工单已%s" #: tickets/api/request_asset_perm.py:66 -#: tickets/serializers/request_asset_perm.py:23 +#: tickets/serializers/request_asset_perm.py:21 msgid "IP group" msgstr "IP组" #: tickets/api/request_asset_perm.py:69 -#: tickets/serializers/request_asset_perm.py:35 +#: tickets/serializers/request_asset_perm.py:33 msgid "Confirmed assets" msgstr "确认的资产" @@ -3027,19 +3031,19 @@ msgstr "{} {} 这个工单" msgid "this ticket" msgstr "这个工单" -#: tickets/serializers/request_asset_perm.py:39 +#: tickets/serializers/request_asset_perm.py:37 msgid "Confirmed system user" msgstr "确认的系统用户" -#: tickets/serializers/request_asset_perm.py:88 +#: tickets/serializers/request_asset_perm.py:86 msgid "Invalid `org_id`" msgstr "无效的 `org_id`" -#: tickets/serializers/request_asset_perm.py:97 +#: tickets/serializers/request_asset_perm.py:95 msgid "Field `assignees` must be organization admin or superuser" msgstr "字段 assignees 必须是组织管理员或者超级管理员" -#: tickets/serializers/request_asset_perm.py:147 +#: tickets/serializers/request_asset_perm.py:156 #, python-brace-format msgid "" "\n" @@ -3208,8 +3212,8 @@ msgid "Public key should not be the same as your old one." msgstr "不能和原来的密钥相同" #: users/forms/profile.py:137 users/forms/user.py:90 -#: users/serializers/user.py:192 users/serializers/user.py:274 -#: users/serializers/user.py:332 +#: users/serializers/user.py:192 users/serializers/user.py:277 +#: users/serializers/user.py:335 msgid "Not a valid ssh public key" msgstr "SSH密钥不合法" @@ -3303,7 +3307,7 @@ msgstr "是否可删除" msgid "Organization role name" msgstr "组织角色名称" -#: users/serializers/user.py:78 users/serializers/user.py:245 +#: users/serializers/user.py:78 users/serializers/user.py:248 msgid "Is first login" msgstr "首次登录" @@ -3339,15 +3343,15 @@ msgstr "强制启用多因子认证" msgid "Role limit to {}" msgstr "角色只能为 {}" -#: users/serializers/user.py:124 users/serializers/user.py:298 +#: users/serializers/user.py:124 users/serializers/user.py:301 msgid "Password does not match security rules" msgstr "密码不满足安全规则" -#: users/serializers/user.py:290 +#: users/serializers/user.py:293 msgid "The old password is incorrect" msgstr "旧密码错误" -#: users/serializers/user.py:304 +#: users/serializers/user.py:307 msgid "The newly set password is inconsistent" msgstr "两次密码不一致" @@ -3361,7 +3365,7 @@ msgstr "安全令牌验证" #: users/templates/users/_base_otp.html:14 users/templates/users/_user.html:13 #: users/templates/users/user_profile_update.html:55 -#: xpack/plugins/cloud/models.py:125 xpack/plugins/cloud/serializers.py:114 +#: xpack/plugins/cloud/models.py:125 xpack/plugins/cloud/serializers.py:113 msgid "Account" msgstr "账户" @@ -4308,7 +4312,7 @@ msgstr "实例名称" msgid "Instance name and Partial IP" msgstr "实例名称和部分IP" -#: xpack/plugins/cloud/models.py:128 xpack/plugins/cloud/serializers.py:90 +#: xpack/plugins/cloud/models.py:128 xpack/plugins/cloud/serializers.py:89 msgid "Regions" msgstr "地域" @@ -4320,7 +4324,7 @@ msgstr "实例" msgid "Hostname strategy" msgstr "主机名策略" -#: xpack/plugins/cloud/models.py:147 xpack/plugins/cloud/serializers.py:118 +#: xpack/plugins/cloud/models.py:147 xpack/plugins/cloud/serializers.py:117 msgid "Always update" msgstr "总是更新" @@ -4452,15 +4456,15 @@ msgstr "租户ID" msgid "Subscription ID" msgstr "订阅ID" -#: xpack/plugins/cloud/serializers.py:88 +#: xpack/plugins/cloud/serializers.py:87 msgid "History count" msgstr "执行次数" -#: xpack/plugins/cloud/serializers.py:89 +#: xpack/plugins/cloud/serializers.py:88 msgid "Instance count" msgstr "实例个数" -#: xpack/plugins/cloud/serializers.py:117 +#: xpack/plugins/cloud/serializers.py:116 #: xpack/plugins/gathered_user/serializers.py:20 msgid "Periodic display" msgstr "定时执行"