Merge pull request #8100 from jumpserver/dev

v2.21.0-rc5
pull/8133/head
Jiangjie.Bai 2022-04-19 21:52:51 +08:00 committed by GitHub
commit c04ab1aab9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 153 additions and 172 deletions

View File

@ -31,24 +31,24 @@ class CommandFilterSerializer(BulkOrgResourceModelSerializer):
class CommandFilterRuleSerializer(BulkOrgResourceModelSerializer): class CommandFilterRuleSerializer(BulkOrgResourceModelSerializer):
type_display = serializers.ReadOnlyField(source='get_type_display') type_display = serializers.ReadOnlyField(source='get_type_display', label=_("Type display"))
action_display = serializers.ReadOnlyField(source='get_action_display') action_display = serializers.ReadOnlyField(source='get_action_display', label=_("Action display"))
class Meta: class Meta:
model = CommandFilterRule model = CommandFilterRule
fields_mini = ['id'] fields_mini = ['id']
fields_small = fields_mini + [ fields_small = fields_mini + [
'type', 'type_display', 'content', 'ignore_case', 'pattern', 'priority', 'type', 'type_display', 'content', 'ignore_case', 'pattern',
'action', 'action_display', 'reviewers', 'priority', 'action', 'action_display', 'reviewers',
'date_created', 'date_updated', 'date_created', 'date_updated', 'comment', 'created_by',
'comment', 'created_by',
] ]
fields_fk = ['filter'] fields_fk = ['filter']
fields = fields_small + fields_fk fields = fields_small + fields_fk
extra_kwargs = { extra_kwargs = {
'date_created': {'label': _("Date created")}, 'date_created': {'label': _("Date created")},
'date_updated': {'label': _("Date updated")}, 'date_updated': {'label': _("Date updated")},
'action_display': {'label': _("Action display")} 'action_display': {'label': _("Action display")},
'pattern': {'label': _("Pattern")}
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):

View File

@ -7,7 +7,7 @@ from celery import shared_task
from ops.celery.decorator import ( from ops.celery.decorator import (
register_as_period_task register_as_period_task
) )
from .models import UserLoginLog, OperateLog from .models import UserLoginLog, OperateLog, FTPLog
from common.utils import get_log_keep_day from common.utils import get_log_keep_day
@ -29,7 +29,7 @@ def clean_ftp_log_period():
now = timezone.now() now = timezone.now()
days = get_log_keep_day('FTP_LOG_KEEP_DAYS') days = get_log_keep_day('FTP_LOG_KEEP_DAYS')
expired_day = now - datetime.timedelta(days=days) expired_day = now - datetime.timedelta(days=days)
OperateLog.objects.filter(datetime__lt=expired_day).delete() FTPLog.objects.filter(datetime__lt=expired_day).delete()
@register_as_period_task(interval=3600*24) @register_as_period_task(interval=3600*24)

View File

@ -2,14 +2,14 @@
# #
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from common.permissions import IsValidUser
from .. import serializers from .. import serializers
from rbac.permissions import RBACPermission
class AccessKeyViewSet(ModelViewSet): class AccessKeyViewSet(ModelViewSet):
serializer_class = serializers.AccessKeySerializer serializer_class = serializers.AccessKeySerializer
search_fields = ['^id', '^secret'] search_fields = ['^id', '^secret']
permission_classes = [RBACPermission]
def get_queryset(self): def get_queryset(self):
return self.request.user.access_keys.all() return self.request.user.access_keys.all()

View File

@ -70,8 +70,6 @@ class ClientProtocolMixin:
system_user = serializer.validated_data['system_user'] system_user = serializer.validated_data['system_user']
user = serializer.validated_data.get('user') user = serializer.validated_data.get('user')
if not user or not self.request.user.is_superuser:
user = self.request.user
return asset, application, system_user, user return asset, application, system_user, user
@staticmethod @staticmethod

View File

@ -3,15 +3,18 @@ from rest_framework.response import Response
from rest_framework.decorators import action from rest_framework.decorators import action
from common.drf.api import JMSModelViewSet from common.drf.api import JMSModelViewSet
from common.permissions import IsValidUser
from ..models import TempToken from ..models import TempToken
from ..serializers import TempTokenSerializer from ..serializers import TempTokenSerializer
from rbac.permissions import RBACPermission
class TempTokenViewSet(JMSModelViewSet): class TempTokenViewSet(JMSModelViewSet):
serializer_class = TempTokenSerializer serializer_class = TempTokenSerializer
permission_classes = [IsValidUser] permission_classes = [RBACPermission]
http_method_names = ['post', 'get', 'options', 'patch'] http_method_names = ['post', 'get', 'options', 'patch']
rbac_perms = {
'expire': 'authentication.change_temptoken',
}
def get_queryset(self): def get_queryset(self):
username = self.request.user.username username = self.request.user.username

View File

@ -42,7 +42,7 @@ class NoSpecialChars:
class PhoneValidator: class PhoneValidator:
pattern = re.compile(r"^1[356789]\d{9}$") pattern = re.compile(r"^1[3456789]\d{9}$")
message = _('The mobile phone number format is incorrect') message = _('The mobile phone number format is incorrect')
def __call__(self, value): def __call__(self, value):

View File

@ -317,6 +317,7 @@ class Config(dict):
'TERMINAL_RDP_ADDR': '', 'TERMINAL_RDP_ADDR': '',
# 保留(Luna还在用) # 保留(Luna还在用)
'TERMINAL_MAGNUS_ENABLED': True, 'TERMINAL_MAGNUS_ENABLED': True,
'TERMINAL_KOKO_SSH_ENABLED': True,
# 保留(Luna还在用) # 保留(Luna还在用)
'XRDP_ENABLED': True, 'XRDP_ENABLED': True,

View File

@ -140,6 +140,7 @@ CLOUD_SYNC_TASK_EXECUTION_KEEP_DAYS = CONFIG.CLOUD_SYNC_TASK_EXECUTION_KEEP_DAYS
XRDP_ENABLED = CONFIG.XRDP_ENABLED XRDP_ENABLED = CONFIG.XRDP_ENABLED
TERMINAL_MAGNUS_ENABLED = CONFIG.TERMINAL_MAGNUS_ENABLED TERMINAL_MAGNUS_ENABLED = CONFIG.TERMINAL_MAGNUS_ENABLED
TERMINAL_KOKO_SSH_ENABLED = CONFIG.TERMINAL_KOKO_SSH_ENABLED
# SMS enabled # SMS enabled
SMS_ENABLED = CONFIG.SMS_ENABLED SMS_ENABLED = CONFIG.SMS_ENABLED

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:54be66877253eed7bec1db706604af83a48f1c5fbc95eef1132c7f880fef154a oid sha256:4e6962699271d0f5402223321e65211f1c7ad0b7a9b43524f3a0fac7ea2541d9
size 125598 size 125623

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-13 20:35+0800\n" "POT-Creation-Date: 2022-04-19 15:57+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -88,12 +88,12 @@ msgstr "ログイン確認"
#: assets/models/cmd_filter.py:30 assets/models/label.py:15 audits/models.py:37 #: assets/models/cmd_filter.py:30 assets/models/label.py:15 audits/models.py:37
#: audits/models.py:60 audits/models.py:85 audits/serializers.py:100 #: audits/models.py:60 audits/models.py:85 audits/serializers.py:100
#: authentication/models.py:51 orgs/models.py:214 perms/models/base.py:84 #: authentication/models.py:51 orgs/models.py:214 perms/models/base.py:84
#: rbac/builtin.py:107 rbac/models/rolebinding.py:40 #: rbac/builtin.py:110 rbac/models/rolebinding.py:40
#: terminal/backends/command/models.py:20 #: terminal/backends/command/models.py:20
#: terminal/backends/command/serializers.py:12 terminal/models/session.py:44 #: terminal/backends/command/serializers.py:12 terminal/models/session.py:44
#: terminal/notifications.py:91 terminal/notifications.py:139 #: terminal/notifications.py:91 terminal/notifications.py:139
#: tickets/models/comment.py:17 users/const.py:14 users/models/user.py:886 #: tickets/models/comment.py:17 users/const.py:14 users/models/user.py:883
#: users/models/user.py:917 users/serializers/group.py:19 #: users/models/user.py:914 users/serializers/group.py:19
msgid "User" msgid "User"
msgstr "ユーザー" msgstr "ユーザー"
@ -327,7 +327,7 @@ msgstr "ツールバーの"
msgid "Can match application" msgid "Can match application"
msgstr "アプリケーションを一致させることができます" msgstr "アプリケーションを一致させることができます"
#: applications/models/application.py:306 #: applications/models/application.py:305
msgid "Application user" msgid "Application user"
msgstr "アプリケーションユーザー" msgstr "アプリケーションユーザー"
@ -340,8 +340,8 @@ msgstr "カテゴリ表示"
#: applications/serializers/application.py:71 #: applications/serializers/application.py:71
#: applications/serializers/application.py:102 #: applications/serializers/application.py:102
#: assets/serializers/system_user.py:27 audits/serializers.py:29 #: assets/serializers/cmd_filter.py:34 assets/serializers/system_user.py:27
#: perms/serializers/application/permission.py:19 #: audits/serializers.py:29 perms/serializers/application/permission.py:19
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:33 #: tickets/serializers/ticket/meta/ticket_type/apply_application.py:33
#: tickets/serializers/ticket/ticket.py:21 #: tickets/serializers/ticket/ticket.py:21
#: tickets/serializers/ticket/ticket.py:173 #: tickets/serializers/ticket/ticket.py:173
@ -353,17 +353,17 @@ msgstr "タイプ表示"
#: assets/models/domain.py:26 assets/models/gathered_user.py:19 #: assets/models/domain.py:26 assets/models/gathered_user.py:19
#: assets/models/group.py:22 assets/models/label.py:25 #: assets/models/group.py:22 assets/models/label.py:25
#: assets/serializers/account.py:18 assets/serializers/cmd_filter.py:28 #: assets/serializers/account.py:18 assets/serializers/cmd_filter.py:28
#: assets/serializers/cmd_filter.py:49 common/db/models.py:113 #: assets/serializers/cmd_filter.py:48 common/db/models.py:113
#: common/mixins/models.py:50 ops/models/adhoc.py:39 ops/models/command.py:30 #: common/mixins/models.py:50 ops/models/adhoc.py:39 ops/models/command.py:30
#: orgs/models.py:67 orgs/models.py:217 perms/models/base.py:92 #: orgs/models.py:67 orgs/models.py:217 perms/models/base.py:92
#: users/models/group.py:18 users/models/user.py:918 #: users/models/group.py:18 users/models/user.py:915
#: xpack/plugins/cloud/models.py:125 #: xpack/plugins/cloud/models.py:125
msgid "Date created" msgid "Date created"
msgstr "作成された日付" msgstr "作成された日付"
#: applications/serializers/application.py:104 assets/models/base.py:182 #: applications/serializers/application.py:104 assets/models/base.py:182
#: assets/models/gathered_user.py:20 assets/serializers/account.py:21 #: assets/models/gathered_user.py:20 assets/serializers/account.py:21
#: assets/serializers/cmd_filter.py:29 assets/serializers/cmd_filter.py:50 #: assets/serializers/cmd_filter.py:29 assets/serializers/cmd_filter.py:49
#: common/db/models.py:114 common/mixins/models.py:51 ops/models/adhoc.py:40 #: common/db/models.py:114 common/mixins/models.py:51 ops/models/adhoc.py:40
#: orgs/models.py:218 #: orgs/models.py:218
msgid "Date updated" msgid "Date updated"
@ -815,7 +815,7 @@ msgid "Default"
msgstr "デフォルト" msgstr "デフォルト"
#: assets/models/cluster.py:36 assets/models/label.py:14 rbac/const.py:6 #: assets/models/cluster.py:36 assets/models/label.py:14 rbac/const.py:6
#: users/models/user.py:903 #: users/models/user.py:900
msgid "System" msgid "System"
msgstr "システム" msgstr "システム"
@ -1126,10 +1126,14 @@ msgstr "キーパスワード"
msgid "private key invalid or passphrase error" msgid "private key invalid or passphrase error"
msgstr "秘密鍵が無効またはpassphraseエラー" msgstr "秘密鍵が無効またはpassphraseエラー"
#: assets/serializers/cmd_filter.py:51 #: assets/serializers/cmd_filter.py:35 assets/serializers/cmd_filter.py:50
msgid "Action display" msgid "Action display"
msgstr "アクション表示" msgstr "アクション表示"
#: assets/serializers/cmd_filter.py:51 ops/models/adhoc.py:155
msgid "Pattern"
msgstr "パターン"
#: assets/serializers/domain.py:13 assets/serializers/label.py:12 #: assets/serializers/domain.py:13 assets/serializers/label.py:12
#: assets/serializers/system_user.py:59 #: assets/serializers/system_user.py:59
#: perms/serializers/asset/permission.py:49 #: perms/serializers/asset/permission.py:49
@ -1566,7 +1570,7 @@ msgstr "DingTalk"
#: audits/signal_handlers.py:73 authentication/models.py:76 #: audits/signal_handlers.py:73 authentication/models.py:76
msgid "Temporary token" msgid "Temporary token"
msgstr "一時的なトークン" msgstr "仮パスワード"
#: audits/signal_handlers.py:107 #: audits/signal_handlers.py:107
msgid "User and Group" msgid "User and Group"
@ -2177,7 +2181,7 @@ msgstr "コードエラー"
#: authentication/templates/authentication/_msg_reset_password.html:3 #: authentication/templates/authentication/_msg_reset_password.html:3
#: authentication/templates/authentication/_msg_rest_password_success.html:2 #: authentication/templates/authentication/_msg_rest_password_success.html:2
#: authentication/templates/authentication/_msg_rest_public_key_success.html:2 #: authentication/templates/authentication/_msg_rest_public_key_success.html:2
#: jumpserver/conf.py:298 ops/tasks.py:145 ops/tasks.py:148 #: jumpserver/conf.py:299 ops/tasks.py:145 ops/tasks.py:148
#: perms/templates/perms/_msg_item_permissions_expire.html:3 #: perms/templates/perms/_msg_item_permissions_expire.html:3
#: perms/templates/perms/_msg_permed_items_expire.html:3 #: perms/templates/perms/_msg_permed_items_expire.html:3
#: users/templates/users/_msg_account_expire_reminder.html:4 #: users/templates/users/_msg_account_expire_reminder.html:4
@ -2638,11 +2642,11 @@ msgstr "特殊文字を含むべきではない"
msgid "The mobile phone number format is incorrect" msgid "The mobile phone number format is incorrect"
msgstr "携帯電話番号の形式が正しくありません" msgstr "携帯電話番号の形式が正しくありません"
#: jumpserver/conf.py:297 #: jumpserver/conf.py:298
msgid "Create account successfully" msgid "Create account successfully"
msgstr "アカウントを正常に作成" msgstr "アカウントを正常に作成"
#: jumpserver/conf.py:299 #: jumpserver/conf.py:300
msgid "Your account has been created successfully" msgid "Your account has been created successfully"
msgstr "アカウントが正常に作成されました" msgstr "アカウントが正常に作成されました"
@ -2765,10 +2769,6 @@ msgstr "タスクモニターを表示できます"
msgid "Tasks" msgid "Tasks"
msgstr "タスク" msgstr "タスク"
#: ops/models/adhoc.py:155
msgid "Pattern"
msgstr "パターン"
#: ops/models/adhoc.py:156 #: ops/models/adhoc.py:156
msgid "Options" msgid "Options"
msgstr "オプション" msgstr "オプション"
@ -3106,15 +3106,15 @@ msgstr "質問があったら、管理者に連絡して下さい"
msgid "My applications" msgid "My applications"
msgstr "私のアプリケーション" msgstr "私のアプリケーション"
#: rbac/api/role.py:32 #: rbac/api/role.py:33
msgid "Internal role, can't be destroy" msgid "Internal role, can't be destroy"
msgstr "内部の役割は、破壊することはできません" msgstr "内部の役割は、破壊することはできません"
#: rbac/api/role.py:36 #: rbac/api/role.py:37
msgid "The role has been bound to users, can't be destroy" msgid "The role has been bound to users, can't be destroy"
msgstr "ロールはユーザーにバインドされており、破壊することはできません" msgstr "ロールはユーザーにバインドされており、破壊することはできません"
#: rbac/api/role.py:43 #: rbac/api/role.py:44
msgid "Internal role, can't be update" msgid "Internal role, can't be update"
msgstr "内部ロール、更新できません" msgstr "内部ロール、更新できません"
@ -3126,27 +3126,27 @@ msgstr "{} 少なくとも1つのシステムロール"
msgid "RBAC" msgid "RBAC"
msgstr "RBAC" msgstr "RBAC"
#: rbac/builtin.py:98 #: rbac/builtin.py:101
msgid "SystemAdmin" msgid "SystemAdmin"
msgstr "システム管理者" msgstr "システム管理者"
#: rbac/builtin.py:101 #: rbac/builtin.py:104
msgid "SystemAuditor" msgid "SystemAuditor"
msgstr "システム監査人" msgstr "システム監査人"
#: rbac/builtin.py:104 #: rbac/builtin.py:107
msgid "SystemComponent" msgid "SystemComponent"
msgstr "システムコンポーネント" msgstr "システムコンポーネント"
#: rbac/builtin.py:110 #: rbac/builtin.py:113
msgid "OrgAdmin" msgid "OrgAdmin"
msgstr "組織管理者" msgstr "組織管理者"
#: rbac/builtin.py:113 #: rbac/builtin.py:116
msgid "OrgAuditor" msgid "OrgAuditor"
msgstr "監査員を組織する" msgstr "監査員を組織する"
#: rbac/builtin.py:116 #: rbac/builtin.py:119
msgid "OrgUser" msgid "OrgUser"
msgstr "組織ユーザー" msgstr "組織ユーザー"
@ -3190,11 +3190,11 @@ msgstr "権限"
msgid "Built-in" msgid "Built-in"
msgstr "内蔵" msgstr "内蔵"
#: rbac/models/role.py:130 #: rbac/models/role.py:144
msgid "System role" msgid "System role"
msgstr "システムの役割" msgstr "システムの役割"
#: rbac/models/role.py:138 #: rbac/models/role.py:152
msgid "Organization role" msgid "Organization role"
msgstr "組織の役割" msgstr "組織の役割"
@ -3202,22 +3202,22 @@ msgstr "組織の役割"
msgid "Role binding" msgid "Role binding"
msgstr "ロールバインディング" msgstr "ロールバインディング"
#: rbac/models/rolebinding.py:128 #: rbac/models/rolebinding.py:150
msgid "" msgid ""
"User last role in org, can not be delete, you can remove user from org " "User last role in org, can not be delete, you can remove user from org "
"instead" "instead"
msgstr "" msgstr ""
"ユーザーの最後のロールは削除できません。ユーザーを組織から削除できます。" "ユーザーの最後のロールは削除できません。ユーザーを組織から削除できます。"
#: rbac/models/rolebinding.py:135 #: rbac/models/rolebinding.py:157
msgid "Organization role binding" msgid "Organization role binding"
msgstr "組織の役割バインディング" msgstr "組織の役割バインディング"
#: rbac/models/rolebinding.py:150 #: rbac/models/rolebinding.py:172
msgid "System role binding" msgid "System role binding"
msgstr "システムロールバインディング" msgstr "システムロールバインディング"
#: rbac/serializers/permission.py:26 users/serializers/profile.py:126 #: rbac/serializers/permission.py:26 users/serializers/profile.py:127
msgid "Perms" msgid "Perms"
msgstr "パーマ" msgstr "パーマ"
@ -4225,10 +4225,10 @@ msgstr "Telnetログインregex"
#: settings/serializers/terminal.py:33 #: settings/serializers/terminal.py:33
msgid "" msgid ""
"The login success message varies with devices. if you cannot log in to the " "Tips: The login success message varies with devices. if you cannot log in to "
"device through Telnet, set this parameter" "the device through Telnet, set this parameter"
msgstr "" msgstr ""
"ログイン成功メッセージはデバイスによって異なります。Telnet経由でデバイスにロ" "ヒント: ログイン成功メッセージはデバイスによって異なります。Telnet経由でデバイスにロ"
"グインできない場合は、このパラメーターを設定します。" "グインできない場合は、このパラメーターを設定します。"
#: settings/serializers/terminal.py:36 #: settings/serializers/terminal.py:36
@ -4239,6 +4239,10 @@ msgstr "属性マップの有効化"
msgid "Enable XRDP" msgid "Enable XRDP"
msgstr "XRDPの有効化" msgstr "XRDPの有効化"
#: settings/serializers/terminal.py:38
msgid "Enable KoKo SSH"
msgstr "KoKo SSHの有効化"
#: settings/utils/ldap.py:417 #: settings/utils/ldap.py:417
msgid "ldap:// or ldaps:// protocol is used." msgid "ldap:// or ldaps:// protocol is used."
msgstr "ldap:// または ldaps:// プロトコルが使用されます。" msgstr "ldap:// または ldaps:// プロトコルが使用されます。"
@ -4541,11 +4545,11 @@ msgstr ""
"WindowsはクライアントをダウンロードしてSSH資産に接続する必要があり、macOSシス" "WindowsはクライアントをダウンロードしてSSH資産に接続する必要があり、macOSシス"
"テムは独自のTerminalを採用している。" "テムは独自のTerminalを採用している。"
#: templates/resource_download.html:51 #: templates/resource_download.html:53
msgid "Windows Remote application publisher tools" msgid "Windows Remote application publisher tools"
msgstr "Windowsリモートアプリケーション発行者ツール" msgstr "Windowsリモートアプリケーション発行者ツール"
#: templates/resource_download.html:52 #: templates/resource_download.html:54
msgid "" msgid ""
"Jmservisor is the program used to pull up remote applications in Windows " "Jmservisor is the program used to pull up remote applications in Windows "
"Remote Application publisher" "Remote Application publisher"
@ -4557,7 +4561,7 @@ msgstr ""
msgid "Filters" msgid "Filters"
msgstr "フィルター" msgstr "フィルター"
#: terminal/api/endpoint.py:65 #: terminal/api/endpoint.py:63
msgid "Not found protocol query params" msgid "Not found protocol query params"
msgstr "" msgstr ""
@ -5546,7 +5550,7 @@ msgid "Public key should not be the same as your old one."
msgstr "公開鍵は古いものと同じであってはなりません。" msgstr "公開鍵は古いものと同じであってはなりません。"
#: users/forms/profile.py:149 users/serializers/profile.py:95 #: users/forms/profile.py:149 users/serializers/profile.py:95
#: users/serializers/profile.py:176 users/serializers/profile.py:203 #: users/serializers/profile.py:178 users/serializers/profile.py:205
msgid "Not a valid ssh public key" msgid "Not a valid ssh public key"
msgstr "有効なssh公開鍵ではありません" msgstr "有効なssh公開鍵ではありません"
@ -5590,27 +5594,27 @@ msgstr "最終更新日パスワード"
msgid "Need update password" msgid "Need update password"
msgstr "更新パスワードが必要" msgstr "更新パスワードが必要"
#: users/models/user.py:888 #: users/models/user.py:885
msgid "Can invite user" msgid "Can invite user"
msgstr "ユーザーを招待できます" msgstr "ユーザーを招待できます"
#: users/models/user.py:889 #: users/models/user.py:886
msgid "Can remove user" msgid "Can remove user"
msgstr "ユーザーを削除できます" msgstr "ユーザーを削除できます"
#: users/models/user.py:890 #: users/models/user.py:887
msgid "Can match user" msgid "Can match user"
msgstr "ユーザーに一致できます" msgstr "ユーザーに一致できます"
#: users/models/user.py:899 #: users/models/user.py:896
msgid "Administrator" msgid "Administrator"
msgstr "管理者" msgstr "管理者"
#: users/models/user.py:902 #: users/models/user.py:899
msgid "Administrator is the super user of system" msgid "Administrator is the super user of system"
msgstr "管理者はシステムのスーパーユーザーです" msgstr "管理者はシステムのスーパーユーザーです"
#: users/models/user.py:927 #: users/models/user.py:924
msgid "User password history" msgid "User password history"
msgstr "ユーザーパスワード履歴" msgstr "ユーザーパスワード履歴"
@ -5649,7 +5653,7 @@ msgstr "MFAのリセット"
msgid "The old password is incorrect" msgid "The old password is incorrect"
msgstr "古いパスワードが正しくありません" msgstr "古いパスワードが正しくありません"
#: users/serializers/profile.py:36 users/serializers/profile.py:190 #: users/serializers/profile.py:36 users/serializers/profile.py:192
msgid "Password does not match security rules" msgid "Password does not match security rules"
msgstr "パスワードがセキュリティルールと一致しない" msgstr "パスワードがセキュリティルールと一致しない"
@ -5661,7 +5665,7 @@ msgstr "新しいパスワードを最後の {} 個のパスワードにする
msgid "The newly set password is inconsistent" msgid "The newly set password is inconsistent"
msgstr "新しく設定されたパスワードが一致しない" msgstr "新しく設定されたパスワードが一致しない"
#: users/serializers/profile.py:142 users/serializers/user.py:140 #: users/serializers/profile.py:144 users/serializers/user.py:140
msgid "Is first login" msgid "Is first login"
msgstr "最初のログインです" msgstr "最初のログインです"
@ -6721,20 +6725,3 @@ msgstr "究極のエディション"
#: xpack/plugins/license/models.py:77 #: xpack/plugins/license/models.py:77
msgid "Community edition" msgid "Community edition"
msgstr "コミュニティ版" msgstr "コミュニティ版"
#~ msgid "Inherit"
#~ msgstr "継承"
#~ msgid "Include"
#~ msgstr "含める"
#~ msgid "Exclude"
#~ msgstr "除外"
#~ msgid "DatabaseApp"
#~ msgstr "データベースの適用"
#, fuzzy
#~| msgid "Connection token"
#~ msgid "One time token"
#~ msgstr "接続トークン"

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:fa084dd92472110d4bea1674d1e9a96599f42f094aab92f8d34152fdf5726321 oid sha256:3462a9a3eef8f372bf341f2066a33d85e1f01aca5a8fe506528a1cd0a37e98b4
size 103771 size 103951

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: JumpServer 0.3.3\n" "Project-Id-Version: JumpServer 0.3.3\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-13 20:35+0800\n" "POT-Creation-Date: 2022-04-19 15:57+0800\n"
"PO-Revision-Date: 2021-05-20 10:54+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n"
"Last-Translator: ibuler <ibuler@qq.com>\n" "Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: JumpServer team<ibuler@qq.com>\n" "Language-Team: JumpServer team<ibuler@qq.com>\n"
@ -87,12 +87,12 @@ msgstr "登录复核"
#: assets/models/cmd_filter.py:30 assets/models/label.py:15 audits/models.py:37 #: assets/models/cmd_filter.py:30 assets/models/label.py:15 audits/models.py:37
#: audits/models.py:60 audits/models.py:85 audits/serializers.py:100 #: audits/models.py:60 audits/models.py:85 audits/serializers.py:100
#: authentication/models.py:51 orgs/models.py:214 perms/models/base.py:84 #: authentication/models.py:51 orgs/models.py:214 perms/models/base.py:84
#: rbac/builtin.py:107 rbac/models/rolebinding.py:40 #: rbac/builtin.py:110 rbac/models/rolebinding.py:40
#: terminal/backends/command/models.py:20 #: terminal/backends/command/models.py:20
#: terminal/backends/command/serializers.py:12 terminal/models/session.py:44 #: terminal/backends/command/serializers.py:12 terminal/models/session.py:44
#: terminal/notifications.py:91 terminal/notifications.py:139 #: terminal/notifications.py:91 terminal/notifications.py:139
#: tickets/models/comment.py:17 users/const.py:14 users/models/user.py:886 #: tickets/models/comment.py:17 users/const.py:14 users/models/user.py:883
#: users/models/user.py:917 users/serializers/group.py:19 #: users/models/user.py:914 users/serializers/group.py:19
msgid "User" msgid "User"
msgstr "用户" msgstr "用户"
@ -322,7 +322,7 @@ msgstr "属性"
msgid "Can match application" msgid "Can match application"
msgstr "匹配应用" msgstr "匹配应用"
#: applications/models/application.py:306 #: applications/models/application.py:305
msgid "Application user" msgid "Application user"
msgstr "应用用户" msgstr "应用用户"
@ -335,8 +335,8 @@ msgstr "类别名称"
#: applications/serializers/application.py:71 #: applications/serializers/application.py:71
#: applications/serializers/application.py:102 #: applications/serializers/application.py:102
#: assets/serializers/system_user.py:27 audits/serializers.py:29 #: assets/serializers/cmd_filter.py:34 assets/serializers/system_user.py:27
#: perms/serializers/application/permission.py:19 #: audits/serializers.py:29 perms/serializers/application/permission.py:19
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:33 #: tickets/serializers/ticket/meta/ticket_type/apply_application.py:33
#: tickets/serializers/ticket/ticket.py:21 #: tickets/serializers/ticket/ticket.py:21
#: tickets/serializers/ticket/ticket.py:173 #: tickets/serializers/ticket/ticket.py:173
@ -348,17 +348,17 @@ msgstr "类型名称"
#: assets/models/domain.py:26 assets/models/gathered_user.py:19 #: assets/models/domain.py:26 assets/models/gathered_user.py:19
#: assets/models/group.py:22 assets/models/label.py:25 #: assets/models/group.py:22 assets/models/label.py:25
#: assets/serializers/account.py:18 assets/serializers/cmd_filter.py:28 #: assets/serializers/account.py:18 assets/serializers/cmd_filter.py:28
#: assets/serializers/cmd_filter.py:49 common/db/models.py:113 #: assets/serializers/cmd_filter.py:48 common/db/models.py:113
#: common/mixins/models.py:50 ops/models/adhoc.py:39 ops/models/command.py:30 #: common/mixins/models.py:50 ops/models/adhoc.py:39 ops/models/command.py:30
#: orgs/models.py:67 orgs/models.py:217 perms/models/base.py:92 #: orgs/models.py:67 orgs/models.py:217 perms/models/base.py:92
#: users/models/group.py:18 users/models/user.py:918 #: users/models/group.py:18 users/models/user.py:915
#: xpack/plugins/cloud/models.py:125 #: xpack/plugins/cloud/models.py:125
msgid "Date created" msgid "Date created"
msgstr "创建日期" msgstr "创建日期"
#: applications/serializers/application.py:104 assets/models/base.py:182 #: applications/serializers/application.py:104 assets/models/base.py:182
#: assets/models/gathered_user.py:20 assets/serializers/account.py:21 #: assets/models/gathered_user.py:20 assets/serializers/account.py:21
#: assets/serializers/cmd_filter.py:29 assets/serializers/cmd_filter.py:50 #: assets/serializers/cmd_filter.py:29 assets/serializers/cmd_filter.py:49
#: common/db/models.py:114 common/mixins/models.py:51 ops/models/adhoc.py:40 #: common/db/models.py:114 common/mixins/models.py:51 ops/models/adhoc.py:40
#: orgs/models.py:218 #: orgs/models.py:218
msgid "Date updated" msgid "Date updated"
@ -810,7 +810,7 @@ msgid "Default"
msgstr "默认" msgstr "默认"
#: assets/models/cluster.py:36 assets/models/label.py:14 rbac/const.py:6 #: assets/models/cluster.py:36 assets/models/label.py:14 rbac/const.py:6
#: users/models/user.py:903 #: users/models/user.py:900
msgid "System" msgid "System"
msgstr "系统" msgstr "系统"
@ -1118,9 +1118,13 @@ msgstr "密钥密码"
msgid "private key invalid or passphrase error" msgid "private key invalid or passphrase error"
msgstr "密钥不合法或密钥密码错误" msgstr "密钥不合法或密钥密码错误"
#: assets/serializers/cmd_filter.py:51 #: assets/serializers/cmd_filter.py:35 assets/serializers/cmd_filter.py:50
msgid "Action display" msgid "Action display"
msgstr "动作" msgstr "动作名称"
#: assets/serializers/cmd_filter.py:51 ops/models/adhoc.py:155
msgid "Pattern"
msgstr "模式"
#: assets/serializers/domain.py:13 assets/serializers/label.py:12 #: assets/serializers/domain.py:13 assets/serializers/label.py:12
#: assets/serializers/system_user.py:59 #: assets/serializers/system_user.py:59
@ -1554,7 +1558,7 @@ msgstr "钉钉"
#: audits/signal_handlers.py:73 authentication/models.py:76 #: audits/signal_handlers.py:73 authentication/models.py:76
msgid "Temporary token" msgid "Temporary token"
msgstr "临时 Token" msgstr "临时密码"
#: audits/signal_handlers.py:107 #: audits/signal_handlers.py:107
msgid "User and Group" msgid "User and Group"
@ -2156,7 +2160,7 @@ msgstr "代码错误"
#: authentication/templates/authentication/_msg_reset_password.html:3 #: authentication/templates/authentication/_msg_reset_password.html:3
#: authentication/templates/authentication/_msg_rest_password_success.html:2 #: authentication/templates/authentication/_msg_rest_password_success.html:2
#: authentication/templates/authentication/_msg_rest_public_key_success.html:2 #: authentication/templates/authentication/_msg_rest_public_key_success.html:2
#: jumpserver/conf.py:298 ops/tasks.py:145 ops/tasks.py:148 #: jumpserver/conf.py:299 ops/tasks.py:145 ops/tasks.py:148
#: perms/templates/perms/_msg_item_permissions_expire.html:3 #: perms/templates/perms/_msg_item_permissions_expire.html:3
#: perms/templates/perms/_msg_permed_items_expire.html:3 #: perms/templates/perms/_msg_permed_items_expire.html:3
#: users/templates/users/_msg_account_expire_reminder.html:4 #: users/templates/users/_msg_account_expire_reminder.html:4
@ -2608,11 +2612,11 @@ msgstr "不能包含特殊字符"
msgid "The mobile phone number format is incorrect" msgid "The mobile phone number format is incorrect"
msgstr "手机号格式不正确" msgstr "手机号格式不正确"
#: jumpserver/conf.py:297 #: jumpserver/conf.py:298
msgid "Create account successfully" msgid "Create account successfully"
msgstr "创建账号成功" msgstr "创建账号成功"
#: jumpserver/conf.py:299 #: jumpserver/conf.py:300
msgid "Your account has been created successfully" msgid "Your account has been created successfully"
msgstr "你的账号已创建成功" msgstr "你的账号已创建成功"
@ -2730,10 +2734,6 @@ msgstr "可以查看任务监控"
msgid "Tasks" msgid "Tasks"
msgstr "任务" msgstr "任务"
#: ops/models/adhoc.py:155
msgid "Pattern"
msgstr "模式"
#: ops/models/adhoc.py:156 #: ops/models/adhoc.py:156
msgid "Options" msgid "Options"
msgstr "选项" msgstr "选项"
@ -3069,15 +3069,15 @@ msgstr "如果有疑问或需求,请联系系统管理员"
msgid "My applications" msgid "My applications"
msgstr "我的应用" msgstr "我的应用"
#: rbac/api/role.py:32 #: rbac/api/role.py:33
msgid "Internal role, can't be destroy" msgid "Internal role, can't be destroy"
msgstr "内部角色,不能删除" msgstr "内部角色,不能删除"
#: rbac/api/role.py:36 #: rbac/api/role.py:37
msgid "The role has been bound to users, can't be destroy" msgid "The role has been bound to users, can't be destroy"
msgstr "角色已绑定用户,不能删除" msgstr "角色已绑定用户,不能删除"
#: rbac/api/role.py:43 #: rbac/api/role.py:44
msgid "Internal role, can't be update" msgid "Internal role, can't be update"
msgstr "内部角色,不能更新" msgstr "内部角色,不能更新"
@ -3089,27 +3089,27 @@ msgstr "{} 至少有一个系统角色"
msgid "RBAC" msgid "RBAC"
msgstr "RBAC" msgstr "RBAC"
#: rbac/builtin.py:98 #: rbac/builtin.py:101
msgid "SystemAdmin" msgid "SystemAdmin"
msgstr "系统管理员" msgstr "系统管理员"
#: rbac/builtin.py:101 #: rbac/builtin.py:104
msgid "SystemAuditor" msgid "SystemAuditor"
msgstr "系统审计员" msgstr "系统审计员"
#: rbac/builtin.py:104 #: rbac/builtin.py:107
msgid "SystemComponent" msgid "SystemComponent"
msgstr "系统组件" msgstr "系统组件"
#: rbac/builtin.py:110 #: rbac/builtin.py:113
msgid "OrgAdmin" msgid "OrgAdmin"
msgstr "组织管理员" msgstr "组织管理员"
#: rbac/builtin.py:113 #: rbac/builtin.py:116
msgid "OrgAuditor" msgid "OrgAuditor"
msgstr "组织审计员" msgstr "组织审计员"
#: rbac/builtin.py:116 #: rbac/builtin.py:119
msgid "OrgUser" msgid "OrgUser"
msgstr "组织用户" msgstr "组织用户"
@ -3153,11 +3153,11 @@ msgstr "授权"
msgid "Built-in" msgid "Built-in"
msgstr "内置" msgstr "内置"
#: rbac/models/role.py:130 #: rbac/models/role.py:144
msgid "System role" msgid "System role"
msgstr "系统角色" msgstr "系统角色"
#: rbac/models/role.py:138 #: rbac/models/role.py:152
msgid "Organization role" msgid "Organization role"
msgstr "组织角色" msgstr "组织角色"
@ -3165,21 +3165,21 @@ msgstr "组织角色"
msgid "Role binding" msgid "Role binding"
msgstr "角色绑定" msgstr "角色绑定"
#: rbac/models/rolebinding.py:128 #: rbac/models/rolebinding.py:150
msgid "" msgid ""
"User last role in org, can not be delete, you can remove user from org " "User last role in org, can not be delete, you can remove user from org "
"instead" "instead"
msgstr "用户最后一个角色,不能删除,你可以将用户从组织移除" msgstr "用户最后一个角色,不能删除,你可以将用户从组织移除"
#: rbac/models/rolebinding.py:135 #: rbac/models/rolebinding.py:157
msgid "Organization role binding" msgid "Organization role binding"
msgstr "组织角色绑定" msgstr "组织角色绑定"
#: rbac/models/rolebinding.py:150 #: rbac/models/rolebinding.py:172
msgid "System role binding" msgid "System role binding"
msgstr "系统角色绑定" msgstr "系统角色绑定"
#: rbac/serializers/permission.py:26 users/serializers/profile.py:126 #: rbac/serializers/permission.py:26 users/serializers/profile.py:127
msgid "Perms" msgid "Perms"
msgstr "权限" msgstr "权限"
@ -4165,9 +4165,9 @@ msgstr "Telnet 成功正则表达式"
#: settings/serializers/terminal.py:33 #: settings/serializers/terminal.py:33
msgid "" msgid ""
"The login success message varies with devices. if you cannot log in to the " "Tips: The login success message varies with devices. if you cannot log in to "
"device through Telnet, set this parameter" "the device through Telnet, set this parameter"
msgstr "不同设备登录成功提示不一样,所以如果 telnet 不能正常登录,可以这里设置" msgstr "提示: 不同设备登录成功提示不一样,所以如果 telnet 不能正常登录,可以这里设置"
#: settings/serializers/terminal.py:36 #: settings/serializers/terminal.py:36
msgid "Enable database proxy" msgid "Enable database proxy"
@ -4177,6 +4177,10 @@ msgstr "启用数据库组件"
msgid "Enable XRDP" msgid "Enable XRDP"
msgstr "启用 XRDP 服务" msgstr "启用 XRDP 服务"
#: settings/serializers/terminal.py:38
msgid "Enable KoKo SSH"
msgstr "启用 KoKo SSH"
#: settings/utils/ldap.py:417 #: settings/utils/ldap.py:417
msgid "ldap:// or ldaps:// protocol is used." msgid "ldap:// or ldaps:// protocol is used."
msgstr "使用 ldap:// 或 ldaps:// 协议" msgstr "使用 ldap:// 或 ldaps:// 协议"
@ -4446,8 +4450,8 @@ msgid ""
"JumpServer Client, currently used to launch the client, now only support " "JumpServer Client, currently used to launch the client, now only support "
"launch RDP SSH client, The Telnet client will next" "launch RDP SSH client, The Telnet client will next"
msgstr "" msgstr ""
"JumpServer 客户端,目前用来唤起 特定客户端程序 连接资产, 目前仅支持 RDP SSH 客户" "JumpServer 客户端,目前用来唤起 特定客户端程序 连接资产, 目前仅支持 RDP SSH "
"端Telnet 会在未来支持" "客户Telnet 会在未来支持"
#: templates/resource_download.html:30 #: templates/resource_download.html:30
msgid "Microsoft" msgid "Microsoft"
@ -4469,11 +4473,11 @@ msgid ""
"system uses its own terminal" "system uses its own terminal"
msgstr "Windows 需要下载客户端来连接SSH资产macOS系统采用自带的Terminal" msgstr "Windows 需要下载客户端来连接SSH资产macOS系统采用自带的Terminal"
#: templates/resource_download.html:51 #: templates/resource_download.html:53
msgid "Windows Remote application publisher tools" msgid "Windows Remote application publisher tools"
msgstr "Windows 远程应用发布服务器工具" msgstr "Windows 远程应用发布服务器工具"
#: templates/resource_download.html:52 #: templates/resource_download.html:54
msgid "" msgid ""
"Jmservisor is the program used to pull up remote applications in Windows " "Jmservisor is the program used to pull up remote applications in Windows "
"Remote Application publisher" "Remote Application publisher"
@ -4483,7 +4487,7 @@ msgstr "Jmservisor 是在 windows 远程应用发布服务器中用来拉起远
msgid "Filters" msgid "Filters"
msgstr "过滤" msgstr "过滤"
#: terminal/api/endpoint.py:65 #: terminal/api/endpoint.py:63
msgid "Not found protocol query params" msgid "Not found protocol query params"
msgstr "" msgstr ""
@ -5468,7 +5472,7 @@ msgid "Public key should not be the same as your old one."
msgstr "不能和原来的密钥相同" msgstr "不能和原来的密钥相同"
#: users/forms/profile.py:149 users/serializers/profile.py:95 #: users/forms/profile.py:149 users/serializers/profile.py:95
#: users/serializers/profile.py:176 users/serializers/profile.py:203 #: users/serializers/profile.py:178 users/serializers/profile.py:205
msgid "Not a valid ssh public key" msgid "Not a valid ssh public key"
msgstr "SSH密钥不合法" msgstr "SSH密钥不合法"
@ -5512,27 +5516,27 @@ msgstr "最后更新密码日期"
msgid "Need update password" msgid "Need update password"
msgstr "需要更新密码" msgstr "需要更新密码"
#: users/models/user.py:888 #: users/models/user.py:885
msgid "Can invite user" msgid "Can invite user"
msgstr "可以邀请用户" msgstr "可以邀请用户"
#: users/models/user.py:889 #: users/models/user.py:886
msgid "Can remove user" msgid "Can remove user"
msgstr "可以移除用户" msgstr "可以移除用户"
#: users/models/user.py:890 #: users/models/user.py:887
msgid "Can match user" msgid "Can match user"
msgstr "可以匹配用户" msgstr "可以匹配用户"
#: users/models/user.py:899 #: users/models/user.py:896
msgid "Administrator" msgid "Administrator"
msgstr "管理员" msgstr "管理员"
#: users/models/user.py:902 #: users/models/user.py:899
msgid "Administrator is the super user of system" msgid "Administrator is the super user of system"
msgstr "Administrator是初始的超级管理员" msgstr "Administrator是初始的超级管理员"
#: users/models/user.py:927 #: users/models/user.py:924
msgid "User password history" msgid "User password history"
msgstr "用户密码历史" msgstr "用户密码历史"
@ -5571,7 +5575,7 @@ msgstr "重置 MFA"
msgid "The old password is incorrect" msgid "The old password is incorrect"
msgstr "旧密码错误" msgstr "旧密码错误"
#: users/serializers/profile.py:36 users/serializers/profile.py:190 #: users/serializers/profile.py:36 users/serializers/profile.py:192
msgid "Password does not match security rules" msgid "Password does not match security rules"
msgstr "密码不满足安全规则" msgstr "密码不满足安全规则"
@ -5583,7 +5587,7 @@ msgstr "新密码不能是最近 {} 次的密码"
msgid "The newly set password is inconsistent" msgid "The newly set password is inconsistent"
msgstr "两次密码不一致" msgstr "两次密码不一致"
#: users/serializers/profile.py:142 users/serializers/user.py:140 #: users/serializers/profile.py:144 users/serializers/user.py:140
msgid "Is first login" msgid "Is first login"
msgstr "首次登录" msgstr "首次登录"
@ -6629,23 +6633,3 @@ msgstr "旗舰版"
#: xpack/plugins/license/models.py:77 #: xpack/plugins/license/models.py:77
msgid "Community edition" msgid "Community edition"
msgstr "社区版" msgstr "社区版"
#~ msgid "Inherit"
#~ msgstr "继承"
#~ msgid "Include"
#~ msgstr "包含"
#~ msgid "Exclude"
#~ msgstr "不包含"
#~ msgid "DatabaseApp"
#~ msgstr "数据库应用"
#~ msgid "Database proxy MySQL protocol listen port"
#~ msgstr "MySQL 协议监听的端口"
#, fuzzy
#~| msgid "Database proxy PostgreSQL port"
#~ msgid "Database proxy PostgreSQL listen port"
#~ msgstr "数据库组件 PostgreSQL 协议监听的端口"

View File

@ -141,7 +141,6 @@ class UserGrantedAssetSystemUsersForAdminApi(ListAPIView):
return queryset_list return queryset_list
@method_decorator(tmp_to_root_org(), name='list')
class MyGrantedAssetSystemUsersApi(UserGrantedAssetSystemUsersForAdminApi): class MyGrantedAssetSystemUsersApi(UserGrantedAssetSystemUsersForAdminApi):
permission_classes = (IsValidUser,) permission_classes = (IsValidUser,)

View File

@ -65,7 +65,6 @@ class MyGrantedNodesWithAssetsAsTreeApi(SerializeToTreeNodeMixin, ListAPIView):
all_assets = all_assets.annotate(parent_key=F('nodes__key')).prefetch_related('platform') all_assets = all_assets.annotate(parent_key=F('nodes__key')).prefetch_related('platform')
data.extend(self.serialize_assets(all_assets)) data.extend(self.serialize_assets(all_assets))
@tmp_to_root_org()
def list(self, request: Request, *args, **kwargs): def list(self, request: Request, *args, **kwargs):
""" """
此算法依赖 UserGrantedMappingNode 此算法依赖 UserGrantedMappingNode

View File

@ -1,14 +1,11 @@
from rest_framework import generics from rest_framework import generics
from django.utils.decorators import method_decorator
from assets.models import SystemUser from assets.models import SystemUser
from common.permissions import IsValidUser from common.permissions import IsValidUser
from orgs.utils import tmp_to_root_org
from perms.utils.asset.user_permission import get_user_all_asset_perm_ids from perms.utils.asset.user_permission import get_user_all_asset_perm_ids
from .. import serializers from .. import serializers
@method_decorator(tmp_to_root_org(), name='list')
class SystemUserPermission(generics.ListAPIView): class SystemUserPermission(generics.ListAPIView):
permission_classes = (IsValidUser,) permission_classes = (IsValidUser,)
serializer_class = serializers.SystemUserSerializer serializer_class = serializers.SystemUserSerializer

View File

@ -4,7 +4,8 @@ from .const import Scope, system_exclude_permissions, org_exclude_permissions
system_user_perms = ( system_user_perms = (
('authentication', 'connectiontoken', 'add', 'connectiontoken'), ('authentication', 'connectiontoken', 'add', 'connectiontoken'),
('authentication', 'temptoken', 'add', 'temptoken'), ('authentication', 'temptoken', 'add,change,view', 'temptoken'),
('authentication', 'accesskey', '*', '*'),
('tickets', 'ticket', 'view', 'ticket'), ('tickets', 'ticket', 'view', 'ticket'),
('orgs', 'organization', 'view', 'rootorg'), ('orgs', 'organization', 'view', 'rootorg'),
) )

View File

@ -25,6 +25,7 @@ exclude_permissions = (
('authentication', 'connectiontoken', 'change,delete', 'connectiontoken'), ('authentication', 'connectiontoken', 'change,delete', 'connectiontoken'),
('authentication', 'ssotoken', '*', '*'), ('authentication', 'ssotoken', '*', '*'),
('authentication', 'superconnectiontoken', 'change,delete', 'superconnectiontoken'), ('authentication', 'superconnectiontoken', 'change,delete', 'superconnectiontoken'),
('authentication', 'temptoken', 'delete', 'temptoken'),
('users', 'userpasswordhistory', '*', '*'), ('users', 'userpasswordhistory', '*', '*'),
('applications', 'applicationuser', '*', '*'), ('applications', 'applicationuser', '*', '*'),
('applications', 'historicalaccount', '*', '*'), ('applications', 'historicalaccount', '*', '*'),

View File

@ -86,6 +86,8 @@ special_pid_mapper = {
'terminal.replaystorage': 'terminal_node', 'terminal.replaystorage': 'terminal_node',
'terminal.status': 'terminal_node', 'terminal.status': 'terminal_node',
'terminal.task': 'terminal_node', 'terminal.task': 'terminal_node',
'terminal.endpoint': 'terminal_node',
'terminal.endpointrule': 'terminal_node',
'audits.ftplog': 'terminal', 'audits.ftplog': 'terminal',
'perms.view_myassets': 'my_assets', 'perms.view_myassets': 'my_assets',
'perms.view_myapps': 'my_apps', 'perms.view_myapps': 'my_apps',

View File

@ -65,6 +65,7 @@ class PublicSettingApi(generics.RetrieveAPIView):
# Terminal # Terminal
"XRDP_ENABLED": settings.XRDP_ENABLED, "XRDP_ENABLED": settings.XRDP_ENABLED,
"TERMINAL_MAGNUS_ENABLED": settings.TERMINAL_MAGNUS_ENABLED, "TERMINAL_MAGNUS_ENABLED": settings.TERMINAL_MAGNUS_ENABLED,
"TERMINAL_KOKO_SSH_ENABLED": settings.TERMINAL_KOKO_SSH_ENABLED,
# Announcement # Announcement
"ANNOUNCEMENT_ENABLED": settings.ANNOUNCEMENT_ENABLED, "ANNOUNCEMENT_ENABLED": settings.ANNOUNCEMENT_ENABLED,
"ANNOUNCEMENT": settings.ANNOUNCEMENT, "ANNOUNCEMENT": settings.ANNOUNCEMENT,

View File

@ -30,8 +30,9 @@ class TerminalSettingSerializer(serializers.Serializer):
) )
TERMINAL_TELNET_REGEX = serializers.CharField( TERMINAL_TELNET_REGEX = serializers.CharField(
allow_blank=True, max_length=1024, required=False, label=_('Telnet login regex'), allow_blank=True, max_length=1024, required=False, label=_('Telnet login regex'),
help_text=_("The login success message varies with devices. " help_text=_("Tips: The login success message varies with devices. "
"if you cannot log in to the device through Telnet, set this parameter") "if you cannot log in to the device through Telnet, set this parameter")
) )
TERMINAL_MAGNUS_ENABLED = serializers.BooleanField(label=_("Enable database proxy")) TERMINAL_MAGNUS_ENABLED = serializers.BooleanField(label=_("Enable database proxy"))
XRDP_ENABLED = serializers.BooleanField(label=_("Enable XRDP")) XRDP_ENABLED = serializers.BooleanField(label=_("Enable XRDP"))
TERMINAL_KOKO_SSH_ENABLED = serializers.BooleanField(label=_("Enable KoKo SSH"))

View File

@ -125,8 +125,9 @@ function csrfSafeMethod(method) {
} }
function setAjaxCSRFToken() { function setAjaxCSRFToken() {
var csrftoken = getCookie('csrftoken'); const prefix = getCookie('SESSION_COOKIE_NAME_PREFIX', '')
var sessionid = getCookie('sessionid'); var csrftoken = getCookie(`${prefix}csrftoken`);
var sessionid = getCookie(`${prefix}sessionid`);
$.ajaxSetup({ $.ajaxSetup({
beforeSend: function (xhr, settings) { beforeSend: function (xhr, settings) {

View File

@ -2,7 +2,7 @@ from rest_framework.decorators import action
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import status from rest_framework import status
from common.drf.api import JMSBulkModelViewSet from common.drf.api import JMSBulkModelViewSet
from common.utils import get_object_or_none from django.utils.translation import ugettext_lazy as _
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from assets.models import Asset from assets.models import Asset
from orgs.utils import tmp_to_root_org from orgs.utils import tmp_to_root_org

View File

@ -31,8 +31,11 @@ class Endpoint(JMSModel):
def get_port(self, protocol): def get_port(self, protocol):
return getattr(self, f'{protocol}_port', 0) return getattr(self, f'{protocol}_port', 0)
def is_default(self):
return self.id == self.default_id
def delete(self, using=None, keep_parents=False): def delete(self, using=None, keep_parents=False):
if self.id == self.default_id: if self.is_default():
return return
return super().delete(using, keep_parents) return super().delete(using, keep_parents)
@ -78,6 +81,8 @@ class EndpointRule(JMSModel):
continue continue
if not endpoint_rule.endpoint: if not endpoint_rule.endpoint:
continue continue
if endpoint_rule.endpoint.is_default():
return endpoint_rule
if not endpoint_rule.endpoint.host: if not endpoint_rule.endpoint.host:
continue continue
if endpoint_rule.endpoint.get_port(protocol) == 0: if endpoint_rule.endpoint.get_port(protocol) == 0:

View File

@ -455,7 +455,7 @@ class RoleMixin:
if org is None: if org is None:
org = current_org org = current_org
if not org.is_root(): if not org.is_root():
queryset = current_org.get_members() queryset = org.get_members()
queryset = cls.filter_not_service_account(queryset) queryset = cls.filter_not_service_account(queryset)
return queryset return queryset