From 6449f36c7ed007da4b2cfc2ce77282ff10447b79 Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Mon, 17 May 2021 19:11:28 +0800 Subject: [PATCH 01/16] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9=E6=96=87?= =?UTF-8?q?=E6=A1=88=20(#6129)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * perf: 修改i18n * perf: 修改文案 Co-authored-by: ibuler --- apps/locale/zh/LC_MESSAGES/django.po | 9 +++------ apps/settings/serializers/settings.py | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 0bd344d55..41403c0a4 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -2435,16 +2435,13 @@ msgstr "" #: settings/serializers/settings.py:172 msgid "Number of repeated historical passwords" -msgstr "历史密码可重复次数" +msgstr "不能设置近几次密码" #: settings/serializers/settings.py:173 msgid "" "Tip: When the user resets the password, it cannot be the previous n " -"historical passwords of the user (the value of n here is the value filled in " -"the input box)" -msgstr "" -"提示:用户重置密码时,不能为该用户前n次历史密码 (此处的n值即为输入框中填写的" -"值)" +"historical passwords of the user" +msgstr "提示:用户重置密码时,不能为该用户前几次使用过的密码" #: settings/serializers/settings.py:177 msgid "Password minimum length" diff --git a/apps/settings/serializers/settings.py b/apps/settings/serializers/settings.py index 28ddf1cd7..f26679c29 100644 --- a/apps/settings/serializers/settings.py +++ b/apps/settings/serializers/settings.py @@ -170,7 +170,7 @@ class SecuritySettingSerializer(serializers.Serializer): OLD_PASSWORD_HISTORY_LIMIT_COUNT = serializers.IntegerField( min_value=0, max_value=99999, required=True, label=_('Number of repeated historical passwords'), - help_text=_('Tip: When the user resets the password, it cannot be the previous n historical passwords of the user (the value of n here is the value filled in the input box)') + help_text=_('Tip: When the user resets the password, it cannot be the previous n historical passwords of the user') ) SECURITY_PASSWORD_MIN_LENGTH = serializers.IntegerField( min_value=6, max_value=30, required=True, From bf53df46dc8ebdd8f80b4c1dbdc623936e99d05b Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Mon, 17 May 2021 19:11:55 +0800 Subject: [PATCH 02/16] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=8C=85?= =?UTF-8?q?=E5=90=AB=E7=BB=84=E7=BB=87=E7=AE=A1=E7=90=86=E5=91=98=E6=97=B6?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E5=88=A0=E9=99=A4=E7=BB=84=E7=BB=87=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20(#6130)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bai --- apps/locale/zh/LC_MESSAGES/django.mo | Bin 75055 -> 74907 bytes apps/locale/zh/LC_MESSAGES/django.po | 37 +++++++++++++-------------- apps/orgs/api.py | 7 +++-- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 70c15aafc0ad5797565364e167bab1d948d1fb7a..1272a409d6bb7dce4f96f3e04df23de3c6b07b69 100644 GIT binary patch delta 22066 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 X+x+O=>+bDY{QqjVwQ}NsrXl|eJhf5w diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 41403c0a4..1434212a1 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: 2021-05-17 16:17+0800\n" +"POT-Creation-Date: 2021-05-17 18:56+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -1811,36 +1811,36 @@ msgstr "没有该主机 {} 权限" msgid "Operations" msgstr "运维" -#: ops/mixin.py:29 ops/mixin.py:92 ops/mixin.py:160 +#: ops/mixin.py:29 ops/mixin.py:92 ops/mixin.py:162 msgid "Cycle perform" msgstr "周期执行" -#: ops/mixin.py:33 ops/mixin.py:90 ops/mixin.py:109 ops/mixin.py:148 +#: ops/mixin.py:33 ops/mixin.py:90 ops/mixin.py:109 ops/mixin.py:150 msgid "Regularly perform" msgstr "定期执行" -#: ops/mixin.py:106 ops/mixin.py:145 +#: ops/mixin.py:106 ops/mixin.py:147 #: xpack/plugins/change_auth_plan/serializers.py:53 msgid "Periodic perform" msgstr "定时执行" -#: ops/mixin.py:111 +#: ops/mixin.py:112 msgid "Interval" msgstr "间隔" -#: ops/mixin.py:120 +#: ops/mixin.py:122 msgid "* Please enter a valid crontab expression" msgstr "* 请输入有效的 crontab 表达式" -#: ops/mixin.py:127 +#: ops/mixin.py:129 msgid "Range {} to {}" msgstr "输入在 {} - {} 范围之间" -#: ops/mixin.py:138 +#: ops/mixin.py:140 msgid "Require periodic or regularly perform setting" msgstr "需要周期或定期设置" -#: ops/mixin.py:149 +#: ops/mixin.py:151 msgid "" "eg: Every Sunday 03:05 run <5 3 * * 0>
Tips: Using 5 digits linux " "crontab expressions (在线工" "具
注意: 如果同时设置了定期执行和周期执行,优先使用定期执行" -#: ops/mixin.py:160 +#: ops/mixin.py:162 msgid "Tips: (Units: hour)" msgstr "提示:(单位: 时)" @@ -1962,12 +1962,11 @@ msgstr "更新任务内容: {}" msgid "Disk used more than 80%: {} => {}" msgstr "磁盘使用率超过 80%: {} => {}" -#: orgs/api.py:76 -#, python-brace-format -msgid "Have `{model._meta.verbose_name}` exists, Please delete" -msgstr "`{model._meta.verbose_name}` 存在数据, 请先删除" +#: orgs/api.py:79 +msgid "Have {} exists, Please delete" +msgstr "{} 存在数据, 请先删除" -#: orgs/api.py:80 +#: orgs/api.py:83 msgid "The current organization cannot be deleted" msgstr "当前组织不能被删除" @@ -3037,19 +3036,19 @@ msgstr "登录了" msgid "Filters" msgstr "过滤" -#: terminal/api/session.py:189 +#: terminal/api/session.py:185 msgid "Session does not exist: {}" msgstr "会话不存在: {}" -#: terminal/api/session.py:192 +#: terminal/api/session.py:188 msgid "Session is finished or the protocol not supported" msgstr "会话已经完成或协议不支持" -#: terminal/api/session.py:197 +#: terminal/api/session.py:193 msgid "User does not exist: {}" msgstr "用户不存在: {}" -#: terminal/api/session.py:201 +#: terminal/api/session.py:197 msgid "User does not have permission" msgstr "用户没有权限" diff --git a/apps/orgs/api.py b/apps/orgs/api.py index b241301a8..ace14112b 100644 --- a/apps/orgs/api.py +++ b/apps/orgs/api.py @@ -60,7 +60,10 @@ class OrgViewSet(BulkModelViewSet): @tmp_to_root_org() def get_data_from_model(self, model): if model == User: - data = model.objects.filter(orgs__id=self.org.id, m2m_org_members__role=ROLE.USER) + data = model.objects.filter( + orgs__id=self.org.id, + m2m_org_members__role__in=[ROLE.USER, ROLE.ADMIN, ROLE.AUDITOR] + ) elif model == Node: # 跟节点不能手动删除,所以排除检查 data = model.objects.filter(org_id=self.org.id).exclude(parent_key='', key__regex=r'^[0-9]+$') @@ -73,7 +76,7 @@ class OrgViewSet(BulkModelViewSet): for model in org_related_models: data = self.get_data_from_model(model) if data: - msg = _(f'Have `{model._meta.verbose_name}` exists, Please delete') + msg = _('Have {} exists, Please delete').format(model._meta.verbose_name) return Response(data={'error': msg}, status=status.HTTP_403_FORBIDDEN) else: if str(current_org) == str(self.org): From 2e118665f5944d9355aaaa8b8077e46c840d5da8 Mon Sep 17 00:00:00 2001 From: xinwen Date: Mon, 17 May 2021 19:50:13 +0800 Subject: [PATCH 03/16] =?UTF-8?q?fix:=20=E8=BF=87=E6=9C=9F=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E9=80=80=E5=87=BA=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/authentication/backends/api.py | 7 ++++++- apps/jumpserver/settings/auth.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/authentication/backends/api.py b/apps/authentication/backends/api.py index 63356eff6..9da3bbbc3 100644 --- a/apps/authentication/backends/api.py +++ b/apps/authentication/backends/api.py @@ -8,7 +8,7 @@ from django.core.cache import cache from django.utils.translation import ugettext as _ from six import text_type from django.contrib.auth import get_user_model -from django.contrib.auth.backends import ModelBackend +from django.contrib.auth.backends import ModelBackend as DJModelBackend from rest_framework import HTTP_HEADER_ENCODING from rest_framework import authentication, exceptions from common.auth import signature @@ -25,6 +25,11 @@ def get_request_date_header(request): return date +class ModelBackend(DJModelBackend): + def user_can_authenticate(self, user): + return user.is_valid + + class AccessKeyAuthentication(authentication.BaseAuthentication): """App使用Access key进行签名认证, 目前签名算法比较简单, app注册或者手动建立后,会生成 access_key_id 和 access_key_secret, diff --git a/apps/jumpserver/settings/auth.py b/apps/jumpserver/settings/auth.py index 9fe5886c0..502146f13 100644 --- a/apps/jumpserver/settings/auth.py +++ b/apps/jumpserver/settings/auth.py @@ -120,7 +120,7 @@ LOGIN_CONFIRM_ENABLE = CONFIG.LOGIN_CONFIRM_ENABLE OTP_IN_RADIUS = CONFIG.OTP_IN_RADIUS -AUTH_BACKEND_MODEL = 'django.contrib.auth.backends.ModelBackend' +AUTH_BACKEND_MODEL = 'authentication.backends.api.ModelBackend' AUTH_BACKEND_PUBKEY = 'authentication.backends.pubkey.PublicKeyAuthBackend' AUTH_BACKEND_LDAP = 'authentication.backends.ldap.LDAPAuthorizationBackend' AUTH_BACKEND_OIDC_PASSWORD = 'jms_oidc_rp.backends.OIDCAuthPasswordBackend' From ba28f3263d7d818d729c6b3c45d27756e31f26f7 Mon Sep 17 00:00:00 2001 From: xinwen Date: Tue, 18 May 2021 13:55:44 +0800 Subject: [PATCH 04/16] =?UTF-8?q?fix:=20=E4=BC=81=E4=B8=9A=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1&=E9=92=89=E9=92=89=E8=A7=A3=E7=BB=91=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/authentication/api/dingtalk.py | 2 +- apps/authentication/api/wecom.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/authentication/api/dingtalk.py b/apps/authentication/api/dingtalk.py index e4b2ea85b..ce1732118 100644 --- a/apps/authentication/api/dingtalk.py +++ b/apps/authentication/api/dingtalk.py @@ -21,7 +21,7 @@ class DingTalkQRUnBindBase(APIView): if not user.dingtalk_id: raise errors.DingTalkNotBound - user.dingtalk_id = '' + user.dingtalk_id = None user.save() return Response() diff --git a/apps/authentication/api/wecom.py b/apps/authentication/api/wecom.py index 1ab5ff725..c66da5f79 100644 --- a/apps/authentication/api/wecom.py +++ b/apps/authentication/api/wecom.py @@ -21,7 +21,7 @@ class WeComQRUnBindBase(APIView): if not user.wecom_id: raise errors.WeComNotBound - user.wecom_id = '' + user.wecom_id = None user.save() return Response() From f9ca46dd6737eccd7e40843a5cd931865eb678d1 Mon Sep 17 00:00:00 2001 From: xinwen Date: Mon, 17 May 2021 19:32:12 +0800 Subject: [PATCH 05/16] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=8E=86=E5=8F=B2=E5=AF=86=E7=A0=81=E5=9C=A8=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E6=97=B6=E4=B8=8D=E8=B5=B7=E4=BD=9C=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/users/models/user.py | 16 +++++++--------- apps/users/serializers/profile.py | 2 -- apps/users/signals_handler.py | 18 +++++++++++++++++- apps/users/views/profile/reset.py | 2 -- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/apps/users/models/user.py b/apps/users/models/user.py index 715f02b9d..97a9e3d6d 100644 --- a/apps/users/models/user.py +++ b/apps/users/models/user.py @@ -7,8 +7,6 @@ import string import random import datetime -from functools import partial - from django.conf import settings from django.contrib.auth.models import AbstractUser from django.contrib.auth.hashers import check_password, make_password @@ -30,7 +28,7 @@ from users.exceptions import MFANotEnabled from ..signals import post_user_change_password -__all__ = ['User'] +__all__ = ['User', 'UserPasswordHistory'] logger = get_logger(__file__) @@ -83,12 +81,6 @@ class AuthMixin: else: return False - def save_history_password(self, password): - UserPasswordHistory.objects.create( - user=self, password=make_password(password), - date_created=self.date_password_last_updated - ) - def is_public_key_valid(self): """ Check if the user's ssh public key is valid. @@ -771,3 +763,9 @@ class UserPasswordHistory(models.Model): user = models.ForeignKey("users.User", related_name='history_passwords', on_delete=models.CASCADE, verbose_name=_('User')) date_created = models.DateTimeField(auto_now_add=True, verbose_name=_("Date created")) + + def __str__(self): + return f'{self.user} set at {self.date_created}' + + def __repr__(self): + return self.__str__() diff --git a/apps/users/serializers/profile.py b/apps/users/serializers/profile.py index 261dd6f01..c1caf1f99 100644 --- a/apps/users/serializers/profile.py +++ b/apps/users/serializers/profile.py @@ -39,8 +39,6 @@ class UserUpdatePasswordSerializer(serializers.ModelSerializer): limit_count = settings.OLD_PASSWORD_HISTORY_LIMIT_COUNT msg = _('The new password cannot be the last {} passwords').format(limit_count) raise serializers.ValidationError(msg) - else: - self.instance.save_history_password(value) return value def validate_new_password_again(self, value): diff --git a/apps/users/signals_handler.py b/apps/users/signals_handler.py index 887531f45..9831367fc 100644 --- a/apps/users/signals_handler.py +++ b/apps/users/signals_handler.py @@ -6,17 +6,33 @@ from django_auth_ldap.backend import populate_user from django.conf import settings from django.core.exceptions import PermissionDenied from django_cas_ng.signals import cas_user_authenticated +from django.db.models.signals import post_save from jms_oidc_rp.signals import openid_create_or_update_user from common.utils import get_logger from .signals import post_user_create -from .models import User +from .models import User, UserPasswordHistory logger = get_logger(__file__) +@receiver(post_save, sender=User) +def save_passwd_change(sender, instance: User, **kwargs): + passwds = UserPasswordHistory.objects.filter(user=instance).order_by('-date_created')\ + .values_list('password', flat=True)[:int(settings.OLD_PASSWORD_HISTORY_LIMIT_COUNT)] + + for p in passwds: + if instance.password == p: + break + else: + UserPasswordHistory.objects.create( + user=instance, password=instance.password, + date_created=instance.date_password_last_updated + ) + + @receiver(post_user_create) def on_user_create(sender, user=None, **kwargs): logger.debug("Receive user `{}` create signal".format(user.name)) diff --git a/apps/users/views/profile/reset.py b/apps/users/views/profile/reset.py index 356694020..ba9cfd9b7 100644 --- a/apps/users/views/profile/reset.py +++ b/apps/users/views/profile/reset.py @@ -111,8 +111,6 @@ class UserResetPasswordView(FormView): error = _('* The new password cannot be the last {} passwords').format(limit_count) form.add_error('new_password', error) return self.form_invalid(form) - else: - user.save_history_password(password) user.reset_password(password) User.expired_reset_password_token(token) From 77b4847bd90491e8d6b468447a6acb6fc608c8c8 Mon Sep 17 00:00:00 2001 From: xinwen Date: Wed, 19 May 2021 14:51:24 +0800 Subject: [PATCH 06/16] =?UTF-8?q?fix:=20=E6=9C=89=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E4=BC=9A=E8=AF=9D=E7=9A=84=E7=BB=88=E7=AB=AF=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/locale/zh/LC_MESSAGES/django.mo | Bin 74907 -> 75305 bytes apps/locale/zh/LC_MESSAGES/django.po | 160 +++++++++++++++------------ apps/terminal/api/terminal.py | 14 ++- 3 files changed, 103 insertions(+), 71 deletions(-) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 1272a409d6bb7dce4f96f3e04df23de3c6b07b69..a43fbc6ce7dc58e810a82659d1b7331fa7378b4a 100644 GIT binary patch delta 22520 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 aaje^|Bkn@RfLbZ%2IUH<7{{(hCiyS(6u963 delta 22296 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 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 1434212a1..2f6862ff8 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: 2021-05-17 18:56+0800\n" +"POT-Creation-Date: 2021-05-19 14:48+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -25,7 +25,7 @@ msgstr "" #: orgs/models.py:23 perms/models/base.py:49 settings/models.py:29 #: terminal/models/storage.py:23 terminal/models/storage.py:90 #: terminal/models/task.py:16 terminal/models/terminal.py:100 -#: users/forms/profile.py:32 users/models/group.py:15 users/models/user.py:558 +#: users/forms/profile.py:32 users/models/group.py:15 users/models/user.py:550 #: users/templates/users/_select_user_modal.html:13 #: users/templates/users/user_asset_permission.html:37 #: users/templates/users/user_asset_permission.html:154 @@ -61,7 +61,7 @@ msgstr "激活中" #: orgs/models.py:26 perms/models/base.py:57 settings/models.py:34 #: terminal/models/storage.py:29 terminal/models/storage.py:96 #: terminal/models/terminal.py:114 tickets/models/ticket.py:73 -#: users/models/group.py:16 users/models/user.py:591 +#: users/models/group.py:16 users/models/user.py:583 #: xpack/plugins/change_auth_plan/models.py:77 xpack/plugins/cloud/models.py:35 #: xpack/plugins/cloud/models.py:98 xpack/plugins/gathered_user/models.py:26 msgid "Comment" @@ -98,8 +98,8 @@ msgstr "动作" #: perms/models/base.py:50 templates/index.html:78 #: terminal/backends/command/models.py:18 #: terminal/backends/command/serializers.py:12 terminal/models/session.py:38 -#: tickets/models/comment.py:17 users/models/user.py:184 -#: users/models/user.py:746 users/models/user.py:772 +#: tickets/models/comment.py:17 users/models/user.py:176 +#: users/models/user.py:738 users/models/user.py:764 #: users/serializers/group.py:20 #: users/templates/users/user_asset_permission.html:38 #: users/templates/users/user_asset_permission.html:64 @@ -180,7 +180,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. " #: applications/serializers/attrs/application_type/vmware_client.py:26 #: assets/models/base.py:251 assets/models/gathered_user.py:15 #: audits/models.py:100 authentication/forms.py:15 authentication/forms.py:17 -#: ops/models/adhoc.py:148 users/forms/profile.py:31 users/models/user.py:556 +#: ops/models/adhoc.py:148 users/forms/profile.py:31 users/models/user.py:548 #: users/templates/users/_select_user_modal.html:14 #: xpack/plugins/change_auth_plan/models.py:47 #: xpack/plugins/change_auth_plan/models.py:278 @@ -483,7 +483,7 @@ msgstr "标签管理" #: assets/models/cluster.py:28 assets/models/cmd_filter.py:26 #: assets/models/cmd_filter.py:67 assets/models/group.py:21 #: common/db/models.py:70 common/mixins/models.py:49 orgs/models.py:24 -#: orgs/models.py:422 perms/models/base.py:55 users/models/user.py:599 +#: orgs/models.py:422 perms/models/base.py:55 users/models/user.py:591 #: users/serializers/group.py:35 xpack/plugins/change_auth_plan/models.py:81 #: xpack/plugins/cloud/models.py:104 xpack/plugins/gathered_user/models.py:30 msgid "Created by" @@ -497,7 +497,7 @@ msgstr "创建者" #: assets/models/label.py:25 common/db/models.py:72 common/mixins/models.py:50 #: ops/models/adhoc.py:38 ops/models/command.py:29 orgs/models.py:25 #: orgs/models.py:420 perms/models/base.py:56 users/models/group.py:18 -#: users/models/user.py:773 xpack/plugins/cloud/models.py:107 +#: users/models/user.py:765 xpack/plugins/cloud/models.py:107 msgid "Date created" msgstr "创建日期" @@ -543,7 +543,7 @@ msgstr "带宽" msgid "Contact" msgstr "联系人" -#: assets/models/cluster.py:22 users/models/user.py:577 +#: assets/models/cluster.py:22 users/models/user.py:569 msgid "Phone" msgstr "手机" @@ -569,7 +569,7 @@ msgid "Default" msgstr "默认" #: assets/models/cluster.py:36 assets/models/label.py:14 -#: users/models/user.py:758 +#: users/models/user.py:750 msgid "System" msgstr "系统" @@ -814,11 +814,11 @@ msgid "Backend" msgstr "后端" #: assets/serializers/asset_user.py:80 users/forms/profile.py:160 -#: users/models/user.py:588 users/templates/users/user_password_update.html:48 +#: users/models/user.py:580 users/templates/users/user_password_update.html:48 msgid "Public key" msgstr "SSH公钥" -#: assets/serializers/asset_user.py:84 users/models/user.py:585 +#: assets/serializers/asset_user.py:84 users/models/user.py:577 msgid "Private key" msgstr "ssh私钥" @@ -1127,8 +1127,8 @@ msgstr "用户代理" #: audits/models.py:105 #: authentication/templates/authentication/_mfa_confirm_modal.html:14 #: authentication/templates/authentication/login_otp.html:6 -#: users/forms/profile.py:64 users/models/user.py:580 -#: users/serializers/profile.py:104 +#: users/forms/profile.py:64 users/models/user.py:572 +#: users/serializers/profile.py:102 msgid "MFA" msgstr "多因子认证" @@ -1218,54 +1218,54 @@ msgstr "钉钉" msgid "Code is invalid" msgstr "Code无效" -#: authentication/backends/api.py:52 +#: authentication/backends/api.py:57 msgid "Invalid signature header. No credentials provided." msgstr "" -#: authentication/backends/api.py:55 +#: authentication/backends/api.py:60 msgid "Invalid signature header. Signature string should not contain spaces." msgstr "" -#: authentication/backends/api.py:62 +#: authentication/backends/api.py:67 msgid "Invalid signature header. Format like AccessKeyId:Signature" msgstr "" -#: authentication/backends/api.py:66 +#: authentication/backends/api.py:71 msgid "" "Invalid signature header. Signature string should not contain invalid " "characters." msgstr "" -#: authentication/backends/api.py:86 authentication/backends/api.py:102 +#: authentication/backends/api.py:91 authentication/backends/api.py:107 msgid "Invalid signature." msgstr "" -#: authentication/backends/api.py:93 +#: authentication/backends/api.py:98 msgid "HTTP header: Date not provide or not %a, %d %b %Y %H:%M:%S GMT" msgstr "" -#: authentication/backends/api.py:98 +#: authentication/backends/api.py:103 msgid "Expired, more than 15 minutes" msgstr "" -#: authentication/backends/api.py:105 +#: authentication/backends/api.py:110 msgid "User disabled." msgstr "用户已禁用" -#: authentication/backends/api.py:123 +#: authentication/backends/api.py:128 msgid "Invalid token header. No credentials provided." msgstr "" -#: authentication/backends/api.py:126 +#: authentication/backends/api.py:131 msgid "Invalid token header. Sign string should not contain spaces." msgstr "" -#: authentication/backends/api.py:133 +#: authentication/backends/api.py:138 msgid "" "Invalid token header. Sign string should not contain invalid characters." msgstr "" -#: authentication/backends/api.py:144 +#: authentication/backends/api.py:149 msgid "Invalid token or cache refreshed." msgstr "" @@ -1437,13 +1437,13 @@ msgid "Show" msgstr "显示" #: authentication/templates/authentication/_access_key_modal.html:66 -#: users/models/user.py:470 users/serializers/profile.py:101 +#: users/models/user.py:462 users/serializers/profile.py:99 #: users/templates/users/user_verify_mfa.html:32 msgid "Disable" msgstr "禁用" #: authentication/templates/authentication/_access_key_modal.html:67 -#: users/models/user.py:471 users/serializers/profile.py:102 +#: users/models/user.py:463 users/serializers/profile.py:100 msgid "Enable" msgstr "启用" @@ -1547,48 +1547,56 @@ msgstr "返回" msgid "Copy success" msgstr "复制成功" -#: authentication/views/dingtalk.py:41 authentication/views/wecom.py:41 +#: authentication/views/dingtalk.py:41 +msgid "DingTalk Error, Please contact your system administrator" +msgstr "钉钉错误,请联系系统管理员" + +#: authentication/views/dingtalk.py:44 +msgid "DingTalk Error" +msgstr "钉钉错误" + +#: authentication/views/dingtalk.py:56 authentication/views/wecom.py:56 msgid "You've been hacked" msgstr "你被攻击了" -#: authentication/views/dingtalk.py:77 +#: authentication/views/dingtalk.py:92 msgid "DingTalk is already bound" msgstr "钉钉已经绑定" -#: authentication/views/dingtalk.py:90 authentication/views/wecom.py:89 +#: authentication/views/dingtalk.py:105 authentication/views/wecom.py:104 msgid "Please verify your password first" msgstr "请检查密码" -#: authentication/views/dingtalk.py:114 authentication/views/wecom.py:113 +#: authentication/views/dingtalk.py:129 authentication/views/wecom.py:128 msgid "Invalid user_id" msgstr "无效的 user_id" -#: authentication/views/dingtalk.py:130 +#: authentication/views/dingtalk.py:145 msgid "DingTalk query user failed" msgstr "钉钉查询用户失败" -#: authentication/views/dingtalk.py:139 +#: authentication/views/dingtalk.py:154 msgid "The DingTalk is already bound to another user" msgstr "该钉钉已经绑定其他用户" -#: authentication/views/dingtalk.py:144 authentication/views/dingtalk.py:227 -#: authentication/views/dingtalk.py:228 +#: authentication/views/dingtalk.py:159 authentication/views/dingtalk.py:242 +#: authentication/views/dingtalk.py:243 msgid "Binding DingTalk successfully" msgstr "绑定 钉钉 成功" -#: authentication/views/dingtalk.py:196 +#: authentication/views/dingtalk.py:211 msgid "Failed to get user from DingTalk" msgstr "从钉钉获取用户失败" -#: authentication/views/dingtalk.py:202 +#: authentication/views/dingtalk.py:217 msgid "DingTalk is not bound" msgstr "钉钉没有绑定" -#: authentication/views/dingtalk.py:203 authentication/views/wecom.py:201 +#: authentication/views/dingtalk.py:218 authentication/views/wecom.py:216 msgid "Please login with a password and then bind the WeCom" msgstr "请使用密码登录,然后绑定企业微信" -#: authentication/views/dingtalk.py:245 authentication/views/dingtalk.py:246 +#: authentication/views/dingtalk.py:260 authentication/views/dingtalk.py:261 msgid "Binding DingTalk failed" msgstr "绑定钉钉失败" @@ -1624,32 +1632,40 @@ msgstr "退出登录成功" msgid "Logout success, return login page" msgstr "退出登录成功,返回到登录页面" -#: authentication/views/wecom.py:76 +#: authentication/views/wecom.py:41 +msgid "WeCom Error, Please contact your system administrator" +msgstr "企业微信错误,请联系系统管理员" + +#: authentication/views/wecom.py:44 +msgid "WeCom Error" +msgstr "企业微信错误" + +#: authentication/views/wecom.py:91 msgid "WeCom is already bound" msgstr "企业微信已经绑定" -#: authentication/views/wecom.py:128 +#: authentication/views/wecom.py:143 msgid "WeCom query user failed" msgstr "企业微信查询用户失败" -#: authentication/views/wecom.py:137 +#: authentication/views/wecom.py:152 msgid "The WeCom is already bound to another user" msgstr "该企业微信已经绑定其他用户" -#: authentication/views/wecom.py:142 authentication/views/wecom.py:225 -#: authentication/views/wecom.py:226 +#: authentication/views/wecom.py:157 authentication/views/wecom.py:240 +#: authentication/views/wecom.py:241 msgid "Binding WeCom successfully" msgstr "绑定 企业微信 成功" -#: authentication/views/wecom.py:194 +#: authentication/views/wecom.py:209 msgid "Failed to get user from WeCom" msgstr "从企业微信获取用户失败" -#: authentication/views/wecom.py:200 +#: authentication/views/wecom.py:215 msgid "WeCom is not bound" msgstr "没有绑定企业微信" -#: authentication/views/wecom.py:243 authentication/views/wecom.py:244 +#: authentication/views/wecom.py:258 authentication/views/wecom.py:259 msgid "Binding WeCom failed" msgstr "绑定企业微信失败" @@ -1675,7 +1691,7 @@ msgstr "对象" msgid "The file content overflowed (The maximum length `{}` bytes)" msgstr "文件内容太大 (最大长度 `{}` 字节)" -#: common/drf/parsers/base.py:146 +#: common/drf/parsers/base.py:148 msgid "Parse file error: {}" msgstr "解析文件错误: {}" @@ -1988,7 +2004,7 @@ msgstr "组织审计员" msgid "GLOBAL" msgstr "全局组织" -#: orgs/models.py:419 users/models/user.py:568 +#: orgs/models.py:419 users/models/user.py:560 #: users/templates/users/_select_user_modal.html:15 msgid "Role" msgstr "角色" @@ -2001,7 +2017,7 @@ msgstr "管理员正在修改授权,请稍等" msgid "The authorization cannot be revoked for the time being" msgstr "该授权暂时不能撤销" -#: perms/models/application_permission.py:27 users/models/user.py:185 +#: perms/models/application_permission.py:27 users/models/user.py:177 msgid "Application" msgstr "应用程序" @@ -2060,7 +2076,7 @@ msgid "Favorite" msgstr "收藏夹" #: perms/models/base.py:51 templates/_nav.html:21 users/models/group.py:31 -#: users/models/user.py:564 users/templates/users/_select_user_modal.html:16 +#: users/models/user.py:556 users/templates/users/_select_user_modal.html:16 #: users/templates/users/user_asset_permission.html:39 #: users/templates/users/user_asset_permission.html:67 #: users/templates/users/user_database_app_permission.html:38 @@ -2073,7 +2089,7 @@ msgstr "用户组" #: tickets/serializers/ticket/meta/ticket_type/apply_application.py:77 #: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:43 #: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:81 -#: users/models/user.py:596 +#: users/models/user.py:588 msgid "Date expired" msgstr "失效日期" @@ -3080,6 +3096,10 @@ msgstr "测试成功" msgid "Test failure: Account invalid" msgstr "测试失败: 账户无效" +#: terminal/api/terminal.py:38 terminal/api/terminal.py:43 +msgid "Have online sessions" +msgstr "有在线会话" + #: terminal/backends/command/es.py:27 msgid "Invalid elasticsearch config" msgstr "无效的 Elasticsearch 配置" @@ -3816,7 +3836,7 @@ msgstr "确认密码" msgid "Password does not match" msgstr "密码不一致" -#: users/forms/profile.py:101 users/models/user.py:560 +#: users/forms/profile.py:101 users/models/user.py:552 msgid "Email" msgstr "邮件" @@ -3848,48 +3868,48 @@ msgstr "复制你的公钥到这里" msgid "Public key should not be the same as your old one." msgstr "不能和原来的密钥相同" -#: users/forms/profile.py:149 users/serializers/profile.py:76 -#: users/serializers/profile.py:150 users/serializers/profile.py:163 +#: users/forms/profile.py:149 users/serializers/profile.py:74 +#: users/serializers/profile.py:148 users/serializers/profile.py:161 msgid "Not a valid ssh public key" msgstr "SSH密钥不合法" -#: users/models/user.py:182 +#: users/models/user.py:174 msgid "System administrator" msgstr "系统管理员" -#: users/models/user.py:183 +#: users/models/user.py:175 msgid "System auditor" msgstr "系统审计员" -#: users/models/user.py:472 +#: users/models/user.py:464 msgid "Force enable" msgstr "强制启用" -#: users/models/user.py:537 +#: users/models/user.py:529 msgid "Local" msgstr "数据库" -#: users/models/user.py:571 +#: users/models/user.py:563 msgid "Avatar" msgstr "头像" -#: users/models/user.py:574 +#: users/models/user.py:566 msgid "Wechat" msgstr "微信" -#: users/models/user.py:604 +#: users/models/user.py:596 msgid "Source" msgstr "用户来源" -#: users/models/user.py:608 +#: users/models/user.py:600 msgid "Date password last updated" msgstr "最后更新密码日期" -#: users/models/user.py:754 +#: users/models/user.py:746 msgid "Administrator" msgstr "管理员" -#: users/models/user.py:757 +#: users/models/user.py:749 msgid "Administrator is the super user of system" msgstr "Administrator是初始的超级管理员" @@ -3905,11 +3925,11 @@ msgstr "密码不满足安全规则" msgid "The new password cannot be the last {} passwords" msgstr "新密码不能是最近 {} 次的密码" -#: users/serializers/profile.py:48 +#: users/serializers/profile.py:46 msgid "The newly set password is inconsistent" msgstr "两次密码不一致" -#: users/serializers/profile.py:121 users/serializers/user.py:80 +#: users/serializers/profile.py:119 users/serializers/user.py:80 msgid "Is first login" msgstr "首次登录" @@ -4277,7 +4297,7 @@ msgstr "" "
\n" " " -#: users/utils.py:116 users/views/profile/reset.py:126 +#: users/utils.py:116 users/views/profile/reset.py:124 msgid "Reset password success" msgstr "重置密码成功" @@ -4549,7 +4569,7 @@ msgstr "用户认证源来自 {}, 请去相应系统修改密码" msgid "* The new password cannot be the last {} passwords" msgstr "* 新密码不能是最近 {} 次的密码" -#: users/views/profile/reset.py:127 +#: users/views/profile/reset.py:125 msgid "Reset password success, return to login page" msgstr "重置密码成功,返回到登录页面" diff --git a/apps/terminal/api/terminal.py b/apps/terminal/api/terminal.py index 5ee19b3e2..a5ccf8001 100644 --- a/apps/terminal/api/terminal.py +++ b/apps/terminal/api/terminal.py @@ -8,8 +8,9 @@ from rest_framework import generics from rest_framework.views import APIView, Response from rest_framework import status from django.conf import settings +from django.utils.translation import gettext_lazy as _ - +from common.exceptions import JMSException from common.drf.api import JMSBulkModelViewSet from common.utils import get_object_or_none from common.permissions import IsAppUser, IsSuperUser, WithBootstrapToken @@ -30,6 +31,17 @@ class TerminalViewSet(JMSBulkModelViewSet): permission_classes = (IsSuperUser,) filterset_fields = ['name', 'remote_addr', 'type'] + def destroy(self, request, *args, **kwargs): + instance = self.get_object() + if instance.get_online_session_count() > 0: + raise JMSException( + code='have_online_session', + detail=_('Have online sessions') + ) + + self.perform_destroy(instance) + return Response(status=status.HTTP_204_NO_CONTENT) + def create(self, request, *args, **kwargs): if isinstance(request.data, list): raise exceptions.BulkCreateNotSupport() From f7f9331c4861f3bad49bdd4dd3a0e0f5aac9b115 Mon Sep 17 00:00:00 2001 From: Bai Date: Wed, 19 May 2021 17:47:21 +0800 Subject: [PATCH 07/16] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DDashboard?= =?UTF-8?q?=E6=B4=BB=E8=B7=83=E7=94=A8=E6=88=B7=E6=95=B0=E6=8D=AE=E4=B8=8D?= =?UTF-8?q?=E5=87=86=E7=A1=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/jumpserver/api.py | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/jumpserver/api.py b/apps/jumpserver/api.py index 9e9ceeda6..6be2e4407 100644 --- a/apps/jumpserver/api.py +++ b/apps/jumpserver/api.py @@ -189,6 +189,7 @@ class DatesLoginMetricMixin: def get_dates_login_times_top10_users(self): users = self.sessions_queryset.values("user_id") \ .annotate(total=Count("user_id")) \ + .annotate(user=Max('user')) \ .annotate(last=Max("date_start")).order_by("-total")[:10] for user in users: user['last'] = str(user['last']) From ac5f2c560d610a015d1b547c9cbd77749088413e Mon Sep 17 00:00:00 2001 From: "fghbng@qq.com" Date: Wed, 19 May 2021 17:33:04 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BD=91=E5=85=B3?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8E=B7=E5=8F=96=E5=88=B0=E4=BA=86=E6=98=8E?= =?UTF-8?q?=E6=96=87=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/domain.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/assets/serializers/domain.py b/apps/assets/serializers/domain.py index 5f0a44ec2..0d9c4a6f5 100644 --- a/apps/assets/serializers/domain.py +++ b/apps/assets/serializers/domain.py @@ -61,7 +61,9 @@ class GatewaySerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer): fields_fk = ['domain'] fields = fields_small + fields_fk extra_kwargs = { - 'password': {'validators': [NoSpecialChars()]} + 'password': {'write_only': True, 'validators': [NoSpecialChars()]}, + 'private_key': {"write_only": True}, + 'public_key': {"write_only": True}, } def __init__(self, *args, **kwargs): From 3eba92548b2b5c862eb5ce50dda98a2883dae2f8 Mon Sep 17 00:00:00 2001 From: xinwen Date: Wed, 19 May 2021 15:51:55 +0800 Subject: [PATCH 09/16] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E4=BC=81?= =?UTF-8?q?=E4=B8=9A=E5=BE=AE=E4=BF=A1&=E9=92=89=E9=92=89=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E5=B0=8F=E9=97=AE=E9=A2=98=E5=92=8C=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/authentication/views/dingtalk.py | 2 +- apps/authentication/views/wecom.py | 2 +- apps/locale/zh/LC_MESSAGES/django.mo | Bin 75305 -> 75231 bytes apps/locale/zh/LC_MESSAGES/django.po | 24 +++++++++++------------- apps/settings/api/dingtalk.py | 15 ++++++++++----- apps/settings/api/wecom.py | 15 ++++++++++----- 6 files changed, 33 insertions(+), 25 deletions(-) diff --git a/apps/authentication/views/dingtalk.py b/apps/authentication/views/dingtalk.py index 24861b979..6243b80b7 100644 --- a/apps/authentication/views/dingtalk.py +++ b/apps/authentication/views/dingtalk.py @@ -2,7 +2,7 @@ import urllib from django.http.response import HttpResponseRedirect from django.utils.decorators import method_decorator -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.views.decorators.cache import never_cache from django.views.generic import TemplateView from django.views import View diff --git a/apps/authentication/views/wecom.py b/apps/authentication/views/wecom.py index 981c12508..b7b2a707b 100644 --- a/apps/authentication/views/wecom.py +++ b/apps/authentication/views/wecom.py @@ -2,7 +2,7 @@ import urllib from django.http.response import HttpResponseRedirect from django.utils.decorators import method_decorator -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.views.decorators.cache import never_cache from django.views.generic import TemplateView from django.views import View diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index a43fbc6ce7dc58e810a82659d1b7331fa7378b4a..4056fe77cd908f585530467c6701dc86d5e84f7d 100644 GIT binary patch delta 21947 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 a)i`@II@SMC5tBbbK+nLKAA$m+)BQgaGRd|8 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 2f6862ff8..c456368c8 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: 2021-05-19 14:48+0800\n" +"POT-Creation-Date: 2021-05-19 16:27+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -2146,13 +2146,9 @@ msgstr "邮件已经发送{}, 请检查" msgid "Welcome to the JumpServer open source Bastion Host" msgstr "欢迎使用JumpServer开源堡垒机" -#: settings/api/dingtalk.py:29 -msgid "AppSecret is required" -msgstr "AppSecret 是必须的" - -#: settings/api/dingtalk.py:35 settings/api/wecom.py:35 -msgid "OK" -msgstr "" +#: settings/api/dingtalk.py:36 settings/api/wecom.py:36 +msgid "Test success" +msgstr "测试成功" #: settings/api/ldap.py:189 msgid "Get ldap users is None" @@ -2162,10 +2158,6 @@ msgstr "获取 LDAP 用户为 None" msgid "Imported {} users successfully" msgstr "导入 {} 个用户成功" -#: settings/api/wecom.py:29 -msgid "Secret is required" -msgstr "Secret 是必须的" - #: settings/models.py:123 users/templates/users/reset_password.html:29 msgid "Setting" msgstr "设置" @@ -3096,7 +3088,7 @@ msgstr "测试成功" msgid "Test failure: Account invalid" msgstr "测试失败: 账户无效" -#: terminal/api/terminal.py:38 terminal/api/terminal.py:43 +#: terminal/api/terminal.py:39 msgid "Have online sessions" msgstr "有在线会话" @@ -5049,6 +5041,12 @@ msgstr "旗舰版" msgid "Community edition" msgstr "社区版" +#~ msgid "AppSecret is required" +#~ msgstr "AppSecret 是必须的" + +#~ msgid "Secret is required" +#~ msgstr "Secret 是必须的" + #~ msgid "Corporation ID(corpid)" #~ msgstr "企业 ID(CorpId)" diff --git a/apps/settings/api/dingtalk.py b/apps/settings/api/dingtalk.py index 4e4a73bf7..bbbfc28a8 100644 --- a/apps/settings/api/dingtalk.py +++ b/apps/settings/api/dingtalk.py @@ -25,13 +25,18 @@ class DingTalkTestingAPI(GenericAPIView): if not dingtalk_appsecret: secret = Setting.objects.filter(name='DINGTALK_APPSECRET').first() - if not secret: - return Response(status=status.HTTP_400_BAD_REQUEST, data={'error': _('AppSecret is required')}) - dingtalk_appsecret = secret.cleaned_value + if secret: + dingtalk_appsecret = secret.cleaned_value + + dingtalk_appsecret = dingtalk_appsecret or '' try: dingtalk = DingTalk(appid=dingtalk_appkey, appsecret=dingtalk_appsecret, agentid=dingtalk_agentid) dingtalk.send_text(['test'], 'test') - return Response(status=status.HTTP_200_OK, data={'msg': _('OK')}) + return Response(status=status.HTTP_200_OK, data={'msg': _('Test success')}) except APIException as e: - return Response(status=status.HTTP_400_BAD_REQUEST, data={'error': e.detail}) + try: + error = e.detail['errmsg'] + except: + error = e.detail + return Response(status=status.HTTP_400_BAD_REQUEST, data={'error': error}) diff --git a/apps/settings/api/wecom.py b/apps/settings/api/wecom.py index 5059b7647..39d1576b5 100644 --- a/apps/settings/api/wecom.py +++ b/apps/settings/api/wecom.py @@ -25,13 +25,18 @@ class WeComTestingAPI(GenericAPIView): if not wecom_corpsecret: secret = Setting.objects.filter(name='WECOM_SECRET').first() - if not secret: - return Response(status=status.HTTP_400_BAD_REQUEST, data={'error': _('Secret is required')}) - wecom_corpsecret = secret.cleaned_value + if secret: + wecom_corpsecret = secret.cleaned_value + + wecom_corpsecret = wecom_corpsecret or '' try: wecom = WeCom(corpid=wecom_corpid, corpsecret=wecom_corpsecret, agentid=wecom_agentid) wecom.send_text(['test'], 'test') - return Response(status=status.HTTP_200_OK, data={'msg': _('OK')}) + return Response(status=status.HTTP_200_OK, data={'msg': _('Test success')}) except APIException as e: - return Response(status=status.HTTP_400_BAD_REQUEST, data={'error': e.detail}) + try: + error = e.detail['errmsg'] + except: + error = e.detail + return Response(status=status.HTTP_400_BAD_REQUEST, data={'error': error}) From 23dbdaf6c06da3a68498870d3dbf73f53b0e0a5c Mon Sep 17 00:00:00 2001 From: xinwen Date: Wed, 19 May 2021 17:59:15 +0800 Subject: [PATCH 10/16] =?UTF-8?q?fix:=20=E7=B3=BB=E7=BB=9F=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E9=87=8C=E6=B5=8B=E8=AF=95=E8=B5=84=E4=BA=A7=E5=8F=AF?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=80=A7=E4=B8=8D=E8=83=BD=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E8=B5=84=E4=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/api/system_user.py | 18 +++++++++++------- apps/assets/tasks/system_user_connectivity.py | 8 ++++++-- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/apps/assets/api/system_user.py b/apps/assets/api/system_user.py index 27baaa017..8ec151285 100644 --- a/apps/assets/api/system_user.py +++ b/apps/assets/api/system_user.py @@ -98,8 +98,8 @@ class SystemUserTaskApi(generics.CreateAPIView): return task @staticmethod - def do_test(system_user): - task = test_system_user_connectivity_manual.delay(system_user) + def do_test(system_user, asset_ids): + task = test_system_user_connectivity_manual.delay(system_user, asset_ids) return task def get_object(self): @@ -109,16 +109,20 @@ class SystemUserTaskApi(generics.CreateAPIView): def perform_create(self, serializer): action = serializer.validated_data["action"] asset = serializer.validated_data.get('asset') - assets = serializer.validated_data.get('assets') or [] + + if asset: + assets = [asset] + else: + assets = serializer.validated_data.get('assets') or [] + + asset_ids = [asset.id for asset in assets] + asset_ids = asset_ids if asset_ids else None system_user = self.get_object() if action == 'push': - assets = [asset] if asset else assets - asset_ids = [asset.id for asset in assets] - asset_ids = asset_ids if asset_ids else None task = self.do_push(system_user, asset_ids) else: - task = self.do_test(system_user) + task = self.do_test(system_user, asset_ids) data = getattr(serializer, '_data', {}) data["task"] = task.id setattr(serializer, '_data', data) diff --git a/apps/assets/tasks/system_user_connectivity.py b/apps/assets/tasks/system_user_connectivity.py index 42b6f2331..87152c8cc 100644 --- a/apps/assets/tasks/system_user_connectivity.py +++ b/apps/assets/tasks/system_user_connectivity.py @@ -5,6 +5,7 @@ from collections import defaultdict from celery import shared_task from django.utils.translation import ugettext as _ +from assets.models import Asset from common.utils import get_logger from orgs.utils import tmp_to_org, org_aware_func from ..models import SystemUser @@ -96,9 +97,12 @@ def test_system_user_connectivity_util(system_user, assets, task_name): @shared_task(queue="ansible") @org_aware_func("system_user") -def test_system_user_connectivity_manual(system_user): +def test_system_user_connectivity_manual(system_user, asset_ids=None): task_name = _("Test system user connectivity: {}").format(system_user) - assets = system_user.get_related_assets() + if asset_ids: + assets = Asset.objects.filter(id__in=asset_ids) + else: + assets = system_user.get_related_assets() test_system_user_connectivity_util(system_user, assets, task_name) From 53e3fa25907fd85b95c51ee601ff852f39b760d2 Mon Sep 17 00:00:00 2001 From: "fghbng@qq.com" Date: Wed, 19 May 2021 19:25:06 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E4=BB=AA=E8=A1=A8=E7=9B=98=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=80=BB=E6=95=B0=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/orgs/caches.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/orgs/caches.py b/apps/orgs/caches.py index 8f73dc06e..57a20bd3c 100644 --- a/apps/orgs/caches.py +++ b/apps/orgs/caches.py @@ -79,7 +79,7 @@ class OrgResourceStatisticsCache(OrgRelatedCache): def compute_users_amount(self): if self.org.is_root(): - users_amount = User.objects.all().count() + users_amount = User.objects.exclude(role='APP').count() else: users_amount = OrganizationMember.objects.values( 'user_id' From 73f2022ff687b2b0fdf9f84455b1a0ef2c2a1295 Mon Sep 17 00:00:00 2001 From: "fghbng@qq.com" Date: Thu, 20 May 2021 11:37:09 +0800 Subject: [PATCH 12/16] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E4=BB=AA=E8=A1=A8=E7=9B=98=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=80=BB=E6=95=B0=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/orgs/caches.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/orgs/caches.py b/apps/orgs/caches.py index 57a20bd3c..8b5a61b51 100644 --- a/apps/orgs/caches.py +++ b/apps/orgs/caches.py @@ -79,7 +79,7 @@ class OrgResourceStatisticsCache(OrgRelatedCache): def compute_users_amount(self): if self.org.is_root(): - users_amount = User.objects.exclude(role='APP').count() + users_amount = User.objects.exclude(role='App').count() else: users_amount = OrganizationMember.objects.values( 'user_id' From 8ae03e4374a625fafbcfbe8fbfb2040d631d2629 Mon Sep 17 00:00:00 2001 From: "fghbng@qq.com" Date: Thu, 20 May 2021 11:03:07 +0800 Subject: [PATCH 13/16] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B5=84=E4=BA=A7?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=AD=97=E6=AE=B5=E5=90=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/locale/zh/LC_MESSAGES/django.mo | Bin 75231 -> 75257 bytes apps/locale/zh/LC_MESSAGES/django.po | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 4056fe77cd908f585530467c6701dc86d5e84f7d..e211f5802e8b92099dafde9f803fbf2208b5b47e 100644 GIT binary patch delta 8218 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 delta 8191 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 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index c456368c8..081aa6f5a 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -3,19 +3,19 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-19 16:27+0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.3\n" #: acls/models/base.py:25 acls/serializers/login_asset_acl.py:47 #: applications/models/application.py:11 assets/models/asset.py:142 @@ -2111,15 +2111,15 @@ msgstr "用户名" #: perms/serializers/asset/permission.py:47 msgid "User groups name" -msgstr "用户组数量" +msgstr "用户组名称" #: perms/serializers/asset/permission.py:48 msgid "Assets name" -msgstr "资产名字" +msgstr "资产名称" #: perms/serializers/asset/permission.py:50 msgid "System users name" -msgstr "系统用户名字" +msgstr "系统用户名称" #: perms/serializers/asset/permission.py:70 users/serializers/user.py:81 msgid "Is valid" From 6e4381ac04dfe78d9f441c0aa6cd9b7073b021fa Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Thu, 20 May 2021 13:14:34 +0800 Subject: [PATCH 14/16] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9readme=20(#6152?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * perf: 修改readme * perf: 修改readme Co-authored-by: ibuler --- README.md | 4 ++-- apps/templates/_copyright.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8f5da3631..b8e86a2c7 100644 --- a/README.md +++ b/README.md @@ -250,7 +250,7 @@ JumpServer 采纳分布式架构,支持多机房跨区域部署,支持横向 - [Lina](https://github.com/jumpserver/lina) JumpServer Web UI 项目 - [Luna](https://github.com/jumpserver/luna) JumpServer Web Terminal 项目 - [KoKo](https://github.com/jumpserver/koko) JumpServer 字符协议 Connector 项目,替代原来 Python 版本的 [Coco](https://github.com/jumpserver/coco) -- [Guacamole](https://github.com/jumpserver/docker-guacamole) JumpServer 图形协议 Connector 项目,依赖 [Apache Guacamole](https://guacamole.apache.org/) +- [Lion](https://github.com/jumpserver/lion-release) JumpServer 图形协议 Connector 项目,依赖 [Apache Guacamole](https://guacamole.apache.org/) ## 贡献 如果有你好的想法创意,或者帮助我们修复了 Bug, 欢迎提交 Pull Request @@ -263,7 +263,7 @@ JumpServer 采纳分布式架构,支持多机房跨区域部署,支持横向 ## 致谢 -- [Apache Guacamole](https://guacamole.apache.org/) Web页面连接 RDP, SSH, VNC协议设备,JumpServer 图形化连接依赖 +- [Apache Guacamole](https://guacamole.apache.org/) Web页面连接 RDP, SSH, VNC协议设备,JumpServer 图形化组件 Lion 依赖 - [OmniDB](https://omnidb.org/) Web页面连接使用数据库,JumpServer Web数据库依赖 diff --git a/apps/templates/_copyright.html b/apps/templates/_copyright.html index 772c24cc5..241a5cfe4 100644 --- a/apps/templates/_copyright.html +++ b/apps/templates/_copyright.html @@ -1,2 +1,2 @@ -{% load i18n %} -Copyright {{ COPYRIGHT }} \ No newline at end of file +{#{% load i18n %}#} +{#Copyright {{ COPYRIGHT }}#} \ No newline at end of file From a2fb4a701e9050425b3264b4b71dfcd44907dac9 Mon Sep 17 00:00:00 2001 From: Bai Date: Thu, 20 May 2021 14:05:14 +0800 Subject: [PATCH 15/16] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E8=BF=87=E6=BB=A4=E5=99=A8=E8=A7=84=E5=88=99Action=20?= =?UTF-8?q?Choices=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/cmd_filter.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/assets/serializers/cmd_filter.py b/apps/assets/serializers/cmd_filter.py index 052452825..5cf419979 100644 --- a/apps/assets/serializers/cmd_filter.py +++ b/apps/assets/serializers/cmd_filter.py @@ -4,7 +4,7 @@ import re from rest_framework import serializers from common.drf.serializers import AdaptedBulkListSerializer -from ..models import CommandFilter, CommandFilterRule, SystemUser +from ..models import CommandFilter, CommandFilterRule from orgs.mixins.serializers import BulkOrgResourceModelSerializer from orgs.utils import tmp_to_root_org from common.utils import get_object_or_none, lazyproperty @@ -50,6 +50,20 @@ class CommandFilterRuleSerializer(BulkOrgResourceModelSerializer): fields = '__all__' list_serializer_class = AdaptedBulkListSerializer + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.set_action_choices() + + def set_action_choices(self): + from django.conf import settings + action = self.fields.get('action') + if not action: + return + choices = action._choices + if not settings.XPACK_ENABLED: + choices.pop(CommandFilterRule.ActionChoices.confirm, None) + action._choices = choices + # def validate_content(self, content): # tp = self.initial_data.get("type") # if tp == CommandFilterRule.TYPE_REGEX: From 47df0cfaabaa1b79f8dcae8a1ad4cda73adfeabc Mon Sep 17 00:00:00 2001 From: Bai Date: Thu, 20 May 2021 14:58:54 +0800 Subject: [PATCH 16/16] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E7=BF=BB?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/locale/zh/LC_MESSAGES/django.mo | Bin 75257 -> 75310 bytes apps/locale/zh/LC_MESSAGES/django.po | 47 ++++++++++++++------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index e211f5802e8b92099dafde9f803fbf2208b5b47e..231c4df8c203cbe0edd5ba7271eef34414d7398b 100644 GIT binary patch delta 16550 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 delta 16500 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 G=lvhz#ECcn diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 081aa6f5a..8cf941acb 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-19 16:27+0800\n" +"POT-Creation-Date: 2021-05-20 14:56+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -184,7 +184,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. " #: users/templates/users/_select_user_modal.html:14 #: xpack/plugins/change_auth_plan/models.py:47 #: xpack/plugins/change_auth_plan/models.py:278 -#: xpack/plugins/cloud/serializers.py:51 +#: xpack/plugins/cloud/serializers.py:71 msgid "Username" msgstr "用户名" @@ -285,7 +285,7 @@ msgid "Cluster" msgstr "集群" #: applications/serializers/attrs/application_category/db.py:11 -#: ops/models/adhoc.py:146 xpack/plugins/cloud/serializers.py:49 +#: ops/models/adhoc.py:146 xpack/plugins/cloud/serializers.py:69 msgid "Host" msgstr "主机" @@ -295,7 +295,7 @@ msgstr "主机" #: applications/serializers/attrs/application_type/oracle.py:11 #: applications/serializers/attrs/application_type/pgsql.py:11 #: assets/models/asset.py:188 assets/models/domain.py:53 -#: xpack/plugins/cloud/serializers.py:50 +#: xpack/plugins/cloud/serializers.py:70 msgid "Port" msgstr "端口" @@ -325,7 +325,7 @@ msgstr "目标URL" #: xpack/plugins/change_auth_plan/models.py:68 #: xpack/plugins/change_auth_plan/models.py:190 #: xpack/plugins/change_auth_plan/models.py:285 -#: xpack/plugins/cloud/serializers.py:53 +#: xpack/plugins/cloud/serializers.py:73 msgid "Password" msgstr "密码" @@ -407,7 +407,7 @@ msgstr "激活" #: assets/models/asset.py:196 assets/models/cluster.py:19 #: assets/models/user.py:66 templates/_nav.html:44 -#: xpack/plugins/cloud/models.py:92 xpack/plugins/cloud/serializers.py:146 +#: xpack/plugins/cloud/models.py:92 xpack/plugins/cloud/serializers.py:166 msgid "Admin user" msgstr "管理用户" @@ -678,7 +678,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:89 xpack/plugins/cloud/serializers.py:147 +#: xpack/plugins/cloud/models.py:89 xpack/plugins/cloud/serializers.py:167 msgid "Node" msgstr "节点" @@ -949,7 +949,7 @@ msgid "" msgstr "自检程序已经在运行,不能重复启动" #: assets/tasks/push_system_user.py:193 -#: assets/tasks/system_user_connectivity.py:89 +#: assets/tasks/system_user_connectivity.py:90 msgid "System user is dynamic: {}" msgstr "系统用户是动态的: {}" @@ -958,7 +958,7 @@ msgid "Start push system user for platform: [{}]" msgstr "推送系统用户到平台: [{}]" #: assets/tasks/push_system_user.py:234 -#: assets/tasks/system_user_connectivity.py:81 +#: assets/tasks/system_user_connectivity.py:82 msgid "Hosts count: {}" msgstr "主机数量: {}" @@ -970,19 +970,19 @@ msgstr "推送系统用户到入资产: {}" msgid "Push system users to asset: {}({}) => {}" msgstr "推送系统用户到入资产: {}({}) => {}" -#: assets/tasks/system_user_connectivity.py:80 +#: assets/tasks/system_user_connectivity.py:81 msgid "Start test system user connectivity for platform: [{}]" msgstr "开始测试系统用户在该系统平台的可连接性: [{}]" -#: assets/tasks/system_user_connectivity.py:100 +#: assets/tasks/system_user_connectivity.py:101 msgid "Test system user connectivity: {}" msgstr "测试系统用户可连接性: {}" -#: assets/tasks/system_user_connectivity.py:108 +#: assets/tasks/system_user_connectivity.py:112 msgid "Test system user connectivity: {} => {}" msgstr "测试系统用户可连接性: {} => {}" -#: assets/tasks/system_user_connectivity.py:121 +#: assets/tasks/system_user_connectivity.py:125 msgid "Test system user connectivity period: {}" msgstr "定期测试系统用户可连接性: {}" @@ -3999,7 +3999,7 @@ msgid "Security token validation" msgstr "安全令牌验证" #: users/templates/users/_base_otp.html:14 xpack/plugins/cloud/models.py:78 -#: xpack/plugins/cloud/serializers.py:145 +#: xpack/plugins/cloud/serializers.py:165 msgid "Account" msgstr "账户" @@ -4740,7 +4740,7 @@ msgstr "云服务商" msgid "Cloud account" msgstr "云账号" -#: xpack/plugins/cloud/models.py:81 xpack/plugins/cloud/serializers.py:126 +#: xpack/plugins/cloud/models.py:81 xpack/plugins/cloud/serializers.py:146 msgid "Regions" msgstr "地域" @@ -4748,7 +4748,7 @@ msgstr "地域" msgid "Hostname strategy" msgstr "主机名策略" -#: xpack/plugins/cloud/models.py:95 xpack/plugins/cloud/serializers.py:149 +#: xpack/plugins/cloud/models.py:95 xpack/plugins/cloud/serializers.py:169 msgid "Always update" msgstr "总是更新" @@ -4940,20 +4940,24 @@ msgstr "" msgid "Subscription ID" msgstr "" -#: xpack/plugins/cloud/serializers.py:124 +#: xpack/plugins/cloud/serializers.py:55 +msgid "{} is required" +msgstr "{} 字段是必填项" + +#: xpack/plugins/cloud/serializers.py:144 msgid "History count" msgstr "执行次数" -#: xpack/plugins/cloud/serializers.py:125 +#: xpack/plugins/cloud/serializers.py:145 msgid "Instance count" msgstr "实例个数" -#: xpack/plugins/cloud/serializers.py:148 +#: xpack/plugins/cloud/serializers.py:168 #: xpack/plugins/gathered_user/serializers.py:20 msgid "Periodic display" msgstr "定时执行" -#: xpack/plugins/cloud/utils.py:64 +#: xpack/plugins/cloud/utils.py:65 msgid "Account unavailable" msgstr "账户无效" @@ -5044,9 +5048,6 @@ msgstr "社区版" #~ msgid "AppSecret is required" #~ msgstr "AppSecret 是必须的" -#~ msgid "Secret is required" -#~ msgstr "Secret 是必须的" - #~ msgid "Corporation ID(corpid)" #~ msgstr "企业 ID(CorpId)"