From b2836b9f4f6f4f9f557d6b05c0a42a3699b5ceca Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Wed, 25 Sep 2019 12:34:12 +0800 Subject: [PATCH 1/7] =?UTF-8?q?[Bugfix]=20=E4=BF=AE=E5=A4=8D=20LDAP=20?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=AF=BC=E5=85=A5=E4=BC=9A=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=88=E5=9C=BA?= =?UTF-8?q?=E6=99=AF=EF=BC=9AAD=20=E7=94=A8=E6=88=B7=E5=9C=A8=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=20OU=20=E4=B8=8B=E9=9D=A2=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/settings/utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/settings/utils.py b/apps/settings/utils.py index 232224dcc..f9fa7ba96 100644 --- a/apps/settings/utils.py +++ b/apps/settings/utils.py @@ -93,6 +93,8 @@ class LDAPUtil: user_item = self._ldap_entry_to_user_item(entry) user = self.get_user_by_username(user_item['username']) user_item['existing'] = bool(user) + if user_item in user_items: + continue user_items.append(user_item) return user_items From d3d72f85fdbfb44a4d689aa32c4da50b6de54f95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E5=B9=BF?= Date: Wed, 25 Sep 2019 14:40:19 +0800 Subject: [PATCH 2/7] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E7=9A=84=E5=8F=82=E6=95=B0=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?inventory=E5=8F=82=E6=95=B0=E5=90=8D=E7=A7=B0=20(#3276)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/jumpserver/views.py | 2 +- apps/locale/zh/LC_MESSAGES/django.mo | Bin 80637 -> 80611 bytes apps/locale/zh/LC_MESSAGES/django.po | 23 +++++++++++------------ apps/ops/inventory.py | 4 ++-- apps/terminal/views/terminal.py | 2 +- jms | 6 +++++- 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/apps/jumpserver/views.py b/apps/jumpserver/views.py index 06eb7feb5..f3365b7ff 100644 --- a/apps/jumpserver/views.py +++ b/apps/jumpserver/views.py @@ -190,7 +190,7 @@ class IndexView(PermissionsMixin, TemplateView): class LunaView(View): def get(self, request): - msg = _("
Luna is a separately deployed program, you need to deploy Luna, coco, configure nginx for url distribution,
" + msg = _("
Luna is a separately deployed program, you need to deploy Luna, koko, configure nginx for url distribution,
" "If you see this page, prove that you are not accessing the nginx listening port. Good luck.") return HttpResponse(msg) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 753a9332772aee0360657f914f96f4aa613c9b53..0708229e95664711bd7d6f0c8ed519bbd6f71c75 100644 GIT binary patch delta 8553 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 delta 8579 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\n" "Language-Team: Jumpserver team\n" @@ -620,7 +620,7 @@ msgid "Domain" msgstr "网域" #: assets/forms/asset.py:68 assets/forms/asset.py:103 assets/forms/asset.py:116 -#: assets/forms/asset.py:153 assets/models/node.py:403 +#: assets/forms/asset.py:153 assets/models/node.py:413 #: assets/templates/assets/asset_create.html:42 #: perms/forms/asset_permission.py:82 perms/forms/asset_permission.py:89 #: perms/templates/perms/asset_permission_list.html:53 @@ -1107,7 +1107,7 @@ msgstr "默认资产组" msgid "User" msgstr "用户" -#: assets/models/label.py:19 assets/models/node.py:394 +#: assets/models/label.py:19 assets/models/node.py:404 #: assets/templates/assets/label_list.html:15 settings/models.py:30 msgid "Value" msgstr "值" @@ -1116,19 +1116,19 @@ msgstr "值" msgid "Category" msgstr "分类" -#: assets/models/node.py:230 +#: assets/models/node.py:163 msgid "New node" msgstr "新节点" -#: assets/models/node.py:318 +#: assets/models/node.py:328 msgid "ungrouped" msgstr "未分组" -#: assets/models/node.py:320 +#: assets/models/node.py:330 msgid "empty" msgstr "空" -#: assets/models/node.py:393 +#: assets/models/node.py:403 msgid "Key" msgstr "键" @@ -1182,7 +1182,7 @@ msgstr "Shell" msgid "Login mode" msgstr "登录模式" -#: assets/models/user.py:168 assets/templates/assets/user_asset_list.html:52 +#: assets/models/user.py:162 assets/templates/assets/user_asset_list.html:52 #: audits/models.py:20 audits/templates/audits/ftp_log_list.html:52 #: audits/templates/audits/ftp_log_list.html:75 #: perms/forms/asset_permission.py:85 perms/forms/remote_app_permission.py:40 @@ -2733,13 +2733,12 @@ msgstr "仪表盘" #: jumpserver/views.py:193 msgid "" -"
Luna is a separately deployed program, you need to deploy Luna, coco, " +"
Luna is a separately deployed program, you need to deploy Luna, koko, " "configure nginx for url distribution,
If you see this page, " "prove that you are not accessing the nginx listening port. Good luck." msgstr "" -"
Luna是单独部署的一个程序,你需要部署luna,coco,配置nginx做url分发,
如果你看到了这个页面,证明你访问的不是nginx监听的端口,祝你好运" +"
Luna是单独部署的一个程序,你需要部署luna,koko,
如果你看到了" +"这个页面,证明你访问的不是nginx监听的端口,祝你好运
" #: ops/api/celery.py:54 msgid "Waiting task start" diff --git a/apps/ops/inventory.py b/apps/ops/inventory.py index 694957b14..ffd7e8619 100644 --- a/apps/ops/inventory.py +++ b/apps/ops/inventory.py @@ -15,7 +15,7 @@ logger = get_logger(__file__) class JMSBaseInventory(BaseInventory): - windows_ssh_default_ssh = settings.WINDOWS_SSH_DEFAULT_SHELL + windows_ssh_default_shell = settings.WINDOWS_SSH_DEFAULT_SHELL def convert_to_ansible(self, asset, run_as_admin=False): info = { @@ -35,7 +35,7 @@ class JMSBaseInventory(BaseInventory): if asset.is_windows(): info["vars"].update({ "ansible_connection": "ssh", - "ansible_shell_type": self.windows_ssh_default_ssh, + "ansible_shell_type": self.windows_ssh_default_shell, }) for label in asset.labels.all(): info["vars"].update({ diff --git a/apps/terminal/views/terminal.py b/apps/terminal/views/terminal.py index 6396094ab..56e3a4dc9 100644 --- a/apps/terminal/views/terminal.py +++ b/apps/terminal/views/terminal.py @@ -135,4 +135,4 @@ class WebTerminalView(View): class WebSFTPView(View): def get(self, request, *args, **kwargs): - return redirect('/coco/elfinder/sftp/?' + request.GET.urlencode()) + return redirect('/koko/elfinder/sftp/?' + request.GET.urlencode()) diff --git a/jms b/jms index 805faac50..d67c2fa35 100755 --- a/jms +++ b/jms @@ -205,6 +205,10 @@ def parse_service(s): ] if s == 'all': return all_services + elif s == "web": + return ['gunicorn', 'flower'] + elif s == "task": + return ["celery_ansible", "celery_default", "beat"] elif s == 'gunicorn': return ['gunicorn', 'flower'] elif s == "celery": @@ -474,7 +478,7 @@ if __name__ == '__main__': ) parser.add_argument( "service", type=str, default="all", nargs="?", - choices=("all", "gunicorn", "celery", "beat", "celery,beat", "flower"), + choices=("all", "web", "task", "gunicorn", "celery", "beat", "celery,beat", "flower"), help="The service to start", ) parser.add_argument('-d', '--daemon', nargs="?", const=1) From 26ef7b7be3e923f974a46883a86e786cf02a28fd Mon Sep 17 00:00:00 2001 From: BaiJiangJie <32935519+BaiJiangJie@users.noreply.github.com> Date: Wed, 25 Sep 2019 15:14:43 +0800 Subject: [PATCH 3/7] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E8=B5=84?= =?UTF-8?q?=E4=BA=A7=E4=B8=BB=E6=9C=BA=E5=90=8D=E5=85=81=E8=AE=B8=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E4=B8=AD=E6=96=87=20(#3278)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Update] 修改资产主机名允许输入中文 * [Update] 修改资产主机名允许输入中文2 --- apps/assets/forms/asset.py | 10 +++++--- apps/assets/serializers/asset.py | 2 +- apps/locale/zh/LC_MESSAGES/django.mo | Bin 80611 -> 80631 bytes apps/locale/zh/LC_MESSAGES/django.po | 36 +++++++++++++-------------- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/apps/assets/forms/asset.py b/apps/assets/forms/asset.py index 62f9748be..d83172373 100644 --- a/apps/assets/forms/asset.py +++ b/apps/assets/forms/asset.py @@ -14,6 +14,10 @@ __all__ = [ 'AssetCreateForm', 'AssetUpdateForm', 'AssetBulkUpdateForm', 'ProtocolForm', ] +HELP_TEXTS_ASSET_HOSTNAME = _( + 'Only Numbers、letters、 chinese and characters ( {} ) are allowed' +).format(" ".join(['.', '_', '@'])) + class ProtocolForm(forms.Form): name = forms.ChoiceField( @@ -68,8 +72,7 @@ class AssetCreateForm(OrgModelForm): 'nodes': _("Node"), } help_texts = { - 'hostname': _('Only Numbers, letters, and characters ( {} ) ' - 'are allowed').format(" ".join(['.', '_', '@'])), + 'hostname': HELP_TEXTS_ASSET_HOSTNAME, 'admin_user': _( 'root or other NOPASSWD sudo privilege user existed in asset,' 'If asset is windows or other set any one, more see admin user left menu' @@ -116,8 +119,7 @@ class AssetUpdateForm(OrgModelForm): 'nodes': _("Node"), } help_texts = { - 'hostname': _('Only Numbers, letters, and characters ( {} ) ' - 'are allowed').format(" ".join(['.', '_', '@'])), + 'hostname': HELP_TEXTS_ASSET_HOSTNAME, 'admin_user': _( 'root or other NOPASSWD sudo privilege user existed in asset,' 'If asset is windows or other set any one, more see admin user left menu' diff --git a/apps/assets/serializers/asset.py b/apps/assets/serializers/asset.py index f9f099ba8..008816ee5 100644 --- a/apps/assets/serializers/asset.py +++ b/apps/assets/serializers/asset.py @@ -94,7 +94,7 @@ class AssetSerializer(BulkOrgResourceModelSerializer): @staticmethod def validate_hostname(hostname): - pattern = r"^[\._@a-zA-Z0-9-]+$" + pattern = r"^[\._@a-zA-Z0-9-\u4e00-\u9fa5]+$" res = re.match(pattern, hostname) if res is None: msg = _("* The hostname contains characters that are not allowed") diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 0708229e95664711bd7d6f0c8ed519bbd6f71c75..6701de0ac2621b371c3748dafa2296f05bdc7fd0 100644 GIT binary patch delta 13043 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 delta 13023 zcmXZid4SK={>SmpjAiWmmeF8@F-`V0%D%=`VMtn-OOfbWDqZ#I>ZV-!-HWnDja=DV z$P!tqiz3R>4W&XV`+AEkzvt_FUVlB#`+d&mocB4OWyaKRm+~IDl=t1CrQ)Vh6pfu8 zMGf!+Ou=8VFrLHGcnu3+$r(|U2P>k+rC}+ofd#P{>bkaA2)m=M>uYnc2=P!XieqL( zag>k7OC<8+E2s-!MP2v?7Q=;D2Unvm{25i)C0lT26qP5w8Ear8tbqNn1dg`ju{iN` z)cCh&#_Wp5MiS}x6;{EEsD;bUilW+h3u;^sI}kO|Q<#b`*|$(9v(auvZDbd!kZ({M z{?(p|X(V=ns<`0naFpq&3$w5yHo~%aH|od-VM`o?HE}K8f!3C= z0Q2HxRH5-S8d_+seH(Se@1pMI2GqdMQ9Is^8h;qe;R&pS$#X*Cl~Mh*9M?zP(iW)e zJE98ejhtv4{ey-odL7GPF5Zi)P&+C(H;O7_ZPYXJC)7jK%ML&t>2TCTI2tuBMxE$* z)CS%_-GaAKC%Pul&;8#+LzSIGO>`ACLGl~no)<(-km|S^s=pEH8EJt!sk=}G^hV9s zAGP3LP~*m-Zrx8n^B=Q#cZwc{PA6Z;lb=n1TX z=N*@x9}2378lQ#QaSPO~?S|UeBhHVCY3Tib5jF8lRD}ysJ6`2@v-@|UCOm{Xi8H7P z|G-Qv@b55B1Jt~2P`4%=@?kr|G}J?ygZgyF zsFRzHDmWMQ9e4-zw(LM{Xs{freHf%VO<^HhwAT- z`EUrT&?iuZj7IG&#{4+Z@f6f|U@q$9R-;aK8|LTvi}uja#0L@yPQo5X4Lpac_$sDg zk%eK$Wl(WCYNwf)fz42b4M3gDBdDVuZC^%xfM#QP){j=v&`x)vc5)C^=})Mq`+uk% z6<8EbsyON>tD){~Gt|y|qsHf87aZ+)6RLpScmaPx&A)#!r=^9D)6hyw!0d)b)2de-~=vUa0v7x&JSylXwnw>n5Q#Fl7nnugVsZ&;sjFNBt@4 zg1x8-52F^ofEs@dwbK$y!|RuhI`Xzy6FWKogq@7~z`c)p7Cu8gtcRC!{#x(`30Ztu zurg{u9c+YMQ45a4bbJ-{DP4^jxC5)=B~$_Bmq*b9*b)ch9BhLr?}WFh3+noR#x(ev zM)UD$?C@^*_HV>$#E0-hOnxt1@DcVS-i@QM&imXBoR4}IzC^vIr?E2@S`kIu)u<=d zz#FI!QH_=1A>ms7>O2)K30kSD<$CEjGctAMl`I3sn3h>givOI{H;3ObBk|J@3o~GXea+@#G4jh$J6(^- zxEb@{r>N_;pnP)?vG&c7jCUlvtBO)P~CF%3Inc^rhXcK#fVqWBtW!naTpu62Gd zYU0DF3D03BUPl#HYh!q88lpDP4z+>1ogaWIcm!6#|HCr)&PL8(PvfT~RN*1i1m{o{ zUc=&8c2me#M@?K0m2Zn0-vf2z57|es1@Umy$u7mma20Cd^v&T`HrX7930jcQ33Ni8 zKsIW}Ls1j|6?GynpmsbLHGUBe#MO8!-u!X+)v7aU++R@zjz`Tm1@%zoq8`S5F%1p; z6?JbfqIQ_?lkk+5NA0vOYNA$-yQ0ST!%p}(YNxAEg>6C=v=gi06;yxPr{SbCP#cPy z)6jz1sEQs%eTv7TZo!L~hI3Hg?)9h>`WRc{H>mLy{u2tViW*nXHbFhacc4zP9qJ^y zBJ0J`{WLVeaMZ)~G-{_WqAH$@d2u%C-o1%>RzAR7+=lPrkS$?crLAF}svH2Nm@~ z?RXzPkQ_y~f5ksQiD&HLvy7$ovKf30H*$TCeLQ$r`oB@Ml6+appw7Qqy zlhBcz$HMp<>Y2!MAQV;vb%bfQA?jqhpvDcsOdN?>I2Y^UcIU6+&BQeihM$7%u_E!% zgKVn`jhEc95H)ZYK98rcJr4Ue9N|h_LA(Kr;)w5jl=ccYd0&pW*qscf@Q3pcZ^Y)AVi)CPK?Ht?->SYTTFhDC*hy9rLq(l>ca`tf(!6nlRO7*haPu z>eh5e?c^cU$qaV?6#ItrOC9gChfy0lgNfh&i~STHqEytaXlOe+-`DX-J04ZwOuGP8 z&?={&i@Om63=nG z5mmqr%#SDRdDQ%uZT_D_f9an&e+{hYL{-$l4BN=IaesHz4zh6+_I3X*`z@-#Ur}GU ztEdlD$}iz{D`9J()@c#b&{1@@J>2mCYN8>i_xoAL(;P2C74k9a`YrZLd%zyGr%@aI z-SG`#P`7d;HpZi<1yhd)(^2DU zq2_B4@^RG4iH;!=^~4$sxF3h%IQO4J6>!~g$rGW_G}M=@wrz(R*B4dj9&sZEgW}u+|TiFJN7j1zn<<1B;-5~T;~Bh z?LkyQzu3HI!ckX2i8} z3u=Nh_Npy-Hss5pPOO@3?0jd`2D2Rxw_{^BCZHCW=6H_d#aNX5dsrMdI=>55$k+CW zJ!`L_<|}kASQ2LvS8)73>iT%C8(ZA52er@v$H(1&&R$0ydExWHny4SIZE+Spi<-E? zg|KjSn}y0ZK+WGO#Bp>t4gFYs0QK*7wwHyoF`7#3)2yV!fMB;)&_ zel`q2%`*vAz#FJ9=Tc1k{qJ2GB}lABJw)3Q9sG#}b-{ke$FLglDd$UG3ggqTJNXRE zz^5@2b5Ymtu=`QB{}%>UKuu8DaTaQ44N!%)cfLDnT(;vJ$3sx# zp0a;)|3o_lV^uVhhMvwh-LV!m;U@b9)+9cF`o<^!7W!-2hNyem+VMT8c^`B<5H+q7eh>9Q zTZ7CKM_WQ8+GBq}Rdx!sMi;UCf@%SXlTNJ*y*SV=i^Pd+WD`XKjiov>Rw+*6;eJ*O2lcX`I?~e?NG1bU8q~u z%MQe{F^SP?;6&8Ixu}U(+Ao|xhMM>?YQp?UVSy4@k+{6$`lxZuYzNebsfXjSsOu+S zT!6+@cf4*Fp$b{$_%r*pJz~$IzMR)=vE;CDWz_Xqs4rnl)F*ccYWy%8Cnv>;O8!Mc zM>7lca4g2gxCT|}8PtWBu{svY6XLq4owY{ocnFrpr%*>f(N1yyOvelCvOIC9bR`K@ zywx5+6?Dp8LrqvTZx~kwb<1j^Zq*$&+YYxcqYBGK&A;67X4HH;V;cIj?nCYLnoY?U z;*wa7d@AY)>!T)YjBT(j>XSU)`6Z}@)}S`99aZ2#dl3^G$saZlm!Y8vGf^E)?478I z+M|xXkK@7Eg?KFLx~+Dv{Sj-BKkc||N|+}dRZt_x?UC!_s847_1F;DMMqo=^j4J53 z`_I|ysFNyOAQVs*H7*@fu@-8f_O=(Q(1CV@jWO~5PjX^vBEe5V`?g(fKR}(xderX$ zyHFEfuu;L#Uldh96;wfWo$rbo{}Aey3{|Z6|3w;lYNwzsT!4DGR-wLpJ5U#%MqT)a z<1&T9_^PP>dZ-2Ow0%)0^Q3(iHSX_rGA920Ki316xZ{1)PB%KHtO|Vhj+VO>j5rx10yC z7EVF^(y`udwY%+isFV2xRoL&SHzT=ph%;<`+X8hW9q?w1yE*X~s(=wTwv$jhpXqq1 zwJ?@CoN%z;?v1yZ=YjLZ=;H zcU-t^SU43mUphXD%^lCTA7SEFVL^UuL`R%Bg{u6DAa4fA3Ss*p!fJ0ERdMin&Mu0)Od!X7}4|Jhza6;!lB z$d^HluZfzcVFliQCAxV)U+hi%xa0rWZ;(G1L?;}7cT^@A-V zrlA2{P(LQ_LH(3?#?C<<)h4?iweWdV;l(S3qpgH0xQ^pHF)<(N$J;Yl87E@m$Cmr! z&uM7E3r>`~IVtgfKeWVV@s!v|6MOQ=G-RSph9^~b0J%2f%U z?wWWT@q@?-#L*-gdia*3enI^dTi`()i504bUq&XOZpA{>L$(IB;C9DH-TxbEo|N>Y z#DCCE!}i3FpnkVlhI(f9VdB@e?`dd9$8b1a!2e)QwQ$t6Zb?e~-KYa*k$(#H8}oeZ zfInj+tX(~cf0FSZHt`Pp5Oo5-V^92NjihJ*9>x2xW6h+fuipP$8eQ=!_QB2>Nr^wp z&a;P5JFZwODe)h!Z$tgVvyJVEdWHs}HuAWA#=hkKS5Y6J*{FX4Q?T_ljsOw_XGc*bHi|ah+H`wj=8`Q)8lj8zee*ep6g^AK_ z9oqu6U}x0B*3bFTj>oxww)4wT58pb+yY2U=jhu9R)fS9z3rASaR>4*b%tYOa$FK*E zKozpZ`Th0>)Cv6T{)?!EQfh}^Tg#(vQ5Dp^&qTeBb@4fjThnMtW0Sp%ny`MIU`y15 zUGaA8hbm+`YU0K2Uui!@-HN@AkE6z2ah$hqn6C`-ec?ab(a?eq+Q(2Ih^JAX$OX=C zLlv?QwZKn~|FDJYg@sa41y)D>hSL-^f41{E*p~Q7OuYXe(olt)QLn{z)CIeo{}y#C zjyZqIUU5F9e&{b|%i2n|8mjP2RAIN{80?0z-v6yMv~b4;p^&>!1@uBKJOJzBV62X_ z@K)S}eeont#*Ph>qOG_eAHdv3;R|>J^+oN}IIQy`>Vq@^W4$hiXz0kVpeoF05?-U` zsJJ((pdqM&p2BiT{M!gy62I0oOt=rVk<4bHu-d4Toq(EWs$GDZZ*8-rKP8T43yB#d zzD8Xz{PyrK<1wgs4r=1JQ3WhPP4GVIAG{k;N4#gnqIPYQlkZAiak|4Zd6W4M$wTfM zP&B!G-l;qLoK8NJXT^s5KEI<-R+XUxM~xadVr15eIn&2A$=mSu`ps5U+cmst;WO(e V{j_ZQv3FiMvwro0l%#ta{6A`SXypI^ diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index b5e92d498..5c9d8c4bd 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: 2019-09-25 14:29+0800\n" +"POT-Creation-Date: 2019-09-25 15:11+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -112,7 +112,7 @@ msgstr "资产" #: applications/templates/applications/remote_app_detail.html:53 #: applications/templates/applications/remote_app_list.html:20 #: applications/templates/applications/user_remote_app_list.html:16 -#: assets/forms/asset.py:20 assets/forms/domain.py:73 assets/forms/user.py:74 +#: assets/forms/asset.py:24 assets/forms/domain.py:73 assets/forms/user.py:74 #: assets/forms/user.py:94 assets/models/base.py:28 assets/models/cluster.py:18 #: assets/models/cmd_filter.py:20 assets/models/domain.py:20 #: assets/models/group.py:20 assets/models/label.py:18 @@ -576,14 +576,18 @@ msgstr "更新节点资产硬件信息: {}" msgid "Test if the assets under the node are connectable: {}" msgstr "测试节点下资产是否可连接: {}" -#: assets/forms/asset.py:24 assets/models/asset.py:140 +#: assets/forms/asset.py:18 +msgid "Only Numbers、letters、 chinese and characters ( {} ) are allowed" +msgstr "只允许包含数字、字母、中文和特殊字符( {} )" + +#: assets/forms/asset.py:28 assets/models/asset.py:140 #: assets/models/domain.py:50 #: assets/templates/assets/domain_gateway_list.html:69 #: settings/templates/settings/replay_storage_create.html:59 msgid "Port" msgstr "端口" -#: assets/forms/asset.py:55 assets/models/asset.py:145 +#: assets/forms/asset.py:59 assets/models/asset.py:145 #: assets/models/user.py:110 assets/templates/assets/asset_detail.html:190 #: assets/templates/assets/asset_detail.html:198 #: assets/templates/assets/system_user_assets.html:83 @@ -594,7 +598,7 @@ msgstr "端口" msgid "Nodes" msgstr "节点" -#: assets/forms/asset.py:58 assets/forms/asset.py:106 +#: assets/forms/asset.py:62 assets/forms/asset.py:109 #: assets/models/asset.py:149 assets/models/cluster.py:19 #: assets/models/user.py:68 assets/templates/assets/asset_detail.html:76 #: templates/_nav.html:44 xpack/plugins/cloud/models.py:161 @@ -603,7 +607,7 @@ msgstr "节点" msgid "Admin user" msgstr "管理用户" -#: assets/forms/asset.py:61 assets/forms/asset.py:109 assets/forms/asset.py:150 +#: assets/forms/asset.py:65 assets/forms/asset.py:112 assets/forms/asset.py:152 #: assets/templates/assets/asset_create.html:48 #: assets/templates/assets/asset_create.html:50 #: assets/templates/assets/asset_list.html:85 @@ -611,7 +615,7 @@ msgstr "管理用户" msgid "Label" msgstr "标签" -#: assets/forms/asset.py:64 assets/forms/asset.py:112 +#: assets/forms/asset.py:68 assets/forms/asset.py:115 #: assets/models/asset.py:144 assets/models/domain.py:26 #: assets/models/domain.py:52 assets/templates/assets/asset_detail.html:80 #: assets/templates/assets/user_asset_list.html:53 @@ -619,8 +623,8 @@ msgstr "标签" msgid "Domain" msgstr "网域" -#: assets/forms/asset.py:68 assets/forms/asset.py:103 assets/forms/asset.py:116 -#: assets/forms/asset.py:153 assets/models/node.py:413 +#: assets/forms/asset.py:72 assets/forms/asset.py:106 assets/forms/asset.py:119 +#: assets/forms/asset.py:155 assets/models/node.py:413 #: assets/templates/assets/asset_create.html:42 #: perms/forms/asset_permission.py:82 perms/forms/asset_permission.py:89 #: perms/templates/perms/asset_permission_list.html:53 @@ -635,11 +639,7 @@ msgstr "网域" msgid "Node" msgstr "节点" -#: assets/forms/asset.py:71 assets/forms/asset.py:119 -msgid "Only Numbers, letters, and characters ( {} ) are allowed" -msgstr "只允许包含数字,字母,特殊字符( {} )" - -#: assets/forms/asset.py:74 assets/forms/asset.py:122 +#: assets/forms/asset.py:77 assets/forms/asset.py:124 msgid "" "root or other NOPASSWD sudo privilege user existed in asset,If asset is " "windows or other set any one, more see admin user left menu" @@ -647,16 +647,16 @@ msgstr "" "root或其他拥有NOPASSWD: ALL权限的用户, 如果是windows或其它硬件可以随意设置一" "个, 更多信息查看左侧 `管理用户` 菜单" -#: assets/forms/asset.py:77 assets/forms/asset.py:125 +#: assets/forms/asset.py:80 assets/forms/asset.py:127 msgid "Windows 2016 RDP protocol is different, If is window 2016, set it" msgstr "Windows 2016的RDP协议与之前不同,如果是请设置" -#: assets/forms/asset.py:78 assets/forms/asset.py:126 +#: assets/forms/asset.py:81 assets/forms/asset.py:128 msgid "" "If your have some network not connect with each other, you can set domain" msgstr "如果有多个的互相隔离的网络,设置资产属于的网域,使用网域网关跳转登录" -#: assets/forms/asset.py:133 assets/forms/asset.py:137 +#: assets/forms/asset.py:135 assets/forms/asset.py:139 #: assets/forms/domain.py:17 assets/forms/label.py:15 #: perms/templates/perms/asset_permission_asset.html:78 #: xpack/plugins/change_auth_plan/forms.py:55 @@ -3915,7 +3915,7 @@ msgstr "您确定删除吗?" msgid "Search no entry matched in ou {}" msgstr "在ou:{}中没有匹配条目" -#: settings/utils.py:120 +#: settings/utils.py:122 msgid "The user source is not LDAP" msgstr "用户来源不是LDAP" From d7bc8516ff6a6ded5e4abcb7e1005c72e50683ae Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Wed, 25 Sep 2019 15:29:59 +0800 Subject: [PATCH 4/7] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E8=B5=84?= =?UTF-8?q?=E4=BA=A7=E4=B8=BB=E6=9C=BA=E5=90=8D=E5=85=81=E8=AE=B8=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E4=B8=AD=E6=96=873?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/asset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/assets/serializers/asset.py b/apps/assets/serializers/asset.py index 008816ee5..c53b3057d 100644 --- a/apps/assets/serializers/asset.py +++ b/apps/assets/serializers/asset.py @@ -94,7 +94,7 @@ class AssetSerializer(BulkOrgResourceModelSerializer): @staticmethod def validate_hostname(hostname): - pattern = r"^[\._@a-zA-Z0-9-\u4e00-\u9fa5]+$" + pattern = r"^[\._@\w-]+$" res = re.match(pattern, hostname) if res is None: msg = _("* The hostname contains characters that are not allowed") From 9f56ac8a214a4c2289b7647d9f374b4bd754abe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E5=B9=BF?= Date: Wed, 25 Sep 2019 16:31:18 +0800 Subject: [PATCH 5/7] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E5=AF=BC=E8=87=B4=E7=9A=84=E6=A0=91=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20(#3280)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/utils.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/assets/utils.py b/apps/assets/utils.py index 6e5952ff8..305bcbf36 100644 --- a/apps/assets/utils.py +++ b/apps/assets/utils.py @@ -26,10 +26,6 @@ def get_system_user_by_id(id): class TreeService(Tree): tag_sep = ' / ' - cache_key = '_NODE_FULL_TREE' - cache_time = 3600 - has_empty_node = False - has_ungrouped_node = False def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -43,13 +39,17 @@ class TreeService(Tree): from orgs.utils import tmp_to_root_org with tmp_to_root_org(): - all_nodes = Node.objects.all() + all_nodes = list(Node.objects.all().values("key", "value")) + all_nodes.sort(key=lambda x: len(x["key"].split(":"))) tree = cls() tree.create_node(tag='', identifier='') for node in all_nodes: + key = node["key"] + value = node["value"] + parent_key = ":".join(key.split(":")[:-1]) tree.create_node( - tag=node.value, identifier=node.key, - parent=node.parent_key, + tag=value, identifier=key, + parent=parent_key, ) tree.init_assets() return tree From 118fc8c42fdbaea53d47d1f234a5c6ff71f71f9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E5=B9=BF?= Date: Wed, 25 Sep 2019 16:31:58 +0800 Subject: [PATCH 6/7] Dev beta (#3281) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Update] 修改发送command日志 * [Update] 修复用户树显示资产数量不对的bug --- apps/assets/models/node.py | 4 ---- apps/audits/serializers.py | 1 + apps/audits/signals_handler.py | 6 +++++- apps/common/utils/common.py | 2 +- apps/jumpserver/settings.py | 2 +- apps/perms/api/user_permission/mixin.py | 2 +- apps/terminal/models.py | 10 ++++++++++ 7 files changed, 19 insertions(+), 8 deletions(-) diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py index 46e06c63e..d1628be76 100644 --- a/apps/assets/models/node.py +++ b/apps/assets/models/node.py @@ -257,10 +257,6 @@ class NodeAssetsMixin: @lazyproperty def assets_amount(self): - """ - 获取节点下所有资产数量速度太慢,所以需要重写,使用cache等方案 - :return: - """ amount = self.tree().assets_amount(self.key) return amount diff --git a/apps/audits/serializers.py b/apps/audits/serializers.py index 70b69b880..7dcd94d73 100644 --- a/apps/audits/serializers.py +++ b/apps/audits/serializers.py @@ -36,3 +36,4 @@ class SessionAuditSerializer(serializers.ModelSerializer): class Meta: model = Session fields = '__all__' + diff --git a/apps/audits/signals_handler.py b/apps/audits/signals_handler.py index cb87e2b9e..0f201b464 100644 --- a/apps/audits/signals_handler.py +++ b/apps/audits/signals_handler.py @@ -9,7 +9,8 @@ from rest_framework.renderers import JSONRenderer from jumpserver.utils import current_request from common.utils import get_request_ip, get_logger, get_syslogger from users.models import User -from terminal.models import Session +from terminal.models import Session, Command +from terminal.backends.command.serializers import SessionCommandSerializer from . import models from . import serializers @@ -88,6 +89,9 @@ def on_audits_log_create(sender, instance=None, **kwargs): elif sender == Session: category = "host_session_log" serializer = serializers.SessionAuditSerializer + elif sender == Command: + category = "session_command_log" + serializer = SessionCommandSerializer else: return diff --git a/apps/common/utils/common.py b/apps/common/utils/common.py index 667f166b3..f17125435 100644 --- a/apps/common/utils/common.py +++ b/apps/common/utils/common.py @@ -225,4 +225,4 @@ class lazyproperty: else: value = self.func(instance) setattr(instance, self.func.__name__, value) - return value \ No newline at end of file + return value diff --git a/apps/jumpserver/settings.py b/apps/jumpserver/settings.py index dd3fb170f..d726b4bcb 100644 --- a/apps/jumpserver/settings.py +++ b/apps/jumpserver/settings.py @@ -286,7 +286,7 @@ LOGGING = { 'handlers': ['console', 'file'], 'level': "INFO", }, - 'jms_audits': { + 'jms.audits': { 'handlers': ['syslog'], 'level': 'INFO' }, diff --git a/apps/perms/api/user_permission/mixin.py b/apps/perms/api/user_permission/mixin.py index a25e49251..8d65a884c 100644 --- a/apps/perms/api/user_permission/mixin.py +++ b/apps/perms/api/user_permission/mixin.py @@ -36,7 +36,7 @@ class UserNodeTreeMixin: assets_amount = self.tree.assets_amount(node.key) if assets_amount == 0 and node.key != Node.empty_key: continue - node._assets_amount = assets_amount + node.assets_amount = assets_amount data = ParserNode.parse_node_to_tree_node(node) _queryset.append(data) return _queryset diff --git a/apps/terminal/models.py b/apps/terminal/models.py index 8cfd5ef87..f7f2994ed 100644 --- a/apps/terminal/models.py +++ b/apps/terminal/models.py @@ -4,6 +4,7 @@ import os import uuid from django.db import models +from django.db.models.signals import post_save from django.utils.translation import ugettext_lazy as _ from django.utils import timezone from django.conf import settings @@ -267,7 +268,16 @@ class Task(models.Model): db_table = "terminal_task" +class CommandManager(models.Manager): + def bulk_create(self, objs, **kwargs): + resp = super().bulk_create(objs, **kwargs) + for i in objs: + post_save.send(i.__class__, instance=i, created=True) + return resp + + class Command(AbstractSessionCommand): + objects = CommandManager() class Meta: db_table = "terminal_command" From 3c12c33911b7a97a8125d1e8cf6b7c3cc3fb5675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AB=E5=8D=83=E6=B5=81?= <40739051+jym503558564@users.noreply.github.com> Date: Wed, 25 Sep 2019 16:58:41 +0800 Subject: [PATCH 7/7] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E5=BD=93?= =?UTF-8?q?=E4=BB=85=E6=98=AF=E5=BD=93=E5=89=8D=E7=BB=84=E7=BB=87=E5=AE=A1?= =?UTF-8?q?=E8=AE=A1=E5=91=98=E6=97=B6=EF=BC=8C=E9=9A=90=E8=97=8F=E7=BB=88?= =?UTF-8?q?=E6=96=AD=E4=BC=9A=E8=AF=9D=E6=8C=89=E9=92=AE=20(#3275)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Update] 修改会话列表中终断按钮,批量终断,SessionViewSet 的权限控制 --- apps/terminal/api/session.py | 7 ++++++- apps/terminal/templates/terminal/session_list.html | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/terminal/api/session.py b/apps/terminal/api/session.py index 5303bbdb2..7071ddd33 100644 --- a/apps/terminal/api/session.py +++ b/apps/terminal/api/session.py @@ -26,7 +26,7 @@ logger = get_logger(__name__) class SessionViewSet(OrgBulkModelViewSet): queryset = Session.objects.all() serializer_class = serializers.SessionSerializer - permission_classes = (IsOrgAdminOrAppUser | IsOrgAuditor, ) + permission_classes = (IsOrgAdminOrAppUser, ) filter_fields = [ "user", "asset", "system_user", "remote_addr", "protocol", "terminal", "is_finished", @@ -53,6 +53,11 @@ class SessionViewSet(OrgBulkModelViewSet): serializer.validated_data["system_user"] = _system_user.name return super().perform_create(serializer) + def get_permissions(self): + if self.request.method.lower() in ['get']: + self.permission_classes = (IsOrgAdminOrAppUser | IsOrgAuditor, ) + return super().get_permissions() + class SessionReplayViewSet(viewsets.ViewSet): serializer_class = serializers.ReplaySerializer diff --git a/apps/terminal/templates/terminal/session_list.html b/apps/terminal/templates/terminal/session_list.html index 6ac9b7bd8..d23d9be02 100644 --- a/apps/terminal/templates/terminal/session_list.html +++ b/apps/terminal/templates/terminal/session_list.html @@ -41,7 +41,7 @@
- {% if type == "online" %} + {% if type == "online" and request.user.can_admin_current_org %}