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 65ba2ea40..850c92503 100644 Binary files a/apps/locale/zh/LC_MESSAGES/django.mo and b/apps/locale/zh/LC_MESSAGES/django.mo differ diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 3b226976e..a377a5384 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-03-09 10:09+0800\n" +"POT-Creation-Date: 2021-03-10 11:16+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \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):