From e476cab2a14cf77db1eb83d8b0e53e85d7367309 Mon Sep 17 00:00:00 2001 From: wojiushixiaobai <296015668@qq.com> Date: Fri, 27 Apr 2018 11:01:52 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=E8=84=9A=E6=9C=AC=20(#1250)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/upgrade.sh | 49 +++++++++++++++++++----------------------------- 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/utils/upgrade.sh b/utils/upgrade.sh index 878bf770a..e1cdabb76 100644 --- a/utils/upgrade.sh +++ b/utils/upgrade.sh @@ -1,24 +1,14 @@ #!/bin/bash -if [ ! -d "/opt/py3" ]; then -echo -e "\033[31m python3虚拟环境不是默认路径 \033[0m" -ps -ef | grep jumpserver/tmp/beat.pid | grep -v grep -if [ $? -ne 0 ] -then -echo -e "\033[31m jumpserver未运行,请到jumpserver目录使用 ./jms start all -d 启动 \033[0m" -exit 0 -else -echo -e "\033[31m 正在计算python3虚拟环境路径 \033[0m" -fi -py3pid=`ps -ef | grep jumpserver/tmp/beat.pid | grep -v grep | awk '{print $2}'` -py3file=`cat /proc/$py3pid/cmdline` -py3even=`echo ${py3file%/bin/python3*}` -echo -e "\033[31m python3虚拟环境路径为$py3even \033[0m" -source $py3even/bin/activate +if grep -q 'source ~/.autoenv/activate.sh' ~/.bashrc; then + echo -e "\033[31m 正在自动载入 python 环境 \033[0m" else -source /opt/py3/bin/activate + echo -e "\033[31m 不支持自动升级,请参考 http://docs.jumpserver.org/zh/docs/upgrade.html 手动升级 \033[0m" + exit 0 fi +source ~/.bashrc + cd `dirname $0`/ && cd .. && ./jms stop jumpserver_backup=/tmp/jumpserver_backup$(date -d "today" +"%Y%m%d_%H%M%S") @@ -29,21 +19,20 @@ echo -e "\033[31m 是否需要备份Jumpserver数据库 \033[0m" stty erase ^H read -p "确认备份请按Y,否则按其他键跳过备份 " a if [ "$a" == y -o "$a" == Y ];then -echo -e "\033[31m 正在备份数据库 \033[0m" -echo -e "\033[31m 请手动输入数据库信息 \033[0m" -read -p '请输入Jumpserver数据库ip:' DB_HOST -read -p '请输入Jumpserver数据库端口:' DB_PORT -read -p '请输入Jumpserver数据库名称:' DB_NAME -read -p '请输入有权限导出数据库的用户:' DB_USER -read -p '请输入该用户的密码:' DB_PASSWORD -mysqldump -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PASSWORD $DB_NAME > /$jumpserver_backup/$DB_NAME$(date -d "today" +"%Y%m%d_%H%M%S").sql || { -echo -e "\033[31m 备份数据库失败,请检查输入是否有误 \033[0m" -exit 1 -} -echo -e "\033[31m 备份数据库完成 \033[0m" - + echo -e "\033[31m 正在备份数据库 \033[0m" + echo -e "\033[31m 请手动输入数据库信息 \033[0m" + read -p '请输入Jumpserver数据库ip:' DB_HOST + read -p '请输入Jumpserver数据库端口:' DB_PORT + read -p '请输入Jumpserver数据库名称:' DB_NAME + read -p '请输入有权限导出数据库的用户:' DB_USER + read -p '请输入该用户的密码:' DB_PASSWORD + mysqldump -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PASSWORD $DB_NAME > /$jumpserver_backup/$DB_NAME$(date -d "today" +"%Y%m%d_%H%M%S").sql || { + echo -e "\033[31m 备份数据库失败,请检查输入是否有误 \033[0m" + exit 1 + } + echo -e "\033[31m 备份数据库完成 \033[0m" else -echo -e "\033[31m 已取消备份数据库操作 \033[0m" + echo -e "\033[31m 已取消备份数据库操作 \033[0m" fi git pull && pip install -r requirements/requirements.txt && cd utils && sh make_migrations.sh From 6f494ef09c060ec4ed5c71f85b48faa85b9056d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E5=B9=BF?= Date: Fri, 27 Apr 2018 11:27:16 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=90=8D=E9=95=BF=E5=BA=A6=E5=92=8C=E7=89=B9=E6=AE=8A=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=20(#1271)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Bugfix] 修复系统用户用户名校验问题 * [Update] 增加长度限制 --- apps/assets/models/base.py | 3 +- apps/common/validators.py | 7 + apps/i18n/zh/LC_MESSAGES/django.mo | Bin 32913 -> 33048 bytes apps/i18n/zh/LC_MESSAGES/django.po | 243 ++++++++++++----------------- 4 files changed, 107 insertions(+), 146 deletions(-) create mode 100644 apps/common/validators.py diff --git a/apps/assets/models/base.py b/apps/assets/models/base.py index 2997b1b61..eda00a79a 100644 --- a/apps/assets/models/base.py +++ b/apps/assets/models/base.py @@ -10,6 +10,7 @@ from django.utils.translation import ugettext_lazy as _ from django.conf import settings from common.utils import get_signer, ssh_key_string_to_obj, ssh_key_gen +from common.validators import alphanumeric from .utils import private_key_validator signer = get_signer() @@ -18,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=128, verbose_name=_('Username')) + username = models.CharField(max_length=32, 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/common/validators.py b/apps/common/validators.py new file mode 100644 index 000000000..9a4c1e501 --- /dev/null +++ b/apps/common/validators.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# +from django.core.validators import RegexValidator +from django.utils.translation import ugettext_lazy as _ + + +alphanumeric = RegexValidator(r'^[0-9a-zA-Z_-]*$', _('Special char not allowed')) \ No newline at end of file diff --git a/apps/i18n/zh/LC_MESSAGES/django.mo b/apps/i18n/zh/LC_MESSAGES/django.mo index 4da36e76e728971c74b595652700d37f1d8eae61..315bd8b8f3252fa5931e60cd25716924049e6a69 100644 GIT binary patch delta 11467 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 QwsCWxqTw5_j7ZG)fA$RKH2?qr diff --git a/apps/i18n/zh/LC_MESSAGES/django.po b/apps/i18n/zh/LC_MESSAGES/django.po index d586f00af..624b555b4 100644 --- a/apps/i18n/zh/LC_MESSAGES/django.po +++ b/apps/i18n/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: 2018-04-26 19:15+0800\n" +"POT-Creation-Date: 2018-04-27 11:16+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -21,11 +21,11 @@ msgstr "" msgid "New node {}" msgstr "新节点 {}" -#: assets/api/node.py:216 +#: assets/api/node.py:217 msgid "更新节点资产硬件信息: {}" msgstr "" -#: assets/api/node.py:229 +#: assets/api/node.py:230 msgid "测试节点下资产是否可连接: {}" msgstr "" @@ -110,7 +110,7 @@ msgstr "端口" #: perms/templates/perms/asset_permission_create_update.html:40 #: perms/templates/perms/asset_permission_list.html:56 #: perms/templates/perms/asset_permission_list.html:139 -#: terminal/backends/command/models.py:11 terminal/models.py:123 +#: terminal/backends/command/models.py:11 terminal/models.py:127 #: terminal/templates/terminal/command_list.html:40 #: terminal/templates/terminal/command_list.html:73 #: terminal/templates/terminal/session_list.html:41 @@ -119,7 +119,7 @@ msgid "Asset" msgstr "资产" #: assets/forms/domain.py:54 assets/forms/user.py:79 assets/forms/user.py:120 -#: assets/models/base.py:20 assets/models/cluster.py:18 +#: 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 #: assets/templates/assets/admin_user_list.html:23 @@ -128,14 +128,14 @@ msgstr "资产" #: assets/templates/assets/domain_list.html:14 #: assets/templates/assets/label_list.html:14 #: assets/templates/assets/system_user_detail.html:58 -#: assets/templates/assets/system_user_list.html:26 common/forms.py:179 -#: common/models.py:26 common/templates/common/terminal_setting.html:70 -#: common/templates/common/terminal_setting.html:88 ops/models/adhoc.py:36 +#: assets/templates/assets/system_user_list.html:26 common/models.py:26 +#: common/templates/common/terminal_setting.html:67 +#: common/templates/common/terminal_setting.html:85 ops/models/adhoc.py:36 #: ops/templates/ops/task_detail.html:59 ops/templates/ops/task_list.html:35 #: perms/models.py:19 perms/templates/perms/asset_permission_detail.html:62 #: perms/templates/perms/asset_permission_list.html:53 #: perms/templates/perms/asset_permission_user.html:54 terminal/models.py:16 -#: terminal/models.py:149 terminal/templates/terminal/terminal_detail.html:43 +#: terminal/models.py:154 terminal/templates/terminal/terminal_detail.html:43 #: terminal/templates/terminal/terminal_list.html:29 users/models/group.py:14 #: users/models/user.py:42 users/templates/users/_select_user_modal.html:13 #: users/templates/users/user_detail.html:63 @@ -148,7 +148,7 @@ msgid "Name" msgstr "名称" #: assets/forms/domain.py:55 assets/forms/user.py:80 assets/forms/user.py:121 -#: assets/models/base.py:21 assets/templates/assets/admin_user_detail.html:60 +#: 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 @@ -168,7 +168,7 @@ msgstr "用户名" msgid "Password or private key passphrase" msgstr "密码或密钥密码" -#: assets/forms/user.py:25 assets/models/base.py:22 common/forms.py:114 +#: 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/templates/users/login.html:59 #: users/templates/users/reset_password.html:52 @@ -209,7 +209,7 @@ msgstr "高优先级的系统用户将会作为默认登录用户" #: assets/templates/assets/asset_list.html:87 #: assets/templates/assets/domain_gateway_list.html:57 #: assets/templates/assets/system_user_asset.html:50 -#: assets/templates/assets/user_asset_list.html:46 common/forms.py:145 +#: assets/templates/assets/user_asset_list.html:46 common/forms.py:144 #: perms/templates/perms/asset_permission_asset.html:55 #: users/templates/users/login_log_list.html:52 #: users/templates/users/user_granted_asset.html:45 @@ -222,7 +222,7 @@ msgstr "IP" #: assets/templates/assets/asset_detail.html:57 #: assets/templates/assets/asset_list.html:86 #: assets/templates/assets/system_user_asset.html:49 -#: assets/templates/assets/user_asset_list.html:45 common/forms.py:144 +#: assets/templates/assets/user_asset_list.html:45 common/forms.py:143 #: perms/templates/perms/asset_permission_asset.html:54 #: users/templates/users/user_granted_asset.html:44 #: users/templates/users/user_group_granted_asset.html:44 @@ -304,7 +304,7 @@ msgstr "主机名原始" msgid "Labels" msgstr "标签管理" -#: assets/models/asset.py:82 assets/models/base.py:28 +#: assets/models/asset.py:82 assets/models/base.py:29 #: assets/models/cluster.py:28 assets/models/group.py:21 #: assets/templates/assets/admin_user_detail.html:68 #: assets/templates/assets/asset_detail.html:117 @@ -329,7 +329,7 @@ msgstr "创建者" msgid "Date created" msgstr "创建日期" -#: assets/models/asset.py:84 assets/models/base.py:25 +#: assets/models/asset.py:84 assets/models/base.py:26 #: assets/models/cluster.py:29 assets/models/domain.py:18 #: assets/models/domain.py:47 assets/models/group.py:23 #: assets/models/label.py:21 assets/templates/assets/admin_user_detail.html:72 @@ -350,11 +350,11 @@ msgstr "创建日期" msgid "Comment" msgstr "备注" -#: assets/models/base.py:23 +#: assets/models/base.py:24 msgid "SSH private key" msgstr "ssh密钥" -#: assets/models/base.py:24 +#: assets/models/base.py:25 msgid "SSH public key" msgstr "ssh公钥" @@ -408,6 +408,7 @@ msgstr "集群" #: assets/templates/assets/domain_gateway_list.html:59 #: assets/templates/assets/system_user_detail.html:66 #: assets/templates/assets/system_user_list.html:28 +#: terminal/templates/terminal/session_list.html:75 msgid "Protocol" msgstr "协议" @@ -426,7 +427,7 @@ msgstr "默认资产组" #: perms/templates/perms/asset_permission_create_update.html:36 #: perms/templates/perms/asset_permission_list.html:54 #: perms/templates/perms/asset_permission_list.html:133 -#: terminal/backends/command/models.py:10 terminal/models.py:122 +#: terminal/backends/command/models.py:10 terminal/models.py:126 #: terminal/templates/terminal/command_list.html:32 #: terminal/templates/terminal/command_list.html:72 #: terminal/templates/terminal/session_list.html:33 @@ -493,7 +494,7 @@ msgstr "Shell" #: perms/templates/perms/asset_permission_detail.html:140 #: perms/templates/perms/asset_permission_list.html:58 #: perms/templates/perms/asset_permission_list.html:145 templates/_nav.html:26 -#: terminal/backends/command/models.py:12 terminal/models.py:124 +#: terminal/backends/command/models.py:12 terminal/models.py:128 #: terminal/templates/terminal/command_list.html:48 #: terminal/templates/terminal/command_list.html:74 #: terminal/templates/terminal/session_list.html:49 @@ -561,7 +562,6 @@ msgid "Select System Users" msgstr "选择系统用户" #: assets/templates/assets/_asset_group_bulk_update_modal.html:34 -#, fuzzy msgid "Enable-MFA" msgstr "启用MFA" @@ -630,11 +630,10 @@ msgstr "其它" #: assets/templates/assets/domain_create_update.html:16 #: assets/templates/assets/gateway_create_update.html:58 #: assets/templates/assets/label_create_update.html:18 -#: common/templates/common/basic_setting.html:61 -#: common/templates/common/cloud_setting.html:74 -#: common/templates/common/email_setting.html:62 -#: common/templates/common/ldap_setting.html:62 -#: common/templates/common/terminal_setting.html:104 +#: common/templates/common/basic_setting.html:58 +#: common/templates/common/email_setting.html:59 +#: common/templates/common/ldap_setting.html:59 +#: common/templates/common/terminal_setting.html:101 #: perms/templates/perms/asset_permission_create_update.html:69 #: terminal/templates/terminal/terminal_update.html:47 #: users/templates/users/_user.html:46 @@ -656,11 +655,10 @@ msgstr "重置" #: assets/templates/assets/domain_create_update.html:17 #: assets/templates/assets/gateway_create_update.html:59 #: assets/templates/assets/label_create_update.html:19 -#: common/templates/common/basic_setting.html:62 -#: common/templates/common/cloud_setting.html:76 -#: common/templates/common/email_setting.html:63 -#: common/templates/common/ldap_setting.html:63 -#: common/templates/common/terminal_setting.html:106 +#: common/templates/common/basic_setting.html:59 +#: common/templates/common/email_setting.html:60 +#: common/templates/common/ldap_setting.html:60 +#: common/templates/common/terminal_setting.html:103 #: perms/templates/perms/asset_permission_create_update.html:70 #: terminal/templates/terminal/session_list.html:120 #: terminal/templates/terminal/terminal_update.html:48 @@ -1027,8 +1025,8 @@ msgid "Create gateway" msgstr "创建网关" #: assets/templates/assets/domain_gateway_list.html:87 -#: common/templates/common/email_setting.html:61 -#: common/templates/common/ldap_setting.html:61 +#: common/templates/common/email_setting.html:58 +#: common/templates/common/ldap_setting.html:58 msgid "Test connection" msgstr "测试连接" @@ -1178,7 +1176,7 @@ msgid "System user asset" msgstr "系统用户集群资产" #: audits/models.py:10 audits/templates/audits/ftp_log_list.html:74 -#: terminal/models.py:126 terminal/templates/terminal/session_list.html:74 +#: terminal/models.py:130 terminal/templates/terminal/session_list.html:74 #: terminal/templates/terminal/terminal_detail.html:47 msgid "Remote addr" msgstr "远端地址" @@ -1201,7 +1199,7 @@ msgstr "成功" #: ops/templates/ops/adhoc_history.html:52 #: ops/templates/ops/adhoc_history_detail.html:61 #: ops/templates/ops/task_history.html:58 perms/models.py:26 -#: perms/templates/perms/asset_permission_detail.html:86 terminal/models.py:132 +#: perms/templates/perms/asset_permission_detail.html:86 terminal/models.py:137 #: terminal/templates/terminal/session_list.html:77 msgid "Date start" msgstr "开始日期" @@ -1248,84 +1246,84 @@ msgstr "不是字符类型" msgid "Encrypt field using Secret Key" msgstr "" -#: common/forms.py:71 +#: common/forms.py:70 msgid "Current SITE URL" msgstr "当前站点URL" -#: common/forms.py:75 +#: common/forms.py:74 msgid "User Guide URL" msgstr "用户向导URL" -#: common/forms.py:76 +#: common/forms.py:75 msgid "User first login update profile done redirect to it" msgstr "用户第一次登录,修改profile后重定向到地址" -#: common/forms.py:79 +#: common/forms.py:78 msgid "Email Subject Prefix" msgstr "Email主题前缀" -#: common/forms.py:86 +#: common/forms.py:85 msgid "SMTP host" msgstr "SMTP主机" -#: common/forms.py:88 +#: common/forms.py:87 msgid "SMTP port" msgstr "SMTP端口" -#: common/forms.py:90 +#: common/forms.py:89 msgid "SMTP user" msgstr "SMTP账号" -#: common/forms.py:93 +#: common/forms.py:92 msgid "SMTP password" msgstr "SMTP密码" -#: common/forms.py:94 +#: common/forms.py:93 msgid "Some provider use token except password" msgstr "一些邮件提供商需要输入的是Token" -#: common/forms.py:97 common/forms.py:137 +#: common/forms.py:96 common/forms.py:136 msgid "Use SSL" msgstr "使用SSL" -#: common/forms.py:98 +#: common/forms.py:97 msgid "If SMTP port is 465, may be select" msgstr "如果SMTP端口是465,通常需要启用SSL" -#: common/forms.py:101 +#: common/forms.py:100 msgid "Use TLS" msgstr "使用TLS" -#: common/forms.py:102 +#: common/forms.py:101 msgid "If SMTP port is 587, may be select" msgstr "如果SMTP端口是587,通常需要启用TLS" -#: common/forms.py:108 +#: common/forms.py:107 msgid "LDAP server" msgstr "LDAP地址" -#: common/forms.py:111 +#: common/forms.py:110 msgid "Bind DN" msgstr "绑定DN" -#: common/forms.py:118 +#: common/forms.py:117 msgid "User OU" msgstr "用户OU" -#: common/forms.py:121 +#: common/forms.py:120 msgid "User search filter" msgstr "用户过滤器" -#: common/forms.py:122 +#: common/forms.py:121 #, python-format msgid "Choice may be (cn|uid|sAMAccountName)=%(user)s)" msgstr "可能的选项是(cn或uid或sAMAccountName=%(user)s)" -#: common/forms.py:125 +#: common/forms.py:124 msgid "User attr map" msgstr "LDAP属性映射" -#: common/forms.py:132 +#: common/forms.py:131 msgid "" "User attr map present how to map LDAP user attr to jumpserver, username,name," "email is jumpserver attr" @@ -1333,80 +1331,52 @@ msgstr "" "用户属性映射代表怎样将LDAP中用户属性映射到jumpserver用户上,username, name," "email 是jumpserver的属性" -#: common/forms.py:139 +#: common/forms.py:138 msgid "Enable LDAP auth" msgstr "启用LDAP认证" -#: common/forms.py:148 +#: common/forms.py:147 msgid "List sort by" msgstr "资产列表排序" -#: common/forms.py:151 +#: common/forms.py:150 msgid "Heartbeat interval" msgstr "心跳间隔" -#: common/forms.py:151 ops/models/adhoc.py:37 +#: common/forms.py:150 ops/models/adhoc.py:37 msgid "Units: seconds" msgstr "单位: 秒" -#: common/forms.py:154 +#: common/forms.py:153 msgid "Password auth" msgstr "密码认证" -#: common/forms.py:157 +#: common/forms.py:156 msgid "Public key auth" msgstr "密钥认证" -#: common/forms.py:160 common/templates/common/terminal_setting.html:66 +#: common/forms.py:159 common/templates/common/terminal_setting.html:63 #: terminal/forms.py:30 terminal/models.py:20 msgid "Command storage" msgstr "命令存储" -#: common/forms.py:161 +#: common/forms.py:160 msgid "" "Set terminal storage setting, `default` is the using as default,You can set " "other storage and some terminal using" msgstr "设置终端命令存储,default是默认用的存储方式" -#: common/forms.py:166 common/templates/common/terminal_setting.html:84 +#: common/forms.py:165 common/templates/common/terminal_setting.html:81 #: terminal/forms.py:35 terminal/models.py:21 msgid "Replay storage" msgstr "录像存储" -#: common/forms.py:167 +#: common/forms.py:166 msgid "" "Set replay storage setting, `default` is the using as default,You can set " "other storage and some terminal using" msgstr "设置终端录像存储,default是默认用的存储方式" -#: common/forms.py:175 -msgid "Aliyun" -msgstr "" - -#: common/forms.py:176 -msgid "AWS" -msgstr "" - -#: common/forms.py:183 -msgid "Cloud provider" -msgstr "" - -#: common/forms.py:186 -msgid "Access key id" -msgstr "" - -#: common/forms.py:187 -msgid "Enter the access key id for the cloud service" -msgstr "" - -#: common/forms.py:190 -msgid "Access key secret" -msgstr "" - -#: common/forms.py:191 -msgid "Enter the access key secret for the cloud service" -msgstr "" - #: common/mixins.py:29 msgid "is discard" msgstr "" @@ -1420,62 +1390,50 @@ msgid "Enabled" msgstr "启用" #: common/templates/common/basic_setting.html:15 -#: common/templates/common/cloud_setting.html:16 -#: common/templates/common/cloud_setting.html:49 #: common/templates/common/email_setting.html:15 #: common/templates/common/ldap_setting.html:15 #: common/templates/common/terminal_setting.html:16 -#: common/templates/common/terminal_setting.html:45 common/views.py:34 +#: common/templates/common/terminal_setting.html:42 common/views.py:22 msgid "Basic setting" msgstr "基本设置" #: common/templates/common/basic_setting.html:18 -#: common/templates/common/cloud_setting.html:20 #: common/templates/common/email_setting.html:18 #: common/templates/common/ldap_setting.html:18 -#: common/templates/common/terminal_setting.html:20 common/views.py:60 +#: common/templates/common/terminal_setting.html:20 common/views.py:48 msgid "Email setting" msgstr "邮件设置" #: common/templates/common/basic_setting.html:21 -#: common/templates/common/cloud_setting.html:24 #: common/templates/common/email_setting.html:21 #: common/templates/common/ldap_setting.html:21 -#: common/templates/common/terminal_setting.html:24 common/views.py:86 +#: common/templates/common/terminal_setting.html:24 common/views.py:74 msgid "LDAP setting" msgstr "LDAP设置" #: common/templates/common/basic_setting.html:24 -#: common/templates/common/cloud_setting.html:28 #: common/templates/common/email_setting.html:24 #: common/templates/common/ldap_setting.html:24 -#: common/templates/common/terminal_setting.html:28 common/views.py:116 +#: common/templates/common/terminal_setting.html:28 common/views.py:104 msgid "Terminal setting" msgstr "终端设置" -#: common/templates/common/basic_setting.html:27 -#: common/templates/common/cloud_setting.html:32 -#: common/templates/common/email_setting.html:27 -#: common/templates/common/ldap_setting.html:27 -#: common/templates/common/terminal_setting.html:31 common/views.py:144 -#, fuzzy -#| msgid "Email setting" -msgid "Cloud setting" -msgstr "邮件设置" - -#: common/templates/common/terminal_setting.html:71 -#: common/templates/common/terminal_setting.html:89 +#: common/templates/common/terminal_setting.html:68 +#: common/templates/common/terminal_setting.html:86 #: users/templates/users/login_log_list.html:50 msgid "Type" msgstr "类型" -#: common/views.py:33 common/views.py:59 common/views.py:85 common/views.py:115 -#: common/views.py:143 templates/_nav.html:81 +#: common/validators.py:7 +msgid "Special char not allowed" +msgstr "不能包含特殊字符" + +#: common/views.py:21 common/views.py:47 common/views.py:73 common/views.py:103 +#: templates/_nav.html:81 msgid "Settings" msgstr "系统设置" -#: common/views.py:44 common/views.py:70 common/views.py:98 common/views.py:128 -#: common/views.py:155 +#: common/views.py:32 common/views.py:58 common/views.py:86 common/views.py:116 msgid "Update setting successfully, please restart program" msgstr "更新设置成功, 请手动重启程序" @@ -1962,7 +1920,7 @@ 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:264 users/views/login.py:325 users/views/user.py:64 +#: users/views/login.py:263 users/views/login.py:321 users/views/user.py:64 #: users/views/user.py:79 users/views/user.py:99 users/views/user.py:155 #: users/views/user.py:310 users/views/user.py:357 users/views/user.py:379 msgid "Users" @@ -1996,11 +1954,10 @@ msgstr "命令记录" msgid "Web terminal" msgstr "Web终端" -#: templates/_nav.html:51 terminal/templates/terminal/session_list.html:75 -#: terminal/views/command.py:47 terminal/views/session.py:75 -#: terminal/views/session.py:93 terminal/views/session.py:115 -#: terminal/views/terminal.py:31 terminal/views/terminal.py:46 -#: terminal/views/terminal.py:58 +#: templates/_nav.html:51 terminal/views/command.py:47 +#: terminal/views/session.py:75 terminal/views/session.py:93 +#: terminal/views/session.py:115 terminal/views/terminal.py:31 +#: terminal/views/terminal.py:46 terminal/views/terminal.py:58 msgid "Terminal" msgstr "终端管理" @@ -2079,26 +2036,26 @@ msgstr "线程数" msgid "Boot Time" msgstr "运行时间" -#: terminal/models.py:128 terminal/templates/terminal/session_list.html:102 +#: terminal/models.py:132 terminal/templates/terminal/session_list.html:102 msgid "Replay" msgstr "回放" -#: terminal/models.py:129 terminal/templates/terminal/command_list.html:55 +#: terminal/models.py:133 terminal/templates/terminal/command_list.html:55 #: terminal/templates/terminal/command_list.html:71 #: terminal/templates/terminal/session_detail.html:48 #: terminal/templates/terminal/session_list.html:76 msgid "Command" msgstr "命令" -#: terminal/models.py:131 +#: terminal/models.py:136 msgid "Date last active" msgstr "最后活跃日期" -#: terminal/models.py:133 +#: terminal/models.py:138 msgid "Date end" msgstr "结束日期" -#: terminal/models.py:150 +#: terminal/models.py:155 msgid "Args" msgstr "参数" @@ -2898,56 +2855,56 @@ msgstr "更新用户组" msgid "User group granted asset" msgstr "用户组授权资产" -#: users/views/login.py:60 +#: users/views/login.py:59 msgid "Please enable cookies and try again." msgstr "设置你的浏览器支持cookie" -#: users/views/login.py:126 users/views/user.py:464 users/views/user.py:489 +#: users/views/login.py:125 users/views/user.py:464 users/views/user.py:489 msgid "MFA code invalid" msgstr "MFA码认证失败" -#: users/views/login.py:152 +#: users/views/login.py:151 msgid "Logout success" msgstr "退出登录成功" -#: users/views/login.py:153 +#: users/views/login.py:152 msgid "Logout success, return login page" msgstr "退出登录成功,返回到登录页面" -#: users/views/login.py:169 +#: users/views/login.py:168 msgid "Email address invalid, please input again" msgstr "邮箱地址错误,重新输入" -#: users/views/login.py:182 +#: users/views/login.py:181 msgid "Send reset password message" msgstr "发送重置密码邮件" -#: users/views/login.py:183 +#: users/views/login.py:182 msgid "Send reset password mail success, login your mail box and follow it " msgstr "" "发送重置邮件成功, 请登录邮箱查看, 按照提示操作 (如果没收到,请等待3-5分钟)" -#: users/views/login.py:196 +#: users/views/login.py:195 msgid "Reset password success" msgstr "重置密码成功" -#: users/views/login.py:197 +#: users/views/login.py:196 msgid "Reset password success, return to login page" msgstr "重置密码成功,返回到登录页面" -#: users/views/login.py:214 users/views/login.py:227 +#: users/views/login.py:213 users/views/login.py:226 msgid "Token invalid or expired" msgstr "Token错误或失效" -#: users/views/login.py:223 +#: users/views/login.py:222 msgid "Password not same" msgstr "密码不一致" -#: users/views/login.py:264 +#: users/views/login.py:263 msgid "First login" msgstr "首次登陆" -#: users/views/login.py:326 +#: users/views/login.py:322 msgid "Login log list" msgstr "登录日志" @@ -2995,8 +2952,4 @@ msgstr "MFA 解绑成功" msgid "MFA disable success, return login page" msgstr "MFA 解绑成功,返回登录页面" -#~ msgid "Step" -#~ msgstr "Step" -#~ msgid "Add asset" -#~ msgstr "添加资产到节点" From 494cd760d78c40b58754fc5366e53118125bb14c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E5=B9=BF?= Date: Fri, 27 Apr 2018 11:33:28 +0800 Subject: [PATCH 3/4] Trans change (#1272) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Update] 更新授权规则生效日期文案 --- apps/i18n/zh/LC_MESSAGES/django.mo | Bin 33048 -> 33090 bytes apps/i18n/zh/LC_MESSAGES/django.po | 5 ++++- .../perms/asset_permission_create_update.html | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/i18n/zh/LC_MESSAGES/django.mo b/apps/i18n/zh/LC_MESSAGES/django.mo index 315bd8b8f3252fa5931e60cd25716924049e6a69..c512eb54f39361c5e2009dbe27a91ff3997ea5a9 100644 GIT binary patch delta 8690 zcmXZgdwh@OAII_gyUiGzjWzr*GshjAiaEAK%p59*oN@?5&7p0Y!wUDDs-<%HRt~MC zqJ9doN<*cgbws~NC7mRhvq$LM@AcmG>7VEIxsIRfy6*e_POBG&lr0SLzpWkiq{n|T zA)eO|i(@=*zsiZK^}KeiJns>_9t&|dejf0=^wysD4AyE(O#Rk&o)?FUuJ^nIT!S}a zDW>C9Ou`N~ILBbP=lR})6twVTSQR(925-AriqX{X!B9Me>VFt(<0Y(yVeLJy0Y+gB zOh(nGVH3OwHEukH;e4#h`raZ6Y}#9j*I_YM$8F|rtVLXoO5`hy!qb?H*RTpEcJRD5 z*b)!*_o{8G&U{vBGtbH=-s;774{MB(L6`I(`dbk30*PBr7TgGE9e;sc z@HAX`3s4z8Xz?=CgvF?V zFQXDOgq+bN}Zk=oz?*x~so18EbWO6LmvP+!wX; zfvAPYqY|Blnm8ZTZ=S`AQS&~A>K8;M_B1xe|6(=0{~uY0&rz8kLrrwb;`8PosH+L* zyQ+y|QAeGKI>Gj+g>FIh>yJ9I5!evNpib_7RKknV*AYENK@Zz{)WcJXqwy1Li^+Vz zwa`dZf>Tiw&qhr&7q#FL)Q(r87Fvxh@Ok7X#rx3w1ocTin9lvHaG8pB7i)xY>6T#@_7iGy%0h zip3pK3-mzUeFmz1I4Yqm)Q)pe&%`WL!V4^Z7?ns6S61O+EGu`go9B>I~jFyxu|h7Q5#%f^^YU{d@o2rnLT3- z8&Nxa1+~zds2%J^C3FDm<98T>f1nci8#S)VEpDM0)P~|wC)^IzuRChJJ{ZdS-au=( z12teYYT+Ez(auB-n2VZd3F;wx0`*YsL%lu!LnT;&O88G~f>FJk?NBE*1RG$MWPQ)4 zpaq{c*P|AE3ANMLP>FqvE%94yhT*;45vQX1w==t-66=XN`hlpOk47ah5!F8*ecjbO z3Oc%ntiwvYf%tjUPL5z0o7Qco`#Je#ZPvV_;7B#L^ z3e>!QNI!Q+F{q5{nJrP7c0?U%hSiTkB`^i6;e5=&hcFMXVO7lT@7nWFS93oq;X-VQ zk0J^B-s=>qQ}HS4B)&vV@Et0lQ<#KTQ9DZ*;3jT{>faibPzThrlZm?9u~-A=qE7Z< zb1mw`Ud0%_|L;!{6qM1|s7%jcWBeDjh|{np z-h%2k7^Cqn)c72W7oe_m1?q(MV{QC;Fz2rU=crI-f1?IQ3~@VeU^c}F>QhlWOhfhW zib^B{wShZO2~9zrTmfoB3s5IljOzaqPQo{QYiMwXo3I6Hf*Y_s_P|)2iJG7YWAF)7 zq8m_GumiP`L#V{QMh!(PVQydyCelzB`8au9P!lY&_LaDZ zc#YM^5BI!V1ANc1fcpDK@YfCgiuo8aT`1B6B(Fh*zO@wBG8sSo{XYQD0{9m*z>-$z4{g_dnz=R}qbx zC;_!_E3>`X)$D=lmuU_~B{;#HiAwBY)a$(xE3XC{5tpIH|A3W$|DUIzha_a2U4>cK zY=j!n+`Pf;j@ropi$`0WjY^=v>KB>I&1cL_<2Zj!yn_lo#rse@Id1VqRC~mDS6>Ge zC!==M(c*NA`=Q1UvigabNSue-c@Q;jyIDHkcNKf6(8T4|a2WNp9<%zNP!nH5B^oxt zec9qsJ54lG%`~$+YQetP0S8*V#M&SADd-5FvWAV=k$AJkKbdFD%jWNRFa5kMmsk#J z0}IV%sD+Eo7tBr8zRmRCp`ZjlM(yO7c@j0j1=P;3nh_J-LJd*%$*6HRT78Bkm} zH{C2WgRb58Hd0UmC8&w^qCOy>TKy5LKZ%tIp>}%J4COnjIL3@eEtq0)y4epkez?VB zD`W0|Dg{0LGf;^XRyKIva@54D%onYGoB5XcE^6HS7Jq>ncigP7`fKJtR$pZ@<5=IT zO+f>ipfYTWEwQ7;W6epZPxLfQ#QCUk&sqCs)NjMgsD@59;e#e5Y@P@u&>% zLG5IY)h|UI@k(=@)xT%iHxxLF4VYb7B57- zrpr*TsdjaD@sj@Goiyk$G-l0_x#vf$G;5)vpU`p$v;Bp%$8f z8ed@bkD6<&eIsg~&8Us<$m9GgGo(TTkD?~7K-EXga0|wm@fb~girE!4Q9o4wEL?G&5|FrgM_qp-WsGs=+pMp9L!`hgIdOc>LCSH%4c&GWE`2lL&LGv5b_|q2uh58Oe zlySP5#t+o%NgnV*^8nrF=4%qp{7|Js<&xCCbToHX#R*==!zLK$NhZ}je1r(q1q>yIp$ofNqrIO3Ra^MdfD8Hz6QQYLGCpV zna5EBDlEQa{)2kIYw+(bwYSE4*a0=qt*DLMi7_}G6L3E2?RplQ;M)b)>R}#Cg~o-$y+okq@{;>Yx&c$JLmE*Wq5P{}Pq(Nz|2}eSq`l zSIE0eMGd@)nlNOp>llejAl7VZw#Ui@Q40>U`Yfxz&*~pEgXVMQW^<=+g>p=0qQe&d zgIb`*Jhwn2GZmFkXH=q@=3vy$Mw?mY6jXwFsQKoj#;-tqS^f1CG|?v1k-Uz&vz<5} zKSoW^k3bGbO)wF=Vm@l(t*Cj*to;-78`Rrz*5VLOT>bRR$9%rm&=tI7)WjVv&aik0 zYJx0_3(O+aL~Brqy?{#OHEZ8%?VqEr__)PCpib%xMtY;T`^o}8KGqOf=sLur7N~D= zGfX8;MLo2`Q423ISE3%eb*OQjgAs|lqN?i8O8(PXRS$lacp*@;?2fk3sA>zln0 z2t)*rG(Qmt50q@r!lLP+;YP}cc delta 8651 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 gH%Wepsq^
- +
From 55096f9ad55694fb3aac32ccbc71a5bf3b49be5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E5=B9=BF?= Date: Fri, 27 Apr 2018 11:41:47 +0800 Subject: [PATCH 4/4] Bugfix perm asset not active (#1273) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Bugfix] 修复资产禁用了还可以登录的bug --- apps/assets/models/asset.py | 16 ++++- apps/assets/models/node.py | 8 +-- apps/i18n/zh/LC_MESSAGES/django.mo | Bin 33090 -> 33090 bytes apps/i18n/zh/LC_MESSAGES/django.po | 91 ++++++++++++++--------------- apps/perms/models.py | 21 +++++-- apps/perms/utils.py | 26 ++++----- 6 files changed, 92 insertions(+), 70 deletions(-) diff --git a/apps/assets/models/asset.py b/apps/assets/models/asset.py index 5b3009305..4a2942291 100644 --- a/apps/assets/models/asset.py +++ b/apps/assets/models/asset.py @@ -4,7 +4,6 @@ import uuid import logging -import random from django.db import models from django.utils.translation import ugettext_lazy as _ @@ -35,6 +34,19 @@ def default_node(): return None +class AssetQuerySet(models.QuerySet): + def active(self): + return self.filter(is_active=True) + + def valid(self): + return self.active() + + +class AssetManager(models.Manager): + def get_queryset(self): + return AssetQuerySet(self.model, using=self._db) + + class Asset(models.Model): # Important PLATFORM_CHOICES = ( @@ -83,6 +95,8 @@ class Asset(models.Model): date_created = models.DateTimeField(auto_now_add=True, null=True, blank=True, verbose_name=_('Date created')) comment = models.TextField(max_length=128, default='', blank=True, verbose_name=_('Comment')) + objects = AssetManager() + def __str__(self): return '{0.hostname}({0.ip})'.format(self) diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py index 1b765aefb..7939ad1e9 100644 --- a/apps/assets/models/node.py +++ b/apps/assets/models/node.py @@ -63,8 +63,8 @@ class Node(models.Model): assets = Asset.objects.filter(nodes__id=self.id) return assets - def get_active_assets(self): - return self.get_assets().filter(is_active=True) + def get_valid_assets(self): + return self.get_assets().valid() def get_all_assets(self): from .asset import Asset @@ -78,8 +78,8 @@ class Node(models.Model): def has_assets(self): return self.get_all_assets() - def get_all_active_assets(self): - return self.get_all_assets().filter(is_active=True) + def get_all_valid_assets(self): + return self.get_all_assets().valid() def is_root(self): return self.key == '0' diff --git a/apps/i18n/zh/LC_MESSAGES/django.mo b/apps/i18n/zh/LC_MESSAGES/django.mo index c512eb54f39361c5e2009dbe27a91ff3997ea5a9..038e65f4355f956a2eb1f56ba8ab8fae46912d00 100644 GIT binary patch delta 17 YcmX@q#B`{MX+vi?ld?(prJ06}U7`v3p{ diff --git a/apps/i18n/zh/LC_MESSAGES/django.po b/apps/i18n/zh/LC_MESSAGES/django.po index 48986cee6..2dc77a3fd 100644 --- a/apps/i18n/zh/LC_MESSAGES/django.po +++ b/apps/i18n/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: 2018-04-27 11:16+0800\n" +"POT-Creation-Date: 2018-04-27 11:39+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -29,15 +29,15 @@ msgstr "" msgid "测试节点下资产是否可连接: {}" msgstr "" -#: assets/forms/asset.py:24 assets/models/asset.py:54 assets/models/user.py:103 +#: assets/forms/asset.py:24 assets/models/asset.py:66 assets/models/user.py:103 #: assets/templates/assets/asset_detail.html:183 #: assets/templates/assets/asset_detail.html:191 -#: assets/templates/assets/system_user_detail.html:166 perms/models.py:23 +#: assets/templates/assets/system_user_detail.html:166 perms/models.py:33 msgid "Nodes" msgstr "节点管理" #: assets/forms/asset.py:27 assets/forms/asset.py:66 assets/forms/asset.py:109 -#: assets/forms/asset.py:113 assets/models/asset.py:58 +#: assets/forms/asset.py:113 assets/models/asset.py:70 #: assets/models/cluster.py:19 assets/models/user.py:72 #: assets/templates/assets/asset_detail.html:73 templates/_nav.html:25 msgid "Admin user" @@ -53,7 +53,7 @@ msgstr "管理用户" msgid "Label" msgstr "标签" -#: assets/forms/asset.py:34 assets/forms/asset.py:73 assets/models/asset.py:53 +#: assets/forms/asset.py:34 assets/forms/asset.py:73 assets/models/asset.py:65 #: assets/models/domain.py:46 msgid "Domain" msgstr "网域" @@ -61,7 +61,7 @@ msgstr "网域" #: assets/forms/asset.py:38 assets/forms/asset.py:63 assets/forms/asset.py:77 #: assets/forms/asset.py:128 assets/templates/assets/asset_create.html:29 #: assets/templates/assets/asset_update.html:34 perms/forms.py:40 -#: perms/forms.py:47 perms/models.py:67 +#: perms/forms.py:47 perms/models.py:76 #: perms/templates/perms/asset_permission_list.html:57 #: perms/templates/perms/asset_permission_list.html:142 msgid "Node" @@ -90,7 +90,7 @@ msgstr "如果有多个的互相隔离的网络,设置资产属于的网域, msgid "Select assets" msgstr "选择资产" -#: assets/forms/asset.py:105 assets/models/asset.py:51 +#: assets/forms/asset.py:105 assets/models/asset.py:63 #: assets/models/domain.py:44 assets/templates/assets/admin_user_assets.html:53 #: assets/templates/assets/asset_detail.html:69 #: assets/templates/assets/domain_gateway_list.html:58 @@ -99,14 +99,14 @@ msgid "Port" msgstr "端口" #: assets/forms/domain.py:14 assets/forms/label.py:13 -#: assets/models/asset.py:169 assets/templates/assets/admin_user_list.html:25 +#: assets/models/asset.py:183 assets/templates/assets/admin_user_list.html:25 #: 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 #: audits/templates/audits/ftp_log_list.html:41 #: audits/templates/audits/ftp_log_list.html:72 perms/forms.py:37 -#: perms/models.py:22 +#: perms/models.py:32 #: perms/templates/perms/asset_permission_create_update.html:40 #: perms/templates/perms/asset_permission_list.html:56 #: perms/templates/perms/asset_permission_list.html:139 @@ -132,7 +132,7 @@ msgstr "资产" #: common/templates/common/terminal_setting.html:67 #: common/templates/common/terminal_setting.html:85 ops/models/adhoc.py:36 #: ops/templates/ops/task_detail.html:59 ops/templates/ops/task_list.html:35 -#: perms/models.py:19 perms/templates/perms/asset_permission_detail.html:62 +#: perms/models.py:29 perms/templates/perms/asset_permission_detail.html:62 #: perms/templates/perms/asset_permission_list.html:53 #: perms/templates/perms/asset_permission_user.html:54 terminal/models.py:16 #: terminal/models.py:154 terminal/templates/terminal/terminal_detail.html:43 @@ -202,7 +202,7 @@ msgid "" "than 2 system user" msgstr "高优先级的系统用户将会作为默认登录用户" -#: assets/models/asset.py:49 assets/models/domain.py:43 +#: assets/models/asset.py:61 assets/models/domain.py:43 #: assets/templates/assets/_asset_list_modal.html:46 #: assets/templates/assets/admin_user_assets.html:52 #: assets/templates/assets/asset_detail.html:61 @@ -217,7 +217,7 @@ msgstr "高优先级的系统用户将会作为默认登录用户" msgid "IP" msgstr "IP" -#: assets/models/asset.py:50 assets/templates/assets/_asset_list_modal.html:45 +#: assets/models/asset.py:62 assets/templates/assets/_asset_list_modal.html:45 #: assets/templates/assets/admin_user_assets.html:51 #: assets/templates/assets/asset_detail.html:57 #: assets/templates/assets/asset_list.html:86 @@ -229,107 +229,107 @@ msgstr "IP" msgid "Hostname" msgstr "主机名" -#: assets/models/asset.py:52 assets/templates/assets/asset_detail.html:97 +#: assets/models/asset.py:64 assets/templates/assets/asset_detail.html:97 msgid "Platform" msgstr "系统平台" -#: assets/models/asset.py:55 assets/models/domain.py:48 +#: assets/models/asset.py:67 assets/models/domain.py:48 #: assets/models/label.py:20 assets/templates/assets/asset_detail.html:105 msgid "Is active" msgstr "激活" -#: assets/models/asset.py:61 assets/templates/assets/asset_detail.html:65 +#: assets/models/asset.py:73 assets/templates/assets/asset_detail.html:65 msgid "Public IP" msgstr "公网IP" -#: assets/models/asset.py:62 assets/templates/assets/asset_detail.html:113 +#: assets/models/asset.py:74 assets/templates/assets/asset_detail.html:113 msgid "Asset number" msgstr "资产编号" -#: assets/models/asset.py:65 assets/templates/assets/asset_detail.html:77 +#: assets/models/asset.py:77 assets/templates/assets/asset_detail.html:77 msgid "Vendor" msgstr "制造商" -#: assets/models/asset.py:66 assets/templates/assets/asset_detail.html:81 +#: assets/models/asset.py:78 assets/templates/assets/asset_detail.html:81 msgid "Model" msgstr "型号" -#: assets/models/asset.py:67 assets/templates/assets/asset_detail.html:109 +#: assets/models/asset.py:79 assets/templates/assets/asset_detail.html:109 msgid "Serial number" msgstr "序列号" -#: assets/models/asset.py:69 +#: assets/models/asset.py:81 msgid "CPU model" msgstr "CPU型号" -#: assets/models/asset.py:70 +#: assets/models/asset.py:82 msgid "CPU count" msgstr "CPU数量" -#: assets/models/asset.py:71 +#: assets/models/asset.py:83 msgid "CPU cores" msgstr "CPU核数" -#: assets/models/asset.py:72 assets/templates/assets/asset_detail.html:89 +#: assets/models/asset.py:84 assets/templates/assets/asset_detail.html:89 msgid "Memory" msgstr "内存" -#: assets/models/asset.py:73 +#: assets/models/asset.py:85 msgid "Disk total" msgstr "硬盘大小" -#: assets/models/asset.py:74 +#: assets/models/asset.py:86 msgid "Disk info" msgstr "硬盘信息" -#: assets/models/asset.py:76 assets/templates/assets/asset_detail.html:101 +#: assets/models/asset.py:88 assets/templates/assets/asset_detail.html:101 msgid "OS" msgstr "操作系统" -#: assets/models/asset.py:77 +#: assets/models/asset.py:89 msgid "OS version" msgstr "系统版本" -#: assets/models/asset.py:78 +#: assets/models/asset.py:90 msgid "OS arch" msgstr "系统架构" -#: assets/models/asset.py:79 +#: assets/models/asset.py:91 msgid "Hostname raw" msgstr "主机名原始" -#: assets/models/asset.py:81 assets/templates/assets/asset_create.html:33 +#: assets/models/asset.py:93 assets/templates/assets/asset_create.html:33 #: assets/templates/assets/asset_detail.html:220 #: assets/templates/assets/asset_update.html:38 templates/_nav.html:27 msgid "Labels" msgstr "标签管理" -#: assets/models/asset.py:82 assets/models/base.py:29 +#: assets/models/asset.py:94 assets/models/base.py:29 #: assets/models/cluster.py:28 assets/models/group.py:21 #: 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 -#: ops/templates/ops/adhoc_detail.html:86 perms/models.py:28 perms/models.py:72 +#: 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:83 users/templates/users/user_detail.html:107 msgid "Created by" msgstr "创建者" -#: assets/models/asset.py:83 assets/models/cluster.py:26 +#: assets/models/asset.py:95 assets/models/cluster.py:26 #: 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 #: ops/templates/ops/adhoc_detail.html:90 ops/templates/ops/task_detail.html:63 -#: perms/models.py:29 perms/models.py:73 +#: perms/models.py:39 perms/models.py:82 #: perms/templates/perms/asset_permission_detail.html:94 #: terminal/templates/terminal/terminal_detail.html:59 users/models/group.py:17 #: users/templates/users/user_group_detail.html:63 msgid "Date created" msgstr "创建日期" -#: assets/models/asset.py:84 assets/models/base.py:26 +#: assets/models/asset.py:96 assets/models/base.py:26 #: assets/models/cluster.py:29 assets/models/domain.py:18 #: assets/models/domain.py:47 assets/models/group.py:23 #: assets/models/label.py:21 assets/templates/assets/admin_user_detail.html:72 @@ -340,7 +340,7 @@ msgstr "创建日期" #: 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 -#: ops/models/adhoc.py:42 perms/models.py:30 perms/models.py:74 +#: 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:15 #: users/models/user.py:75 users/templates/users/user_detail.html:119 @@ -423,7 +423,7 @@ msgstr "默认资产组" #: assets/models/label.py:14 audits/models.py:9 #: audits/templates/audits/ftp_log_list.html:33 #: audits/templates/audits/ftp_log_list.html:71 perms/forms.py:14 -#: perms/forms.py:31 perms/models.py:20 +#: perms/forms.py:31 perms/models.py:30 #: perms/templates/perms/asset_permission_create_update.html:36 #: perms/templates/perms/asset_permission_list.html:54 #: perms/templates/perms/asset_permission_list.html:133 @@ -490,7 +490,7 @@ msgstr "Shell" #: assets/models/user.py:149 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:24 perms/models.py:69 +#: perms/models.py:34 perms/models.py:78 #: perms/templates/perms/asset_permission_detail.html:140 #: perms/templates/perms/asset_permission_list.html:58 #: perms/templates/perms/asset_permission_list.html:145 templates/_nav.html:26 @@ -857,8 +857,8 @@ msgstr "快速修改" #: assets/templates/assets/asset_detail.html:143 #: assets/templates/assets/asset_list.html:89 -#: assets/templates/assets/user_asset_list.html:47 perms/models.py:25 -#: perms/models.py:70 +#: assets/templates/assets/user_asset_list.html:47 perms/models.py:35 +#: perms/models.py:79 #: perms/templates/perms/asset_permission_create_update.html:47 #: perms/templates/perms/asset_permission_detail.html:120 #: perms/templates/perms/asset_permission_list.html:59 @@ -1198,7 +1198,7 @@ msgstr "成功" #: audits/templates/audits/ftp_log_list.html:78 #: ops/templates/ops/adhoc_history.html:52 #: ops/templates/ops/adhoc_history_detail.html:61 -#: ops/templates/ops/task_history.html:58 perms/models.py:26 +#: ops/templates/ops/task_history.html:58 perms/models.py:36 #: perms/templates/perms/asset_permission_detail.html:86 terminal/models.py:137 #: terminal/templates/terminal/session_list.html:77 msgid "Date start" @@ -1712,7 +1712,7 @@ msgstr "执行历史" msgid "Select users" msgstr "选择用户" -#: perms/forms.py:34 perms/models.py:21 perms/models.py:68 +#: perms/forms.py:34 perms/models.py:31 perms/models.py:77 #: perms/templates/perms/asset_permission_list.html:55 #: perms/templates/perms/asset_permission_list.html:136 templates/_nav.html:14 #: users/models/group.py:25 users/models/user.py:48 @@ -1730,14 +1730,14 @@ msgstr "" msgid "Asset or group at least one required" msgstr "" -#: perms/models.py:27 perms/models.py:71 +#: perms/models.py:37 perms/models.py:80 #: perms/templates/perms/asset_permission_detail.html:90 #: users/models/user.py:80 users/templates/users/user_detail.html:103 #: users/templates/users/user_profile.html:105 msgid "Date expired" msgstr "失效日期" -#: perms/models.py:81 templates/_nav.html:34 +#: perms/models.py:90 templates/_nav.html:34 msgid "Asset permission" msgstr "资产授权" @@ -2299,6 +2299,7 @@ msgstr "" "设置复杂密码,启用MFA认证)" #: users/forms.py:154 users/templates/users/first_login.html:48 +#: users/templates/users/first_login.html:107 #: users/templates/users/first_login.html:130 msgid "Finish" msgstr "完成" @@ -2954,5 +2955,3 @@ msgstr "MFA 解绑成功" #: users/views/user.py:519 msgid "MFA disable success, return login page" msgstr "MFA 解绑成功,返回登录页面" - - diff --git a/apps/perms/models.py b/apps/perms/models.py index 954cbe5f6..f7792ee6d 100644 --- a/apps/perms/models.py +++ b/apps/perms/models.py @@ -7,13 +7,23 @@ from django.utils import timezone from common.utils import date_expired_default, set_or_append_attr_bulk -class ValidManager(models.Manager): - def get_queryset(self): - return super().get_queryset().filter(is_active=True) \ - .filter(date_start__lt=timezone.now())\ +class AssetPermissionQuerySet(models.QuerySet): + def active(self): + return self.filter(is_active=True) + + def valid(self): + return self.active().filter(date_start__lt=timezone.now())\ .filter(date_expired__gt=timezone.now()) +class AssetPermissionManager(models.Manager): + def get_queryset(self): + return AssetPermissionQuerySet(self.model, using=self._db) + + def valid(self): + return self.get_queryset().valid() + + class AssetPermission(models.Model): id = models.UUIDField(default=uuid.uuid4, primary_key=True) name = models.CharField(max_length=128, unique=True, verbose_name=_('Name')) @@ -29,8 +39,7 @@ class AssetPermission(models.Model): date_created = models.DateTimeField(auto_now_add=True, verbose_name=_('Date created')) comment = models.TextField(verbose_name=_('Comment'), blank=True) - objects = models.Manager() - valid = ValidManager() + objects = AssetPermissionManager() def __str__(self): return self.name diff --git a/apps/perms/utils.py b/apps/perms/utils.py index 81ac4bf05..b23b1cb7c 100644 --- a/apps/perms/utils.py +++ b/apps/perms/utils.py @@ -16,23 +16,23 @@ class AssetPermissionUtil: @staticmethod def get_user_permissions(user): - return AssetPermission.valid.all().filter(users=user) + return AssetPermission.objects.all().valid().filter(users=user) @staticmethod def get_user_group_permissions(user_group): - return AssetPermission.valid.all().filter(user_groups=user_group) + return AssetPermission.objects.all().valid().filter(user_groups=user_group) @staticmethod def get_asset_permissions(asset): - return AssetPermission.valid.all().filter(assets=asset) + return AssetPermission.objects.all().valid().filter(assets=asset) @staticmethod def get_node_permissions(node): - return AssetPermission.valid.all().filter(nodes=node) + return AssetPermission.objects.all().valid().filter(nodes=node) @staticmethod def get_system_user_permissions(system_user): - return AssetPermission.objects.all().filter(system_users=system_user) + return AssetPermission.objects.valid().all().filter(system_users=system_user) @classmethod def get_user_group_nodes(cls, group): @@ -51,7 +51,7 @@ class AssetPermissionUtil: assets = defaultdict(set) permissions = cls.get_user_group_permissions(group) for perm in permissions: - _assets = perm.assets.all() + _assets = perm.assets.all().valid() _system_users = perm.system_users.all() set_or_append_attr_bulk(_assets, 'permission', perm.id) for asset in _assets: @@ -63,7 +63,7 @@ class AssetPermissionUtil: assets = defaultdict(set) nodes = cls.get_user_group_nodes(group) for node, _system_users in nodes.items(): - _assets = node.get_all_assets() + _assets = node.get_all_valid_assets() set_or_append_attr_bulk(_assets, 'inherit_node', node.id) set_or_append_attr_bulk(_assets, 'permission', getattr(node, 'permission', None)) for asset in _assets: @@ -103,7 +103,7 @@ class AssetPermissionUtil: assets = defaultdict(set) permissions = list(cls.get_user_permissions(user)) for perm in permissions: - _assets = perm.assets.all() + _assets = perm.assets.all().valid() _system_users = perm.system_users.all() set_or_append_attr_bulk(_assets, 'permission', perm.id) for asset in _assets: @@ -127,7 +127,7 @@ class AssetPermissionUtil: assets = defaultdict(set) nodes = cls.get_user_nodes_direct(user) for node, _system_users in nodes.items(): - _assets = node.get_all_assets() + _assets = node.get_all_valid_assets() set_or_append_attr_bulk(_assets, 'inherit_node', node.id) set_or_append_attr_bulk(_assets, 'permission', getattr(node, 'permission', None)) for asset in _assets: @@ -180,10 +180,10 @@ class AssetPermissionUtil: assets = set() permissions = cls.get_system_user_permissions(system_user) for perm in permissions: - assets.update(set(perm.assets.all())) + assets.update(set(perm.assets.all().valid())) nodes = perm.nodes.all() for node in nodes: - assets.update(set(node.get_all_assets())) + assets.update(set(node.get_all_valid_assets())) return assets @classmethod @@ -243,7 +243,7 @@ class NodePermissionUtil: nodes_with_assets = dict() for node, system_users in nodes.items(): nodes_with_assets[node] = { - 'assets': node.get_active_assets(), + 'assets': node.get_valid_assets(), 'system_users': system_users } return nodes_with_assets @@ -274,7 +274,7 @@ class NodePermissionUtil: nodes_with_assets = dict() for node, system_users in nodes.items(): nodes_with_assets[node] = { - 'assets': node.get_active_assets(), + 'assets': node.get_valid_assets(), 'system_users': system_users } return nodes_with_assets