From 7b2f813e7f1aae2b2968ac66a706a8834b58d48b Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Wed, 10 Mar 2021 11:21:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=BF=98=E8=AE=B0=E5=AF=86=E7=A0=81=E9=87=8D=E7=BD=AE=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E7=9A=84=E8=BF=9E=E6=8E=A5=20(#5700)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit perf: 优化代码暗示 Co-authored-by: ibuler --- .../templates/authentication/login.html | 2 +- apps/authentication/views/login.py | 6 + apps/jumpserver/conf.py | 1 + apps/jumpserver/context_processor.py | 2 +- apps/jumpserver/settings/auth.py | 2 +- apps/jumpserver/settings/custom.py | 1 + apps/locale/zh/LC_MESSAGES/django.mo | Bin 70335 -> 70727 bytes apps/locale/zh/LC_MESSAGES/django.po | 203 +++++++++--------- apps/settings/api/common.py | 2 +- apps/settings/serializers/settings.py | 7 +- 10 files changed, 122 insertions(+), 104 deletions(-) diff --git a/apps/authentication/templates/authentication/login.html b/apps/authentication/templates/authentication/login.html index 9866537ba..5534b2ca8 100644 --- a/apps/authentication/templates/authentication/login.html +++ b/apps/authentication/templates/authentication/login.html @@ -163,7 +163,7 @@ {% endif %}
- + {% trans 'Forgot password' %}?
diff --git a/apps/authentication/views/login.py b/apps/authentication/views/login.py index 00de664aa..2c86970d9 100644 --- a/apps/authentication/views/login.py +++ b/apps/authentication/views/login.py @@ -100,11 +100,17 @@ class UserLoginView(mixins.AuthMixin, FormView): self.request.session[RSA_PRIVATE_KEY] = rsa_private_key self.request.session[RSA_PUBLIC_KEY] = rsa_public_key + forgot_password_url = reverse('authentication:forgot-password') + has_other_auth_backend = settings.AUTHENTICATION_BACKENDS[0] != settings.AUTH_BACKEND_MODEL + if has_other_auth_backend and settings.FORGOT_PASSWORD_URL: + forgot_password_url = settings.FORGOT_PASSWORD_URL + context = { 'demo_mode': os.environ.get("DEMO_MODE"), 'AUTH_OPENID': settings.AUTH_OPENID, 'AUTH_CAS': settings.AUTH_CAS, 'rsa_public_key': rsa_public_key, + 'forgot_password_url': forgot_password_url } kwargs.update(context) return super().get_context_data(**kwargs) diff --git a/apps/jumpserver/conf.py b/apps/jumpserver/conf.py index 6cd742238..a9bbce183 100644 --- a/apps/jumpserver/conf.py +++ b/apps/jumpserver/conf.py @@ -287,6 +287,7 @@ class Config(dict): 'DISK_CHECK_ENABLED': True, 'SESSION_SAVE_EVERY_REQUEST': True, 'SESSION_EXPIRE_AT_BROWSER_CLOSE_FORCE': False, + 'FORGOT_PASSWORD_URL': '', } def compatible_auth_openid_of_key(self): diff --git a/apps/jumpserver/context_processor.py b/apps/jumpserver/context_processor.py index 69a7ebbb8..ad8c8c90f 100644 --- a/apps/jumpserver/context_processor.py +++ b/apps/jumpserver/context_processor.py @@ -14,7 +14,7 @@ def jumpserver_processor(request): 'LOGIN_IMAGE_URL': static('img/login_image.png'), 'FAVICON_URL': static('img/facio.ico'), 'LOGIN_CAS_LOGO_URL': static('img/login_cas_logo.png'), - 'JMS_TITLE': _('JumpServer Open Source PAM'), + 'JMS_TITLE': _('JumpServer Open Source Bastion Host'), 'VERSION': settings.VERSION, 'COPYRIGHT': 'FIT2CLOUD 飞致云' + ' © 2014-2021', 'SECURITY_COMMAND_EXECUTION': settings.SECURITY_COMMAND_EXECUTION, diff --git a/apps/jumpserver/settings/auth.py b/apps/jumpserver/settings/auth.py index 5c3c6dcf4..579a0e66f 100644 --- a/apps/jumpserver/settings/auth.py +++ b/apps/jumpserver/settings/auth.py @@ -127,7 +127,7 @@ if AUTH_OPENID: if AUTH_RADIUS: AUTHENTICATION_BACKENDS.insert(0, AUTH_BACKEND_RADIUS) if AUTH_SSO: - AUTHENTICATION_BACKENDS.insert(0, AUTH_BACKEND_SSO) + AUTHENTICATION_BACKENDS.append(AUTH_BACKEND_SSO) ONLY_ALLOW_EXIST_USER_AUTH = CONFIG.ONLY_ALLOW_EXIST_USER_AUTH diff --git a/apps/jumpserver/settings/custom.py b/apps/jumpserver/settings/custom.py index e6c121f94..394c8707a 100644 --- a/apps/jumpserver/settings/custom.py +++ b/apps/jumpserver/settings/custom.py @@ -118,4 +118,5 @@ REFERER_CHECK_ENABLED = CONFIG.REFERER_CHECK_ENABLED CONNECTION_TOKEN_ENABLED = CONFIG.CONNECTION_TOKEN_ENABLED DISK_CHECK_ENABLED = CONFIG.DISK_CHECK_ENABLED +FORGOT_PASSWORD_URL = CONFIG.FORGOT_PASSWORD_URL diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 65ba2ea409e57fac804463f8dc50d9caed1a8159..850c925033ef86eb4934b9de83781965352a5989 100644 GIT binary patch delta 21381 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 E0MZCTvj6}9 delta 20947 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

Ru1TkvIyU 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\n" "Language-Team: JumpServer team\n" @@ -182,8 +182,8 @@ msgstr "用户名" #: applications/serializers/attrs/application_type/vmware_client.py:30 #: assets/models/base.py:252 assets/serializers/asset_user.py:71 #: audits/signals_handler.py:46 authentication/forms.py:22 -#: authentication/templates/authentication/login.html:149 -#: settings/serializers/settings.py:84 users/forms/profile.py:21 +#: authentication/templates/authentication/login.html:148 +#: settings/serializers/settings.py:89 users/forms/profile.py:21 #: users/templates/users/user_otp_check_password.html:13 #: users/templates/users/user_password_update.html:43 #: users/templates/users/user_password_verify.html:18 @@ -207,7 +207,7 @@ msgstr "目标URL" #: applications/serializers/attrs/application_type/mysql_workbench.py:18 #: assets/models/asset.py:183 assets/models/domain.py:52 -#: assets/serializers/asset_user.py:46 settings/serializers/settings.py:103 +#: assets/serializers/asset_user.py:46 settings/serializers/settings.py:108 #: users/templates/users/_granted_assets.html:26 #: users/templates/users/user_asset_permission.html:156 msgid "IP" @@ -263,7 +263,7 @@ msgid "Platform" msgstr "系统平台" #: assets/models/asset.py:184 assets/serializers/asset_user.py:45 -#: assets/serializers/gathered_user.py:20 settings/serializers/settings.py:102 +#: assets/serializers/gathered_user.py:20 settings/serializers/settings.py:107 #: users/templates/users/_granted_assets.html:25 #: users/templates/users/user_asset_permission.html:157 msgid "Hostname" @@ -1286,11 +1286,11 @@ msgstr "登录复核 {}" msgid "SSO auth closed" msgstr "SSO 认证关闭了" -#: authentication/errors.py:220 authentication/views/login.py:219 +#: authentication/errors.py:220 authentication/views/login.py:232 msgid "Your password is too simple, please change it for security" msgstr "你的密码过于简单,为了安全,请修改" -#: authentication/errors.py:229 authentication/views/login.py:234 +#: authentication/errors.py:229 authentication/views/login.py:247 msgid "Your password has expired, please reset before logging in" msgstr "您的密码已过期,先修改再登录" @@ -1412,34 +1412,30 @@ msgstr "确认" msgid "Code error" msgstr "代码错误" -#: authentication/templates/authentication/login.html:137 -msgid "Captcha invalid" -msgstr "验证码错误" - -#: authentication/templates/authentication/login.html:142 +#: authentication/templates/authentication/login.html:141 msgid "Welcome back, please enter username and password to login" msgstr "欢迎回来,请输入用户名和密码登录" -#: authentication/templates/authentication/login.html:168 -#: users/templates/users/forgot_password.html:7 -#: users/templates/users/forgot_password.html:8 +#: authentication/templates/authentication/login.html:167 +#: users/templates/users/forgot_password.html:15 +#: users/templates/users/forgot_password.html:16 msgid "Forgot password" msgstr "忘记密码" -#: authentication/templates/authentication/login.html:175 +#: authentication/templates/authentication/login.html:174 #: templates/_header_bar.html:83 msgid "Login" msgstr "登录" -#: authentication/templates/authentication/login.html:182 +#: authentication/templates/authentication/login.html:181 msgid "More login options" msgstr "更多登录方式" -#: authentication/templates/authentication/login.html:185 +#: authentication/templates/authentication/login.html:184 msgid "OpenID" msgstr "OpenID" -#: authentication/templates/authentication/login.html:190 +#: authentication/templates/authentication/login.html:189 msgid "CAS" msgstr "" @@ -1485,7 +1481,7 @@ msgstr "复制成功" msgid "Please enable cookies and try again." msgstr "设置你的浏览器支持cookie" -#: authentication/views/login.py:165 +#: authentication/views/login.py:178 msgid "" "Wait for {} confirm, You also can copy link to her/him
\n" " Don't close this page" @@ -1493,19 +1489,19 @@ msgstr "" "等待 {} 确认, 你也可以复制链接发给他/她
\n" " 不要关闭本页面" -#: authentication/views/login.py:170 +#: authentication/views/login.py:183 msgid "No ticket found" msgstr "没有发现工单" -#: authentication/views/login.py:202 +#: authentication/views/login.py:215 msgid "Logout success" msgstr "退出登录成功" -#: authentication/views/login.py:203 +#: authentication/views/login.py:216 msgid "Logout success, return login page" msgstr "退出登录成功,返回到登录页面" -#: authentication/views/login.py:218 authentication/views/login.py:233 +#: authentication/views/login.py:231 authentication/views/login.py:246 msgid "Please change your password" msgstr "请修改密码" @@ -1524,10 +1520,8 @@ msgid "Updated by" msgstr "更新人" #: common/drf/exc_handlers.py:25 -#, fuzzy -#| msgid "Reject" msgid "Object" -msgstr "拒绝" +msgstr "对象" #: common/drf/parsers/base.py:17 msgid "The file content overflowed (The maximum length `{}` bytes)" @@ -1607,7 +1601,7 @@ msgid "Should not contains special characters" msgstr "不能包含特殊字符" #: jumpserver/context_processor.py:17 -msgid "JumpServer Open Source PAM" +msgid "JumpServer Open Source Bastion Host" msgstr "JumpServer 开源堡垒机" #: jumpserver/views/celery_flower.py:23 @@ -1854,7 +1848,7 @@ msgstr "应用程序" msgid "Application permission" msgstr "应用管理" -#: perms/models/asset_permission.py:37 settings/serializers/settings.py:107 +#: perms/models/asset_permission.py:37 settings/serializers/settings.py:112 msgid "All" msgstr "全部" @@ -1955,7 +1949,7 @@ msgstr "邮件已经发送{}, 请检查" #: settings/api/common.py:110 xpack/plugins/interface/api.py:18 #: xpack/plugins/interface/models.py:36 -msgid "Welcome to the JumpServer open source fortress" +msgid "Welcome to the JumpServer open source Bastion Host" msgstr "欢迎使用JumpServer开源堡垒机" #: settings/api/ldap.py:189 @@ -1987,130 +1981,142 @@ msgstr "用户向导URL" msgid "User first login update profile done redirect to it" msgstr "用户第一次登录,修改profile后重定向到地址, 可以是 wiki 或 其他说明文档" -#: settings/serializers/settings.py:27 +#: settings/serializers/settings.py:23 +msgid "Forgot password url" +msgstr "忘记密码URL" + +#: settings/serializers/settings.py:24 +msgid "" +"The forgot password url on login page, If you use ldap or cas external " +"authentication, you can set it" +msgstr "" +"登录页面忘记密码URL, 如果使用了 LDAP, OPENID 等外部认证系统,可以自定义用户重" +"置密码访问的地址" + +#: settings/serializers/settings.py:32 msgid "SMTP host" msgstr "SMTP 主机" -#: settings/serializers/settings.py:28 +#: settings/serializers/settings.py:33 msgid "SMTP port" msgstr "SMTP 端口" -#: settings/serializers/settings.py:29 +#: settings/serializers/settings.py:34 msgid "SMTP account" msgstr "SMTP 账号" -#: settings/serializers/settings.py:31 +#: settings/serializers/settings.py:36 msgid "SMTP password" msgstr "SMTP 密码" -#: settings/serializers/settings.py:32 +#: settings/serializers/settings.py:37 msgid "Tips: Some provider use token except password" msgstr "提示:一些邮件提供商需要输入的是授权码" -#: settings/serializers/settings.py:35 +#: settings/serializers/settings.py:40 msgid "Send user" msgstr "发件人" -#: settings/serializers/settings.py:36 +#: settings/serializers/settings.py:41 msgid "Tips: Send mail account, default SMTP account as the send account" msgstr "提示:发送邮件账号,默认使用 SMTP 账号作为发送账号" -#: settings/serializers/settings.py:39 +#: settings/serializers/settings.py:44 msgid "Test recipient" msgstr "测试收件人" -#: settings/serializers/settings.py:40 +#: settings/serializers/settings.py:45 msgid "Tips: Used only as a test mail recipient" msgstr "提示:仅用来作为测试邮件收件人" -#: settings/serializers/settings.py:43 +#: settings/serializers/settings.py:48 msgid "Use SSL" msgstr "使用 SSL" -#: settings/serializers/settings.py:44 +#: settings/serializers/settings.py:49 msgid "If SMTP port is 465, may be select" msgstr "如果SMTP端口是465,通常需要启用 SSL" -#: settings/serializers/settings.py:47 +#: settings/serializers/settings.py:52 msgid "Use TLS" msgstr "使用 TLS" -#: settings/serializers/settings.py:48 +#: settings/serializers/settings.py:53 msgid "If SMTP port is 587, may be select" msgstr "如果SMTP端口是587,通常需要启用 TLS" -#: settings/serializers/settings.py:51 +#: settings/serializers/settings.py:56 msgid "Subject prefix" msgstr "主题前缀" -#: settings/serializers/settings.py:58 +#: settings/serializers/settings.py:63 msgid "Create user email subject" msgstr "邮件主题" -#: settings/serializers/settings.py:59 +#: settings/serializers/settings.py:64 msgid "" "Tips: When creating a user, send the subject of the email (eg:Create account " "successfully)" msgstr "提示: 创建用户时,发送设置密码邮件的主题 (例如: 创建用户成功)" -#: settings/serializers/settings.py:63 +#: settings/serializers/settings.py:68 msgid "Create user honorific" msgstr "邮件的敬语" -#: settings/serializers/settings.py:64 +#: settings/serializers/settings.py:69 msgid "Tips: When creating a user, send the honorific of the email (eg:Hello)" msgstr "提示: 创建用户时,发送设置密码邮件的敬语 (例如: 您好)" -#: settings/serializers/settings.py:68 +#: settings/serializers/settings.py:73 msgid "Create user email content" msgstr "邮件的内容" -#: settings/serializers/settings.py:69 +#: settings/serializers/settings.py:74 msgid "Tips:When creating a user, send the content of the email" msgstr "提示: 创建用户时,发送设置密码邮件的内容" -#: settings/serializers/settings.py:72 +#: settings/serializers/settings.py:77 msgid "Signature" msgstr "署名" -#: settings/serializers/settings.py:73 +#: settings/serializers/settings.py:78 msgid "Tips: Email signature (eg:jumpserver)" msgstr "邮件署名 (如:jumpserver)" -#: settings/serializers/settings.py:81 +#: settings/serializers/settings.py:86 msgid "LDAP server" msgstr "LDAP 地址" -#: settings/serializers/settings.py:81 +#: settings/serializers/settings.py:86 msgid "eg: ldap://localhost:389" msgstr "" -#: settings/serializers/settings.py:83 +#: settings/serializers/settings.py:88 msgid "Bind DN" msgstr "绑定 DN" -#: settings/serializers/settings.py:86 +#: settings/serializers/settings.py:91 msgid "User OU" msgstr "用户 OU" -#: settings/serializers/settings.py:87 +#: settings/serializers/settings.py:92 msgid "Use | split multi OUs" msgstr "多个 OU 使用 | 分割" -#: settings/serializers/settings.py:90 +#: settings/serializers/settings.py:95 msgid "User search filter" msgstr "用户过滤器" -#: settings/serializers/settings.py:91 +#: settings/serializers/settings.py:96 #, python-format msgid "Choice may be (cn|uid|sAMAccountName)=%(user)s)" msgstr "可能的选项是(cn或uid或sAMAccountName=%(user)s)" -#: settings/serializers/settings.py:94 +#: settings/serializers/settings.py:99 msgid "User attr map" msgstr "用户属性映射" -#: settings/serializers/settings.py:95 +#: settings/serializers/settings.py:100 msgid "" "User attr map present how to map LDAP user attr to jumpserver, username,name," "email is jumpserver attr" @@ -2118,35 +2124,35 @@ msgstr "" "用户属性映射代表怎样将LDAP中用户属性映射到jumpserver用户上,username, name," "email 是jumpserver的用户需要属性" -#: settings/serializers/settings.py:97 +#: settings/serializers/settings.py:102 msgid "Enable LDAP auth" msgstr "启用 LDAP 认证" -#: settings/serializers/settings.py:108 +#: settings/serializers/settings.py:113 msgid "Auto" msgstr "自动" -#: settings/serializers/settings.py:114 +#: settings/serializers/settings.py:119 msgid "Password auth" msgstr "密码认证" -#: settings/serializers/settings.py:115 +#: settings/serializers/settings.py:120 msgid "Public key auth" msgstr "密钥认证" -#: settings/serializers/settings.py:116 +#: settings/serializers/settings.py:121 msgid "List sort by" msgstr "资产列表排序" -#: settings/serializers/settings.py:117 +#: settings/serializers/settings.py:122 msgid "List page size" msgstr "资产列表每页数量" -#: settings/serializers/settings.py:119 +#: settings/serializers/settings.py:124 msgid "Session keep duration" msgstr "会话日志保存时间" -#: settings/serializers/settings.py:120 +#: settings/serializers/settings.py:125 msgid "" "Units: days, Session, record, command will be delete if more than duration, " "only in database" @@ -2154,64 +2160,64 @@ msgstr "" "单位:天。 会话、录像、命令记录超过该时长将会被删除(仅影响数据库存储, oss等不" "受影响)" -#: settings/serializers/settings.py:122 +#: settings/serializers/settings.py:127 msgid "Telnet login regex" msgstr "Telnet 成功正则表达式" -#: settings/serializers/settings.py:127 +#: settings/serializers/settings.py:132 msgid "Global MFA auth" msgstr "全局启用 MFA 认证" -#: settings/serializers/settings.py:128 +#: settings/serializers/settings.py:133 msgid "All user enable MFA" msgstr "强制每个启用多因子认证" -#: settings/serializers/settings.py:131 +#: settings/serializers/settings.py:136 msgid "Batch command execution" msgstr "批量命令执行" -#: settings/serializers/settings.py:132 +#: settings/serializers/settings.py:137 msgid "Allow user run batch command or not using ansible" msgstr "是否允许用户使用 ansible 执行批量命令" -#: settings/serializers/settings.py:135 +#: settings/serializers/settings.py:140 msgid "Enable terminal register" msgstr "终端注册" -#: settings/serializers/settings.py:136 +#: settings/serializers/settings.py:141 msgid "" "Allow terminal register, after all terminal setup, you should disable this " "for security" msgstr "是否允许终端注册,当所有终端启动后,为了安全应该关闭" -#: settings/serializers/settings.py:140 +#: settings/serializers/settings.py:145 msgid "Limit the number of login failures" msgstr "限制登录失败次数" -#: settings/serializers/settings.py:144 +#: settings/serializers/settings.py:149 msgid "Block logon interval" msgstr "禁止登录时间间隔" -#: settings/serializers/settings.py:145 +#: settings/serializers/settings.py:150 msgid "" "Tip: (unit/minute) if the user has failed to log in for a limited number of " "times, no login is allowed during this time interval." msgstr "" "提示:(单位:分)当用户登录失败次数达到限制后,那么在此时间间隔内禁止登录" -#: settings/serializers/settings.py:149 +#: settings/serializers/settings.py:154 msgid "Connection max idle time" msgstr "连接最大空闲时间" -#: settings/serializers/settings.py:150 +#: settings/serializers/settings.py:155 msgid "If idle time more than it, disconnect connection Unit: minute" msgstr "提示:如果超过该配置没有操作,连接会被断开 (单位:分)" -#: settings/serializers/settings.py:154 +#: settings/serializers/settings.py:159 msgid "User password expiration" msgstr "用户密码过期时间" -#: settings/serializers/settings.py:155 +#: settings/serializers/settings.py:160 msgid "" "Tip: (unit: day) If the user does not update the password during the time, " "the user password will expire failure;The password expiration reminder mail " @@ -2221,35 +2227,35 @@ msgstr "" "提示:(单位:天)如果用户在此期间没有更新密码,用户密码将过期失效; 密码过期" "提醒邮件将在密码过期前5天内由系统(每天)自动发送给用户" -#: settings/serializers/settings.py:159 +#: settings/serializers/settings.py:164 msgid "Password minimum length" msgstr "密码最小长度" -#: settings/serializers/settings.py:162 +#: settings/serializers/settings.py:167 msgid "Must contain capital" msgstr "必须包含大写字符" -#: settings/serializers/settings.py:164 +#: settings/serializers/settings.py:169 msgid "Must contain lowercase" msgstr "必须包含小写字符" -#: settings/serializers/settings.py:165 +#: settings/serializers/settings.py:170 msgid "Must contain numeric" msgstr "必须包含数字" -#: settings/serializers/settings.py:166 +#: settings/serializers/settings.py:171 msgid "Must contain special" msgstr "必须包含特殊字符" -#: settings/serializers/settings.py:167 +#: settings/serializers/settings.py:172 msgid "Insecure command alert" msgstr "危险命令告警" -#: settings/serializers/settings.py:169 +#: settings/serializers/settings.py:174 msgid "Email recipient" msgstr "邮件收件人" -#: settings/serializers/settings.py:170 +#: settings/serializers/settings.py:175 msgid "Multiple user using , split" msgstr "多个用户,使用 , 分割" @@ -3720,7 +3726,7 @@ msgid "Reset" msgstr "重置" #: users/templates/users/_user.html:52 -#: users/templates/users/forgot_password.html:24 +#: users/templates/users/forgot_password.html:32 #: users/templates/users/user_bulk_update.html:24 #: users/templates/users/user_list.html:40 #: users/templates/users/user_password_update.html:75 @@ -3780,7 +3786,7 @@ msgstr "向导" msgid " for more information" msgstr "获取更多信息" -#: users/templates/users/forgot_password.html:15 +#: users/templates/users/forgot_password.html:23 msgid "Input your email, that will send a mail to your" msgstr "输入您的邮箱, 将会发一封重置邮件到您的邮箱中" @@ -4905,16 +4911,12 @@ msgid "AccessKey Secret" msgstr "" #: xpack/plugins/cloud/serializers.py:28 -#, fuzzy -#| msgid "Tenant ID" msgid "Client ID" -msgstr "租户ID" +msgstr "Client ID" #: xpack/plugins/cloud/serializers.py:31 -#, fuzzy -#| msgid "Secret" msgid "Client Secret" -msgstr "密文" +msgstr "Client Secret" #: xpack/plugins/cloud/serializers.py:34 msgid "Tenant ID" @@ -5025,6 +5027,9 @@ msgstr "旗舰版" msgid "Community edition" msgstr "社区版" +#~ msgid "Captcha invalid" +#~ msgstr "验证码错误" + #~ msgid "" #~ "Not support openssh format key, using ssh-keygen -t rsa -m pem to generate" #~ msgstr "暂不支持OPENSSH格式的密钥,使用 ssh-keygen -t rsa -m pem生成" diff --git a/apps/settings/api/common.py b/apps/settings/api/common.py index ba7945ec7..2f01687f9 100644 --- a/apps/settings/api/common.py +++ b/apps/settings/api/common.py @@ -107,7 +107,7 @@ class PublicSettingApi(generics.RetrieveAPIView): @staticmethod def get_login_title(): - default_title = _('Welcome to the JumpServer open source fortress') + default_title = _('Welcome to the JumpServer open source Bastion Host') if not settings.XPACK_ENABLED: return default_title from xpack.plugins.interface.models import Interface diff --git a/apps/settings/serializers/settings.py b/apps/settings/serializers/settings.py index 982d78ff4..b2b4d7707 100644 --- a/apps/settings/serializers/settings.py +++ b/apps/settings/serializers/settings.py @@ -16,9 +16,14 @@ class BasicSettingSerializer(serializers.Serializer): help_text=_('eg: http://demo.jumpserver.org:8080') ) USER_GUIDE_URL = serializers.URLField( - required=False, allow_blank=True, label=_("User guide url"), + required=False, allow_blank=True, allow_null=True, label=_("User guide url"), help_text=_('User first login update profile done redirect to it') ) + FORGOT_PASSWORD_URL = serializers.URLField( + required=False, allow_blank=True, allow_null=True, label=_("Forgot password url"), + help_text=_('The forgot password url on login page, If you use ' + 'ldap or cas external authentication, you can set it') + ) class EmailSettingSerializer(serializers.Serializer):