From dd07fa678f05d022da23cc1539cd93f6222effc3 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Mon, 11 Jun 2018 16:27:40 +0800 Subject: [PATCH 1/3] =?UTF-8?q?[Update]=20=E6=B7=BB=E5=8A=A0=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E7=B3=BB=E7=BB=9F=E7=94=A8=E6=88=B7=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E7=99=BB=E5=BD=95=E6=A8=A1=E5=BC=8F(=E8=87=AA?= =?UTF-8?q?=E5=8A=A8/=E6=89=8B=E5=8A=A8=E7=99=BB=E5=BD=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/forms/user.py | 21 +- apps/assets/models/base.py | 2 +- apps/assets/models/user.py | 8 + apps/assets/serializers/system_user.py | 7 + .../assets/templates/assets/_system_user.html | 36 ++- .../templates/assets/system_user_detail.html | 4 + .../templates/assets/system_user_list.html | 11 +- .../templates/assets/system_user_update.html | 1 - apps/i18n/zh/LC_MESSAGES/django.mo | Bin 34591 -> 35051 bytes apps/i18n/zh/LC_MESSAGES/django.po | 240 ++++++++++-------- 10 files changed, 208 insertions(+), 122 deletions(-) diff --git a/apps/assets/forms/user.py b/apps/assets/forms/user.py index 2295dc005..0bc4ff094 100644 --- a/apps/assets/forms/user.py +++ b/apps/assets/forms/user.py @@ -109,12 +109,24 @@ class SystemUserForm(PasswordAndKeyAuthForm): if not self.instance and not auto_generate: super().validate_password_key() + def is_valid(self): + validated = super().is_valid() + username = self.cleaned_data.get('username') + login_mode = self.cleaned_data.get('login_mode') + if login_mode == SystemUser.AUTO_LOGIN and not username: + self.add_error( + "username", _('* Automatic login mode,' + ' must fill in the username.') + ) + return False + return validated + class Meta: model = SystemUser fields = [ 'name', 'username', 'protocol', 'auto_generate_key', 'password', 'private_key_file', 'auto_push', 'sudo', - 'comment', 'shell', 'priority', + 'comment', 'shell', 'priority', 'login_mode', ] widgets = { 'name': forms.TextInput(attrs={'placeholder': _('Name')}), @@ -124,5 +136,8 @@ class SystemUserForm(PasswordAndKeyAuthForm): 'name': '* required', 'username': '* required', 'auto_push': _('Auto push system user to asset'), - 'priority': _('High level will be using login asset as default, if user was granted more than 2 system user'), - } \ No newline at end of file + 'priority': _('High level will be using login asset as default, ' + 'if user was granted more than 2 system user'), + 'login_mode': _('If you choose manual login mode, you do not ' + 'need to fill in the username and password.') + } diff --git a/apps/assets/models/base.py b/apps/assets/models/base.py index cb9bb96ae..908e6b647 100644 --- a/apps/assets/models/base.py +++ b/apps/assets/models/base.py @@ -19,7 +19,7 @@ signer = get_signer() class AssetUser(models.Model): id = models.UUIDField(default=uuid.uuid4, primary_key=True) name = models.CharField(max_length=128, unique=True, verbose_name=_('Name')) - username = models.CharField(max_length=32, verbose_name=_('Username'), validators=[alphanumeric]) + username = models.CharField(max_length=32, blank=True, verbose_name=_('Username'), validators=[alphanumeric]) _password = models.CharField(max_length=256, blank=True, null=True, verbose_name=_('Password')) _private_key = models.TextField(max_length=4096, blank=True, null=True, verbose_name=_('SSH private key'), validators=[private_key_validator, ]) _public_key = models.TextField(max_length=4096, blank=True, verbose_name=_('SSH public key')) diff --git a/apps/assets/models/user.py b/apps/assets/models/user.py index bf31b8491..f835e387f 100644 --- a/apps/assets/models/user.py +++ b/apps/assets/models/user.py @@ -100,6 +100,13 @@ class SystemUser(AssetUser): (RDP_PROTOCOL, 'rdp'), ) + AUTO_LOGIN = 'auto' + MANUAL_LOGIN = 'manual' + LOGIN_MODE_CHOICES = ( + (AUTO_LOGIN, _('Automatic login')), + (MANUAL_LOGIN, _('Manually login')) + ) + nodes = models.ManyToManyField('assets.Node', blank=True, verbose_name=_("Nodes")) assets = models.ManyToManyField('assets.Asset', blank=True, verbose_name=_("Assets")) priority = models.IntegerField(default=10, verbose_name=_("Priority")) @@ -107,6 +114,7 @@ class SystemUser(AssetUser): auto_push = models.BooleanField(default=True, verbose_name=_('Auto push')) sudo = models.TextField(default='/bin/whoami', verbose_name=_('Sudo')) shell = models.CharField(max_length=64, default='/bin/bash', verbose_name=_('Shell')) + login_mode = models.CharField(choices=LOGIN_MODE_CHOICES, default=AUTO_LOGIN, max_length=10, verbose_name=_('Login mode')) def __str__(self): return '{0.name}({0.username})'.format(self) diff --git a/apps/assets/serializers/system_user.py b/apps/assets/serializers/system_user.py index 7abd09d29..9caf150b4 100644 --- a/apps/assets/serializers/system_user.py +++ b/apps/assets/serializers/system_user.py @@ -18,6 +18,13 @@ class SystemUserSerializer(serializers.ModelSerializer): model = SystemUser exclude = ('_password', '_private_key', '_public_key') + def get_field_names(self, declared_fields, info): + fields = super(SystemUserSerializer, self).get_field_names(declared_fields, info) + fields.extend([ + 'get_login_mode_display', + ]) + return fields + @staticmethod def get_unreachable_assets(obj): return obj.unreachable_assets diff --git a/apps/assets/templates/assets/_system_user.html b/apps/assets/templates/assets/_system_user.html index 314967d22..cf8539293 100644 --- a/apps/assets/templates/assets/_system_user.html +++ b/apps/assets/templates/assets/_system_user.html @@ -36,12 +36,13 @@ {% endif %}

{% trans 'Basic' %}

{% bootstrap_field form.name layout="horizontal" %} + {% bootstrap_field form.login_mode layout="horizontal" %} {% bootstrap_field form.username layout="horizontal" %} {% bootstrap_field form.priority layout="horizontal" %} {% bootstrap_field form.protocol layout="horizontal" %} +

{% trans 'Auth' %}

{% block auth %} -

{% trans 'Auth' %}

@@ -80,15 +81,22 @@ {% endblock %} {% block custom_foot_js %} {% endblock %} \ No newline at end of file diff --git a/apps/assets/templates/assets/system_user_detail.html b/apps/assets/templates/assets/system_user_detail.html index 9a7bc255a..b68bf2689 100644 --- a/apps/assets/templates/assets/system_user_detail.html +++ b/apps/assets/templates/assets/system_user_detail.html @@ -62,6 +62,10 @@ {% trans 'Username' %}: {{ system_user.username }} + + {% trans 'Login mode' %}: + {{ system_user.get_login_mode_display }} + {% trans 'Protocol' %}: {{ system_user.protocol }} diff --git a/apps/assets/templates/assets/system_user_list.html b/apps/assets/templates/assets/system_user_list.html index 3daa47a81..3fa887df6 100644 --- a/apps/assets/templates/assets/system_user_list.html +++ b/apps/assets/templates/assets/system_user_list.html @@ -26,6 +26,7 @@ {% trans 'Name' %} {% trans 'Username' %} {% trans 'Protocol' %} + {% trans 'Login mode' %} {% trans 'Asset' %} {% trans 'Reachable' %} {% trans 'Unreachable' %} @@ -48,7 +49,7 @@ function initTable() { var detail_btn = '' + cellData + ''; $(td).html(detail_btn.replace('{{ DEFAULT_PK }}', rowData.id)); }}, - {targets: 5, createdCell: function (td, cellData) { + {targets: 6, createdCell: function (td, cellData) { var innerHtml = ""; if (cellData !== 0) { innerHtml = "" + cellData + ""; @@ -57,7 +58,7 @@ function initTable() { } $(td).html('' + innerHtml + ''); }}, - {targets: 6, createdCell: function (td, cellData) { + {targets: 7, createdCell: function (td, cellData) { var innerHtml = ""; if (cellData !== 0) { innerHtml = "" + cellData + ""; @@ -66,7 +67,7 @@ function initTable() { } $(td).html('' + innerHtml + ''); }}, - {targets: 7, createdCell: function (td, cellData, rowData) { + {targets: 8, createdCell: function (td, cellData, rowData) { var val = 0; var innerHtml = ""; var total = rowData.assets_amount; @@ -84,14 +85,14 @@ function initTable() { $(td).html('' + innerHtml + ''); }}, - {targets: 9, createdCell: function (td, cellData, rowData) { + {targets: 10, createdCell: function (td, cellData, rowData) { var update_btn = '{% trans "Update" %}'.replace('{{ DEFAULT_PK }}', cellData); var del_btn = '{% trans "Delete" %}'.replace('{{ DEFAULT_PK }}', cellData); $(td).html(update_btn + del_btn) }}], ajax_url: '{% url "api-assets:system-user-list" %}', columns: [ - {data: "id" }, {data: "name" }, {data: "username" }, {data: "protocol"}, {data: "assets_amount" }, + {data: "id" }, {data: "name" }, {data: "username" }, {data: "protocol"}, {data: "get_login_mode_display"}, {data: "assets_amount" }, {data: "reachable_amount"}, {data: "unreachable_amount"}, {data: "id"}, {data: "comment" }, {data: "id" } ], op_html: $('#actions').html() diff --git a/apps/assets/templates/assets/system_user_update.html b/apps/assets/templates/assets/system_user_update.html index 7e1590db5..977c3ac31 100644 --- a/apps/assets/templates/assets/system_user_update.html +++ b/apps/assets/templates/assets/system_user_update.html @@ -4,7 +4,6 @@ {% load bootstrap3 %} {% block auth %} -

{% trans 'Auth' %}

{% bootstrap_field form.password layout="horizontal" %} {% bootstrap_field form.private_key_file layout="horizontal" %}
diff --git a/apps/i18n/zh/LC_MESSAGES/django.mo b/apps/i18n/zh/LC_MESSAGES/django.mo index 7d2f547cd060a8f9bcb6920ecac28ce737ebe3df..df59e43d67e7b758c445eae254496702a7583bf4 100644 GIT binary patch delta 12416 zcmZwN37k&l`^WJ!t6|1AW9()g>sZFVWh?s@vX-qFW~^hzG7}Se?E4atC9<^`5*pc~ zEG1+sqDWyZAw?*}|MPv$rI-Kf|39za<$Yh*xzByy=RW6oJk@X6EdT3s{JlSi2hMjm zD)>82VVsfMacJIrr|amgN-XX&Ub!}vtN=gs_ZzCIH-!_MB{kmf6glY zsEenNOPz?Sj#CdCVrd-X>UGj-1XDPHTEH31g7>Wc*bJ)XI60|@VE`6J_4i;n*255N zi-oWYhGMGK$D;0O8tS@r80dH%=O7JDcocKt510q9VmAEO45{uoY>pFwT1ZLEj@7Xg zHo`JE0Egi`Y>y!|9H#?zGuNZ)0W}>bi20qDX=sbOqgFf}BX9v~g0&ck+b{@sVHobi z9C#e_;xDM{?^`|KIk#UpYMf})`SPe6tA$<-(3nP6?0_2hRn$%lKyBqnjKl?45Z9p| z*#XRlM^OV`K@EJz&Ob&iJgAntbJJFCL z`L(D=_9^OJ*p3=_7wQom!2I~5oxfw}@0)(L-TtAq*?(OaNkK19G}6Z@jao=A)I|MJ z3mt;$Hx?`6G}Ik#M=f+WY6tdPehhW}Df4G+N`4u&)8)N&+<|MO25yPEpabfTyII~J z^{9rR9?clkOF9R&^&g^dM^NKz$3nOlwIkX8jbjW^uRkGJ~UsOuJ^##@OI`uwk@p%v~%--=NS zID#HLgL+#Zp!yYf-km54wR0s=3#f{kxEX4K4pbnjppeg43<5<*0Rj?G+MgHz`dYgSv-}(K`8CZ#YJ!-yR z8hH8orID+lk)IuMi z#tUrhKH6Mf8Y&dBLJS6yS3$i4HBslAqZZT=b?0%YccU+A!9y)iLoH+i>MMID>XEHN z{T-2k`j{U?jpsc>Ljzt$4R`}JzQ@tsVp9yjepm<-QIB*A zYTU)B8(W3!jMv#jL(lF2>ZQ1aCDFgBd*`K56I4T8*a(BMBWh>5VG#C3y_ADccbtma z`iZEQauG)1W{k#@K6(CkY3SKRHgmT=8Z~eU)D~5;dOcLXhNwGfW%W*|o$HEPNCN7P z2ci}{8Vlkq^v86}f*)fx=65#H&_ugYJ8&3v$LBE%{*IdP9%^f!SUsS*+dmXFaTEq) z2@Jt<=-WBeOWFwaQVv7y%vkj5^EjV|R=N(A??T`b%R?m1`oC1`In$^he9CcZ|Po8#4LqcaYfW4sfSsx1!@89P!q&q zRvduYFa>qqi&bzoYT`4{nyt2PC-6I-9gBU?tnQ^KP2*_Ca#RysamKz zYKhwN1k_e1VknM8ef%a{z7$K7r=$9xz^-`4OT+h!TDdktEucMWg`Ke~4zlwrP@m%s z7>i$H5&R2vXW^~gcO)NbqCyyk#V`~rq8>pV)Q)-ESfev$r_jst!R8xQpMcuxx#qj5 zEq)($1DjA2?nQ0&LDWv2MJ?ba>ZN;t*)c~OU)}2zrlAvMP%Es5T44*fgVP;#XZ=x+ zA_*JgWYo)d81>R#MGfq{XxB%TPPF5p&@_)YhLw^}m2s@pmkT#oF`y^%At9Av>ck z?1j2;7-~z$pze4UYKP{TOED+;hp2v=(Kj(_yptG?=P@_lMh^ydaBsL|2R{FLo6Azr zKn=`xs0-pyUqHjq_mc^WldnbnZa9i57~9ePJ7fh`AU}ZmxZO8Bo!m#%0&7wqg8G@C z-iiI!Gr34XkKj7$nf-yA@geG2e)_We%nqUY{fPQ5KacuKzF_Asqqh1k>Jj?A;y%I< zj3h6N`rfF5y1~|78rtd}sI5xGe5ks%bOGvR`2f{#6KbcvL=AA<@{3rN{0`>9n9lBa zby59aLM^NZ>bilb8~2X3#zfRJn~A!^1*i*_pcb+kbqAYK3p$J%;3w1_T}18NV^sgF zUHDeSe5m?p)Ob@+*Uv*1>~&Vrh@kKTs^fLkOLPyl(ky&W=Enl4JE?*is3H1ZUetu0 zQ3Lm}dMav1y;ueKNO>QQwz6HwO;Mg2lb!xs217S!iIlZFP;E3J+>aXjWl)fb~COvl!Ke7-S_ z{K>2QV;H8r#t&5Lk8lh5o}TWVzY*vD(wT{6sjo9nqrOK1da*mrXcVPU82g)(Pzzaw z+QK!Ke{SwWZT%tCou0J%1WmVP&XRf$334Hl^6HY(2A?tiF#&B^A$7R9D@2ZyotK= z1(vU|^Lwp+%<_vEOus)Yzi)Y9U-x=%C=IPR3X5Vn%Uh#%pet&CG;@qO8Fk$(%il%4 z{VOpL*V_3FsD*xxTKF*xz-!2jd!3tZ!?|zz^>cS56g6=qR>Q)Ux3lw|QCrx{>O-*x zd79-L%q^$|?6Um0dD|2&N(I$TC|?9|`AvwmhOY9ZsyspeaDeu4QuYC#(@D}HGn zLS26nHU3%i7KSmu<3GSXkrT6$7ej4rtXa!!iW;DU*~d(?^D|HjScDoU9kXDD)puC^ z5c(E`UQKkChP-CpGXn;?6XrslFK$*s4N%YW#+J83-&ZkeA$_d=I_mn-<}|A>7|8S2 zK<`=M1Js2dTfP%@;a>9?79u}q{)4(cGSRg#s(*3RIF&4~kLuSNW3Z#;qY~MFofuC+ ze>qG;eF~Of816!yKZN>A=>%$PFIxR3hLQhex!)kSe+X*4oT&aqQT@uH9^rFVf6+@r z6Ld1Wo4rvN3^0eA6U;fNJABXbPf+9RuzZi@N3ksRQ`o*n(kOPOV`0(q>f*Xc&1K80!K zA#6e(HkcO(+oJ~FhFahkmVb+j$iKHdX^7h|6&p|=W%(|1Kjx%<7=0f@U!CWFi-rci zX9f&)2g-%2=d-*7hLe{=-Qn|Q3)BKTqWX6;`!p%Nv<3&334TbjIR1&`U!D%(fFtP!p|3?aXe}7N55I4XZ!G zNa~Tp-TviJU!@AD{Mi159~vI?k}P)2pZwuX_%SU^q6H) z6IVmsSp(E{9Z@fBH`F7GNA*iW%`?)?z0P79y5J+!0H3%goG;BIcK#>SKo>AS-mrQQ zKZSK&7;4~X)OgRMCTwE1N9}A6Ga2*q{yAP6x?mxW$7QGsi@)Jo33a|6YJkRA13TLJ z>8J%PM19=Wq84}xb=@uVp7}3o{J@c@&wp+j8X!sqtc<=d7_)`h(d>a*$N_B@DtpQ9E}ZW6}Rj_k2av zLhD-I33Yw1H`#wR`rC=YsE@^H)UVjLt-cV|?*r7%d~EgIsDTe#o@x1QRKHNhmr-VA z)PftE?YuPfi{v%b%QMMNY&3V7hcE}{Potjw71V<6n~zZg2aRzJH>1s1RR3C**EhYb zY3TFb71d!B>W;>v23&%=gLKqa=T3~qZ!rpQVlfOG>wYRKVtMjDSP18##@m1z=Nr@w zoW;Dnf6fgW%_#(obN}9Ng?ee`q879SwUAY~5I0~RY{6$$_194S2BO}9p%{Q8Fce3j z#+!obHy5>lMLyZKbSrE_-wII!pSAimtN&y5unF$@0%j?*s#)J`jb#|8tK}0=9j*# ze++%U|Ig9T0)E5V_y9F<^-1nP%~9vuo4rt8(~hg`do7nYN5+5Uo)Bg zFGpb`1--TBP;YJM6nCH)vl{B_kSdR5d8LZMp$t!o}pF%^Wdxah|vE>ZbN(PotHHqr_>N5e9AOvf2mD{;Ik5558hJr-9dn3(tbUvJY!x|X z5S6G8B03U$fSgA-j%cS2ntzN>$N2)|tgUCQV*zoIsKN!j?7sg__#&3JiD^0?ac(kE zn`llfqqYLy(MdbP$#W3p2p!vqd&GL(|7R56C0T>RtOKc2$J(!9XW|^SHdZT1`<6O! z1hSayZqte2{5M2l@|MIPtLvLGC;bjuE`sQ{MEhUM234^U@sMah?L4uF_D@88+5@fM zd**Z0pC03>^&|Ps3SW`ylhBG-L&P%qeLFYNu2D>p)GJ%^I$k0!SYHqFW%}Ro8~Hsur(!mJ{;OGG zBW`-;sdYx8xf@~*Fe7#1NeziPZ8^=w-F3_ysi`(ZoL5 zb$l7$7dVQ12X438Q~sr~hjV+;8%N_4J987a5N}e8v6*wz)={2(8eS$6toAAGGsJB2 z!B!)6UL*X;uPfmwOB5pfsFh`$>MC+%=>6M7BP+#1L>Ag(==7}(_8q=L#Hcq%2ih;= zVw{h6P)9>k?F0J54nM{$Mtkkk0v4d}OSp>oNbmp8G`bK^k9jnHc$(llL52JNPV4$c4H@d?HC#6l_|R(+AY zC++rFmUx?ZdQm~@DMT6WY9H!o#reX-hlGv<;xF2(h(KZqQPFpXUDoG+9t9m0%-pmi ziCIK82L6D$hqjI~F3zviuF)=Pxp;w^j%Ij(_>_2_ycFK`o#C%v+HGiu62BAw=vJ~) z3?}|1I#|bV&EodFN@8tl9*n?A#BusxA#}V#tfigH`VS+|O2iWHQ-6Y+t#2}(B(Fd; z(^lrEu#)(aSWR>xzM}s0=s~WdFA+dHJChXgRrq0oXNgY4V4^MOcM+%T8hyXCAhHnG ziJ`=wL{Y{_qrdkTlD`QZeX%O>fOaW5WWz{1*MRm?+Tpm7NTIzGqwIWZ+FNKJ$Bx7- z+C_*0j5B~dmiAUWMFbL6iH3TW`f*|h@$~qH#^a}nnTJ6x(Edq-5Oays#BRb-aQuiX z-KKMc_DG@cK!tC_7dg%^YC)e(DA*CGr=#TMul4el^Ud`BoB&9>EGLv znB2F2l4nqId_t^eQ0lN0PoMsYi5^NR{SrK>!xDxj#SKcRkWs8kT5z!2Ib+UqdqUcJ zdiP6C9+u!46ql45m-xSiNlQ-k#3y@_l2bfM2?_C@l;r<+P)}S^yk~ISuwlcKhsIaP zXw_i5f1uWp@uX3>UzkQsOtTqtH2ErTNaf0&%2jJut&wrI+tR?YS0}H@oVNPPq8*u^ z&%eBSMdr@gw|36R+&%HyiXE9N)@DvxbYgDO_m#0quza#v2Rp#6ond>KASw1#%%A!kKXI@(}=IV!I-H|hvC7tvS^39o%I3&_9 O?Aehr#tdDS=YIeSRQ&V+ delta 11980 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 PjvW!~lig\n" "Language-Team: Jumpserver team\n" @@ -29,10 +29,10 @@ msgstr "" msgid "测试节点下资产是否可连接: {}" msgstr "" -#: assets/forms/asset.py:24 assets/models/asset.py:75 assets/models/user.py:103 +#: assets/forms/asset.py:24 assets/models/asset.py:75 assets/models/user.py:110 #: assets/templates/assets/asset_detail.html:183 #: assets/templates/assets/asset_detail.html:191 -#: assets/templates/assets/system_user_detail.html:175 perms/models.py:33 +#: assets/templates/assets/system_user_detail.html:179 perms/models.py:33 msgid "Nodes" msgstr "节点管理" @@ -103,7 +103,7 @@ msgstr "端口" #: assets/templates/assets/domain_detail.html:60 #: assets/templates/assets/domain_list.html:15 #: assets/templates/assets/label_list.html:16 -#: assets/templates/assets/system_user_list.html:29 audits/models.py:11 +#: assets/templates/assets/system_user_list.html:30 audits/models.py:11 #: audits/templates/audits/ftp_log_list.html:41 #: audits/templates/audits/ftp_log_list.html:72 perms/forms.py:37 #: perms/models.py:32 @@ -118,7 +118,7 @@ msgstr "端口" msgid "Asset" msgstr "资产" -#: assets/forms/domain.py:54 assets/forms/user.py:79 assets/forms/user.py:120 +#: assets/forms/domain.py:54 assets/forms/user.py:79 assets/forms/user.py:131 #: assets/models/base.py:21 assets/models/cluster.py:18 #: assets/models/domain.py:17 assets/models/group.py:20 #: assets/models/label.py:17 assets/templates/assets/admin_user_detail.html:56 @@ -147,15 +147,15 @@ msgstr "资产" msgid "Name" msgstr "名称" -#: assets/forms/domain.py:55 assets/forms/user.py:80 assets/forms/user.py:121 +#: assets/forms/domain.py:55 assets/forms/user.py:80 assets/forms/user.py:132 #: assets/models/base.py:22 assets/templates/assets/admin_user_detail.html:60 #: assets/templates/assets/admin_user_list.html:24 #: assets/templates/assets/domain_gateway_list.html:60 #: assets/templates/assets/system_user_detail.html:62 #: assets/templates/assets/system_user_list.html:27 #: perms/templates/perms/asset_permission_user.html:55 users/forms.py:13 -#: users/forms.py:21 users/forms.py:30 users/models/authentication.py:45 -#: users/models/user.py:47 users/templates/users/_select_user_modal.html:14 +#: users/forms.py:31 users/models/authentication.py:45 users/models/user.py:47 +#: users/templates/users/_select_user_modal.html:14 #: users/templates/users/login.html:56 #: users/templates/users/login_log_list.html:49 #: users/templates/users/user_detail.html:67 @@ -169,7 +169,7 @@ msgid "Password or private key passphrase" msgstr "密码或密钥密码" #: assets/forms/user.py:25 assets/models/base.py:23 common/forms.py:113 -#: users/forms.py:15 users/forms.py:23 users/forms.py:32 users/forms.py:44 +#: users/forms.py:15 users/forms.py:33 users/forms.py:45 #: users/templates/users/login.html:59 #: users/templates/users/reset_password.html:53 #: users/templates/users/user_create.html:10 @@ -192,16 +192,26 @@ msgstr "ssh密钥不合法" msgid "Password and private key file must be input one" msgstr "密码和私钥, 必须输入一个" -#: assets/forms/user.py:126 +#: assets/forms/user.py:118 +msgid "* Automatic login mode, must fill in the username." +msgstr "自动登录模式,必须填写用户名" + +#: assets/forms/user.py:137 msgid "Auto push system user to asset" msgstr "自动推送系统用户到资产" -#: assets/forms/user.py:127 +#: assets/forms/user.py:138 msgid "" "High level will be using login asset as default, if user was granted more " "than 2 system user" msgstr "高优先级的系统用户将会作为默认登录用户" +#: assets/forms/user.py:139 +msgid "" +"If you choose manual login mode, you do not need to fill in the username and " +"password." +msgstr "如果选择手动登录模式,用户名和密码则不需要填写" + #: assets/models/asset.py:63 assets/models/domain.py:43 #: assets/templates/assets/_asset_list_modal.html:46 #: assets/templates/assets/admin_user_assets.html:52 @@ -309,7 +319,7 @@ msgstr "标签管理" #: assets/templates/assets/admin_user_detail.html:68 #: assets/templates/assets/asset_detail.html:117 #: assets/templates/assets/domain_detail.html:72 -#: assets/templates/assets/system_user_detail.html:96 +#: assets/templates/assets/system_user_detail.html:100 #: ops/templates/ops/adhoc_detail.html:86 perms/models.py:38 perms/models.py:81 #: perms/templates/perms/asset_permission_detail.html:98 #: users/models/user.py:90 users/templates/users/user_detail.html:111 @@ -320,7 +330,7 @@ msgstr "创建者" #: assets/models/domain.py:20 assets/models/group.py:22 #: assets/models/label.py:23 assets/templates/assets/admin_user_detail.html:64 #: assets/templates/assets/domain_detail.html:68 -#: assets/templates/assets/system_user_detail.html:92 +#: assets/templates/assets/system_user_detail.html:96 #: ops/templates/ops/adhoc_detail.html:90 ops/templates/ops/task_detail.html:63 #: perms/models.py:39 perms/models.py:82 #: perms/templates/perms/asset_permission_detail.html:94 @@ -338,8 +348,8 @@ msgstr "创建日期" #: assets/templates/assets/domain_detail.html:76 #: assets/templates/assets/domain_gateway_list.html:61 #: assets/templates/assets/domain_list.html:17 -#: assets/templates/assets/system_user_detail.html:100 -#: assets/templates/assets/system_user_list.html:33 common/models.py:30 +#: assets/templates/assets/system_user_detail.html:104 +#: assets/templates/assets/system_user_list.html:34 common/models.py:30 #: ops/models/adhoc.py:42 perms/models.py:40 perms/models.py:83 #: perms/templates/perms/asset_permission_detail.html:102 terminal/models.py:26 #: terminal/templates/terminal/terminal_detail.html:63 users/models/group.py:13 @@ -392,7 +402,7 @@ msgid "Default" msgstr "默认" #: assets/models/cluster.py:36 assets/models/label.py:13 -#: users/models/user.py:343 +#: users/models/user.py:345 msgid "System" msgstr "系统" @@ -404,9 +414,9 @@ msgstr "默认Cluster" msgid "Cluster" msgstr "集群" -#: assets/models/domain.py:45 assets/models/user.py:106 +#: assets/models/domain.py:45 assets/models/user.py:113 #: assets/templates/assets/domain_gateway_list.html:59 -#: assets/templates/assets/system_user_detail.html:66 +#: assets/templates/assets/system_user_detail.html:70 #: assets/templates/assets/system_user_list.html:28 #: terminal/templates/terminal/session_list.html:75 msgid "Protocol" @@ -431,10 +441,10 @@ msgstr "默认资产组" #: terminal/templates/terminal/command_list.html:32 #: terminal/templates/terminal/command_list.html:72 #: terminal/templates/terminal/session_list.html:33 -#: terminal/templates/terminal/session_list.html:71 users/forms.py:281 -#: users/models/user.py:31 users/models/user.py:331 +#: terminal/templates/terminal/session_list.html:71 users/forms.py:282 +#: users/models/user.py:31 users/models/user.py:333 #: users/templates/users/user_group_detail.html:78 -#: users/templates/users/user_group_list.html:13 users/views/user.py:362 +#: users/templates/users/user_group_list.html:13 users/views/user.py:359 msgid "User" msgstr "用户" @@ -451,7 +461,15 @@ msgstr "分类" msgid "Key" msgstr "" -#: assets/models/user.py:104 +#: assets/models/user.py:106 +msgid "Automatic login" +msgstr "自动登录" + +#: assets/models/user.py:107 +msgid "Manually login" +msgstr "手动登录" + +#: assets/models/user.py:111 #: assets/templates/assets/_asset_group_bulk_update_modal.html:11 #: assets/templates/assets/system_user_asset.html:21 #: assets/views/admin_user.py:29 assets/views/admin_user.py:47 @@ -469,25 +487,30 @@ msgstr "" msgid "Assets" msgstr "资产管理" -#: assets/models/user.py:105 +#: assets/models/user.py:112 msgid "Priority" msgstr "优先级" -#: assets/models/user.py:107 assets/templates/assets/_system_user.html:58 -#: assets/templates/assets/system_user_detail.html:118 -#: assets/templates/assets/system_user_update.html:11 +#: assets/models/user.py:114 assets/templates/assets/_system_user.html:59 +#: assets/templates/assets/system_user_detail.html:122 +#: assets/templates/assets/system_user_update.html:10 msgid "Auto push" msgstr "自动推送" -#: assets/models/user.py:108 assets/templates/assets/system_user_detail.html:70 +#: assets/models/user.py:115 assets/templates/assets/system_user_detail.html:74 msgid "Sudo" msgstr "Sudo" -#: assets/models/user.py:109 assets/templates/assets/system_user_detail.html:75 +#: assets/models/user.py:116 assets/templates/assets/system_user_detail.html:79 msgid "Shell" msgstr "Shell" -#: assets/models/user.py:149 audits/models.py:12 +#: assets/models/user.py:117 assets/templates/assets/system_user_detail.html:66 +#: assets/templates/assets/system_user_list.html:29 +msgid "Login mode" +msgstr "登录模式" + +#: assets/models/user.py:157 audits/models.py:12 #: audits/templates/audits/ftp_log_list.html:49 #: audits/templates/audits/ftp_log_list.html:73 perms/forms.py:43 #: perms/models.py:34 perms/models.py:78 @@ -604,16 +627,15 @@ msgstr "基本" #: assets/templates/assets/asset_create.html:25 #: assets/templates/assets/asset_update.html:30 #: assets/templates/assets/gateway_create_update.html:45 -#: assets/templates/assets/system_user_update.html:7 #: users/templates/users/_user.html:21 msgid "Auth" msgstr "认证" -#: assets/templates/assets/_system_user.html:47 +#: assets/templates/assets/_system_user.html:48 msgid "Auto generate key" msgstr "自动生成密钥" -#: assets/templates/assets/_system_user.html:64 +#: assets/templates/assets/_system_user.html:65 #: assets/templates/assets/asset_create.html:59 #: assets/templates/assets/asset_update.html:63 #: assets/templates/assets/gateway_create_update.html:53 @@ -622,7 +644,7 @@ msgstr "自动生成密钥" msgid "Other" msgstr "其它" -#: assets/templates/assets/_system_user.html:70 +#: assets/templates/assets/_system_user.html:71 #: assets/templates/assets/admin_user_create_update.html:45 #: assets/templates/assets/asset_bulk_update.html:23 #: assets/templates/assets/asset_create.html:66 @@ -647,7 +669,7 @@ msgstr "其它" msgid "Reset" msgstr "重置" -#: assets/templates/assets/_system_user.html:71 +#: assets/templates/assets/_system_user.html:72 #: assets/templates/assets/admin_user_create_update.html:46 #: assets/templates/assets/asset_bulk_update.html:24 #: assets/templates/assets/asset_create.html:67 @@ -702,14 +724,14 @@ msgstr "资产列表" #: assets/templates/assets/admin_user_assets.html:54 #: assets/templates/assets/admin_user_list.html:26 #: assets/templates/assets/system_user_asset.html:52 -#: assets/templates/assets/system_user_list.html:30 +#: assets/templates/assets/system_user_list.html:31 #: users/templates/users/user_group_granted_asset.html:47 msgid "Reachable" msgstr "可连接" #: assets/templates/assets/admin_user_assets.html:66 #: assets/templates/assets/system_user_asset.html:64 -#: assets/templates/assets/system_user_detail.html:112 +#: assets/templates/assets/system_user_detail.html:116 #: perms/templates/perms/asset_permission_detail.html:114 msgid "Quick update" msgstr "快速更新" @@ -722,7 +744,7 @@ msgstr "测试可连接性" #: assets/templates/assets/admin_user_assets.html:75 #: assets/templates/assets/asset_detail.html:171 #: assets/templates/assets/system_user_asset.html:81 -#: assets/templates/assets/system_user_detail.html:147 +#: assets/templates/assets/system_user_detail.html:151 msgid "Test" msgstr "测试" @@ -736,7 +758,7 @@ msgstr "测试" #: assets/templates/assets/domain_list.html:42 #: assets/templates/assets/label_list.html:38 #: assets/templates/assets/system_user_detail.html:26 -#: assets/templates/assets/system_user_list.html:88 +#: assets/templates/assets/system_user_list.html:89 #: perms/templates/perms/asset_permission_detail.html:30 #: perms/templates/perms/asset_permission_list.html:191 #: terminal/templates/terminal/terminal_detail.html:16 @@ -760,7 +782,7 @@ msgstr "更新" #: assets/templates/assets/domain_list.html:43 #: assets/templates/assets/label_list.html:39 #: assets/templates/assets/system_user_detail.html:30 -#: assets/templates/assets/system_user_list.html:89 +#: assets/templates/assets/system_user_list.html:90 #: ops/templates/ops/task_list.html:72 #: perms/templates/perms/asset_permission_detail.html:34 #: perms/templates/perms/asset_permission_list.html:192 @@ -785,8 +807,8 @@ msgstr "选择节点" #: assets/templates/assets/admin_user_detail.html:100 #: assets/templates/assets/asset_detail.html:200 #: assets/templates/assets/asset_list.html:638 -#: assets/templates/assets/system_user_detail.html:192 -#: assets/templates/assets/system_user_list.html:138 templates/_modal.html:22 +#: assets/templates/assets/system_user_detail.html:196 +#: assets/templates/assets/system_user_list.html:139 templates/_modal.html:22 #: terminal/templates/terminal/session_detail.html:108 #: users/templates/users/user_detail.html:366 #: users/templates/users/user_detail.html:391 @@ -804,12 +826,12 @@ msgid "Create admin user" msgstr "创建管理用户" #: assets/templates/assets/admin_user_list.html:27 -#: assets/templates/assets/system_user_list.html:31 +#: assets/templates/assets/system_user_list.html:32 msgid "Unreachable" msgstr "不可达" #: assets/templates/assets/admin_user_list.html:28 -#: assets/templates/assets/system_user_list.html:32 +#: assets/templates/assets/system_user_list.html:33 #: ops/templates/ops/adhoc_history.html:54 #: ops/templates/ops/task_history.html:60 msgid "Ratio" @@ -820,7 +842,7 @@ msgstr "比例" #: assets/templates/assets/domain_gateway_list.html:62 #: assets/templates/assets/domain_list.html:18 #: assets/templates/assets/label_list.html:17 -#: assets/templates/assets/system_user_list.html:34 +#: assets/templates/assets/system_user_list.html:35 #: ops/templates/ops/adhoc_history.html:59 ops/templates/ops/task_adhoc.html:64 #: ops/templates/ops/task_history.html:65 ops/templates/ops/task_list.html:42 #: perms/templates/perms/asset_permission_list.html:60 @@ -978,7 +1000,7 @@ msgid "Have assets, cancel" msgstr "存在资产,不能删除" #: assets/templates/assets/asset_list.html:633 -#: assets/templates/assets/system_user_list.html:133 +#: assets/templates/assets/system_user_list.html:134 #: users/templates/users/user_detail.html:361 #: users/templates/users/user_detail.html:386 #: users/templates/users/user_group_list.html:81 @@ -1053,17 +1075,17 @@ msgid "Assets of " msgstr "资产" #: assets/templates/assets/system_user_asset.html:70 -#: assets/templates/assets/system_user_detail.html:135 +#: assets/templates/assets/system_user_detail.html:139 msgid "Push system user now" msgstr "立刻推送系统" #: assets/templates/assets/system_user_asset.html:73 -#: assets/templates/assets/system_user_detail.html:138 +#: assets/templates/assets/system_user_detail.html:142 msgid "Push" msgstr "推送" #: assets/templates/assets/system_user_asset.html:78 -#: assets/templates/assets/system_user_detail.html:144 +#: assets/templates/assets/system_user_detail.html:148 msgid "Test assets connective" msgstr "测试资产可连接性" @@ -1075,28 +1097,28 @@ msgstr "任务已下发,查看ops任务列表" msgid "Task has been send, seen left assets status" msgstr "任务已下发,查看左侧资产状态" -#: assets/templates/assets/system_user_detail.html:81 +#: assets/templates/assets/system_user_detail.html:85 msgid "Home" msgstr "家目录" -#: assets/templates/assets/system_user_detail.html:87 +#: assets/templates/assets/system_user_detail.html:91 msgid "Uid" msgstr "Uid" -#: assets/templates/assets/system_user_detail.html:153 -#: assets/templates/assets/system_user_detail.html:339 +#: assets/templates/assets/system_user_detail.html:157 +#: assets/templates/assets/system_user_detail.html:343 msgid "Clear auth" msgstr "清除认证信息" -#: assets/templates/assets/system_user_detail.html:156 +#: assets/templates/assets/system_user_detail.html:160 msgid "Clear" msgstr "清除" -#: assets/templates/assets/system_user_detail.html:183 +#: assets/templates/assets/system_user_detail.html:187 msgid "Add to node" msgstr "添加到节点" -#: assets/templates/assets/system_user_detail.html:339 +#: assets/templates/assets/system_user_detail.html:343 msgid "success" msgstr "成功" @@ -1105,20 +1127,20 @@ msgstr "成功" msgid "Create system user" msgstr "创建系统用户" -#: assets/templates/assets/system_user_list.html:134 +#: assets/templates/assets/system_user_list.html:135 msgid "This will delete the selected System Users !!!" msgstr "删除选择系统用户" -#: assets/templates/assets/system_user_list.html:142 +#: assets/templates/assets/system_user_list.html:143 msgid "System Users Deleted." msgstr "已被删除" -#: assets/templates/assets/system_user_list.html:143 -#: assets/templates/assets/system_user_list.html:148 +#: assets/templates/assets/system_user_list.html:144 +#: assets/templates/assets/system_user_list.html:149 msgid "System Users Delete" msgstr "删除系统用户" -#: assets/templates/assets/system_user_list.html:147 +#: assets/templates/assets/system_user_list.html:148 msgid "System Users Deleting failed." msgstr "系统用户删除失败" @@ -1805,8 +1827,8 @@ msgstr "任务列表" msgid "Task run history" msgstr "执行历史" -#: perms/forms.py:18 users/forms.py:238 users/forms.py:243 users/forms.py:255 -#: users/forms.py:285 +#: perms/forms.py:18 users/forms.py:239 users/forms.py:244 users/forms.py:256 +#: users/forms.py:286 msgid "Select users" msgstr "选择用户" @@ -1958,14 +1980,14 @@ msgstr "商业支持" msgid "Docs" msgstr "文档" -#: templates/_header_bar.html:37 templates/_nav_user.html:9 users/forms.py:121 +#: templates/_header_bar.html:37 templates/_nav_user.html:9 users/forms.py:122 #: users/templates/users/_user.html:39 #: users/templates/users/first_login.html:39 #: users/templates/users/user_password_update.html:39 #: users/templates/users/user_profile.html:17 #: users/templates/users/user_profile_update.html:37 #: users/templates/users/user_profile_update.html:57 -#: users/templates/users/user_pubkey_update.html:37 users/views/user.py:344 +#: users/templates/users/user_pubkey_update.html:37 users/views/user.py:341 msgid "Profile" msgstr "个人信息" @@ -2022,13 +2044,13 @@ msgstr "关闭" #: templates/_nav.html:10 users/views/group.py:28 users/views/group.py:44 #: users/views/group.py:62 users/views/group.py:79 users/views/group.py:95 -#: users/views/login.py:277 users/views/login.py:335 users/views/user.py:66 -#: users/views/user.py:81 users/views/user.py:103 users/views/user.py:174 -#: users/views/user.py:329 users/views/user.py:381 users/views/user.py:416 +#: users/views/login.py:277 users/views/login.py:335 users/views/user.py:65 +#: users/views/user.py:80 users/views/user.py:102 users/views/user.py:173 +#: users/views/user.py:328 users/views/user.py:378 users/views/user.py:413 msgid "Users" msgstr "用户管理" -#: templates/_nav.html:13 users/views/user.py:67 +#: templates/_nav.html:13 users/views/user.py:66 msgid "User list" msgstr "用户列表" @@ -2334,11 +2356,11 @@ msgstr "" msgid "Invalid token or cache refreshed." msgstr "" -#: users/forms.py:38 +#: users/forms.py:39 msgid "MFA code" msgstr "MFA 验证码" -#: users/forms.py:49 users/models/user.py:59 +#: users/forms.py:50 users/models/user.py:59 #: users/templates/users/_select_user_modal.html:15 #: users/templates/users/user_detail.html:87 #: users/templates/users/user_list.html:25 @@ -2346,31 +2368,31 @@ msgstr "MFA 验证码" msgid "Role" msgstr "角色" -#: users/forms.py:52 users/forms.py:201 +#: users/forms.py:53 users/forms.py:202 msgid "ssh public key" msgstr "ssh公钥" -#: users/forms.py:53 users/forms.py:202 +#: users/forms.py:54 users/forms.py:203 msgid "ssh-rsa AAAA..." msgstr "" -#: users/forms.py:54 +#: users/forms.py:55 msgid "Paste user id_rsa.pub here." msgstr "复制用户公钥到这里" -#: users/forms.py:72 users/templates/users/user_detail.html:200 +#: users/forms.py:73 users/templates/users/user_detail.html:200 msgid "Join user groups" msgstr "添加到用户组" -#: users/forms.py:83 users/forms.py:216 +#: users/forms.py:84 users/forms.py:217 msgid "Public key should not be the same as your old one." msgstr "不能和原来的密钥相同" -#: users/forms.py:87 users/forms.py:220 users/serializers.py:48 +#: users/forms.py:88 users/forms.py:221 users/serializers.py:48 msgid "Not a valid ssh public key" msgstr "ssh密钥不合法" -#: users/forms.py:127 +#: users/forms.py:128 msgid "" "Tip: when enabled, you will enter the MFA binding process the next time you " "log in. you can also directly bind in \"personal information -> quick " @@ -2379,16 +2401,16 @@ msgstr "" "提示:启用之后您将会在下次登录时进入MFA绑定流程;您也可以在(个人信息->快速修" "改->更改MFA设置)中直接绑定!" -#: users/forms.py:137 +#: users/forms.py:138 msgid "* Enable MFA authentication to make the account more secure." msgstr "* 启用MFA认证,使账号更加安全." -#: users/forms.py:142 users/models/user.py:71 +#: users/forms.py:143 users/models/user.py:71 #: users/templates/users/first_login.html:45 msgid "MFA" msgstr "MFA" -#: users/forms.py:147 +#: users/forms.py:148 msgid "" "In order to protect you and your company, please keep your account, password " "and key sensitive information properly. (for example: setting complex " @@ -2397,41 +2419,41 @@ msgstr "" "为了保护您和公司的安全,请妥善保管您的账户、密码和密钥等重要敏感信息;(如:" "设置复杂密码,启用MFA认证)" -#: users/forms.py:154 users/templates/users/first_login.html:48 +#: users/forms.py:155 users/templates/users/first_login.html:48 #: users/templates/users/first_login.html:107 #: users/templates/users/first_login.html:130 msgid "Finish" msgstr "完成" -#: users/forms.py:160 +#: users/forms.py:161 msgid "Old password" msgstr "原来密码" -#: users/forms.py:165 +#: users/forms.py:166 msgid "New password" msgstr "新密码" -#: users/forms.py:170 +#: users/forms.py:171 msgid "Confirm password" msgstr "确认密码" -#: users/forms.py:180 +#: users/forms.py:181 msgid "Old password error" msgstr "原来密码错误" -#: users/forms.py:188 +#: users/forms.py:189 msgid "Password does not match" msgstr "密码不一致" -#: users/forms.py:199 +#: users/forms.py:200 msgid "Automatically configure and download the SSH key" msgstr "自动配置并下载SSH密钥" -#: users/forms.py:203 +#: users/forms.py:204 msgid "Paste your id_rsa.pub here." msgstr "复制你的公钥到这里" -#: users/forms.py:231 users/models/user.py:79 +#: users/forms.py:232 users/models/user.py:79 #: users/templates/users/first_login.html:42 #: users/templates/users/user_password_update.html:45 #: users/templates/users/user_profile.html:68 @@ -2464,7 +2486,7 @@ msgstr "Agent" msgid "Date login" msgstr "登录日期" -#: users/models/user.py:30 users/models/user.py:339 +#: users/models/user.py:30 users/models/user.py:341 msgid "Administrator" msgstr "管理员" @@ -2506,7 +2528,7 @@ msgstr "微信" msgid "Source" msgstr "用户来源" -#: users/models/user.py:342 +#: users/models/user.py:344 msgid "Administrator is the super user of system" msgstr "Administrator是初始的超级管理员" @@ -2649,7 +2671,7 @@ msgid "Setting" msgstr "设置" #: users/templates/users/user_create.html:4 -#: users/templates/users/user_list.html:16 users/views/user.py:81 +#: users/templates/users/user_list.html:16 users/views/user.py:80 msgid "Create user" msgstr "创建用户" @@ -2658,7 +2680,7 @@ msgid "Reset link will be generated and sent to the user. " msgstr "生成重置密码连接,通过邮件发送给用户" #: users/templates/users/user_detail.html:19 -#: users/templates/users/user_granted_asset.html:18 users/views/user.py:175 +#: users/templates/users/user_granted_asset.html:18 users/views/user.py:174 msgid "User detail" msgstr "用户详情" @@ -2793,8 +2815,8 @@ msgstr "用户删除失败" msgid "Administrator Settings force MFA login" msgstr "管理员设置强制使用MFA登录" -#: users/templates/users/user_profile.html:116 users/views/user.py:204 -#: users/views/user.py:258 +#: users/templates/users/user_profile.html:116 users/views/user.py:203 +#: users/views/user.py:257 msgid "User groups" msgstr "用户组" @@ -2840,7 +2862,7 @@ msgid "" "corresponding private key." msgstr "新的公钥已设置成功,请下载对应的私钥" -#: users/templates/users/user_update.html:4 users/views/user.py:104 +#: users/templates/users/user_update.html:4 users/views/user.py:103 msgid "Update user" msgstr "更新用户" @@ -2998,7 +3020,7 @@ msgstr "用户组授权资产" msgid "Please enable cookies and try again." msgstr "设置你的浏览器支持cookie" -#: users/views/login.py:128 users/views/user.py:501 users/views/user.py:526 +#: users/views/login.py:128 users/views/user.py:498 users/views/user.py:523 msgid "MFA code invalid" msgstr "MFA码认证失败" @@ -3039,7 +3061,7 @@ msgstr "Token错误或失效" msgid "Password not same" msgstr "密码不一致" -#: users/views/login.py:239 users/views/user.py:116 users/views/user.py:399 +#: users/views/login.py:239 users/views/user.py:115 users/views/user.py:396 msgid "* Your password does not meet the requirements" msgstr "* 您的密码不符合要求" @@ -3051,46 +3073,46 @@ msgstr "首次登陆" msgid "Login log list" msgstr "登录日志" -#: users/views/user.py:128 +#: users/views/user.py:127 msgid "Bulk update user success" msgstr "批量更新用户成功" -#: users/views/user.py:233 +#: users/views/user.py:232 msgid "Invalid file." msgstr "文件不合法" -#: users/views/user.py:330 +#: users/views/user.py:329 msgid "User granted assets" msgstr "用户授权资产" -#: users/views/user.py:363 +#: users/views/user.py:360 msgid "Profile setting" msgstr "个人信息设置" -#: users/views/user.py:382 +#: users/views/user.py:379 msgid "Password update" msgstr "密码更新" -#: users/views/user.py:417 +#: users/views/user.py:414 msgid "Public key update" msgstr "密钥更新" -#: users/views/user.py:458 +#: users/views/user.py:455 msgid "Password invalid" msgstr "用户名或密码无效" -#: users/views/user.py:552 +#: users/views/user.py:549 msgid "MFA enable success" msgstr "MFA 绑定成功" -#: users/views/user.py:553 +#: users/views/user.py:550 msgid "MFA enable success, return login page" msgstr "MFA 绑定成功,返回到登录页面" -#: users/views/user.py:555 +#: users/views/user.py:552 msgid "MFA disable success" msgstr "MFA 解绑成功" -#: users/views/user.py:556 +#: users/views/user.py:553 msgid "MFA disable success, return login page" msgstr "MFA 解绑成功,返回登录页面" From f5a4370b80050de4e6dc744c26afe6aed5411a4e Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Mon, 11 Jun 2018 17:56:20 +0800 Subject: [PATCH 2/3] =?UTF-8?q?[Update]=20=E7=B3=BB=E7=BB=9F=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E9=80=89=E6=8B=A9=E6=89=8B=E5=8A=A8=E7=99=BB=E5=BD=95?= =?UTF-8?q?=EF=BC=8C=E5=8F=96=E6=B6=88=E8=87=AA=E5=8A=A8=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/forms/user.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/assets/forms/user.py b/apps/assets/forms/user.py index 0bc4ff094..c2a1d7b67 100644 --- a/apps/assets/forms/user.py +++ b/apps/assets/forms/user.py @@ -93,14 +93,20 @@ class SystemUserForm(PasswordAndKeyAuthForm): # Because we define custom field, so we need rewrite :method: `save` system_user = super().save() password = self.cleaned_data.get('password', '') or None + login_mode = self.cleaned_data.get('login_mode', '') or None auto_generate_key = self.cleaned_data.get('auto_generate_key', False) private_key, public_key = super().gen_keys() + if login_mode == SystemUser.MANUAL_LOGIN: + system_user.auto_push = 0 + system_user.save() + if auto_generate_key: logger.info('Auto generate key and set system user auth') system_user.auto_gen_auth() else: system_user.set_auth(password=password, private_key=private_key, public_key=public_key) + return system_user def clean(self): From 2e6d238c76110f9d17073febac78d3432a2e52ea Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Mon, 11 Jun 2018 19:09:24 +0800 Subject: [PATCH 3/3] =?UTF-8?q?[Bugfix]=20=E4=BF=AE=E5=A4=8D=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E7=94=A8=E6=88=B7=E9=80=89=E6=8B=A9=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E7=99=BB=E5=BD=95=EF=BC=8Cssh=E5=91=BD=E4=BB=A4=E8=A1=8C?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E8=8E=B7=E5=8F=96=E4=B8=8D=E5=88=B0login=5Fm?= =?UTF-8?q?ode=E5=AD=97=E6=AE=B5=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/system_user.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/assets/serializers/system_user.py b/apps/assets/serializers/system_user.py index 9caf150b4..7a4e3aadc 100644 --- a/apps/assets/serializers/system_user.py +++ b/apps/assets/serializers/system_user.py @@ -63,7 +63,10 @@ class AssetSystemUserSerializer(serializers.ModelSerializer): """ class Meta: model = SystemUser - fields = ('id', 'name', 'username', 'priority', 'protocol', 'comment',) + fields = ( + 'id', 'name', 'username', 'priority', + 'protocol', 'comment', 'login_mode' + ) class SystemUserSimpleSerializer(serializers.ModelSerializer):