feat: Endpoint 支持 oracle 版本 (#8585)

* feat: Endpoint 支持 oracle 版本

* feat: Endpoint 支持 oracle 版本

* feat: Endpoint 支持 oracle 版本

Co-authored-by: Jiangjie.Bai <bugatti_it@163.com>
pull/8590/head
fit2bot 2022-07-13 16:29:05 +08:00 committed by GitHub
parent 2abca39597
commit ce2f6fdc84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 248 additions and 126 deletions

View File

@ -83,3 +83,9 @@ class AppType(models.TextChoices):
if AppCategory.is_xpack(category): if AppCategory.is_xpack(category):
return True return True
return tp in ['oracle', 'postgresql', 'sqlserver'] return tp in ['oracle', 'postgresql', 'sqlserver']
class OracleVersion(models.TextChoices):
version_11g = '11g', '11g'
version_12c = '12c', '12c'
version_other = 'other', _('Other')

View File

@ -10,6 +10,7 @@ from common.mixins import CommonModelMixin
from common.tree import TreeNode from common.tree import TreeNode
from common.utils import is_uuid from common.utils import is_uuid
from assets.models import Asset, SystemUser from assets.models import Asset, SystemUser
from ..const import OracleVersion
from ..utils import KubernetesTree from ..utils import KubernetesTree
from .. import const from .. import const
@ -214,6 +215,8 @@ class ApplicationTreeNodeMixin:
class Application(CommonModelMixin, OrgModelMixin, ApplicationTreeNodeMixin): class Application(CommonModelMixin, OrgModelMixin, ApplicationTreeNodeMixin):
APP_TYPE = const.AppType
name = models.CharField(max_length=128, verbose_name=_('Name')) name = models.CharField(max_length=128, verbose_name=_('Name'))
category = models.CharField( category = models.CharField(
max_length=16, choices=const.AppCategory.choices, verbose_name=_('Category') max_length=16, choices=const.AppCategory.choices, verbose_name=_('Category')
@ -255,6 +258,9 @@ class Application(CommonModelMixin, OrgModelMixin, ApplicationTreeNodeMixin):
def category_db(self): def category_db(self):
return self.category == const.AppCategory.db.value return self.category == const.AppCategory.db.value
def is_type(self, tp):
return self.type == tp
def get_rdp_remote_app_setting(self): def get_rdp_remote_app_setting(self):
from applications.serializers.attrs import get_serializer_class_by_application_type from applications.serializers.attrs import get_serializer_class_by_application_type
if not self.category_remote_app: if not self.category_remote_app:
@ -298,6 +304,15 @@ class Application(CommonModelMixin, OrgModelMixin, ApplicationTreeNodeMixin):
target_ip = self.attrs.get('host') target_ip = self.attrs.get('host')
return target_ip return target_ip
def get_target_protocol_for_oracle(self):
""" Oracle 类型需要单独处理,因为要携带版本号 """
if not self.is_type(self.APP_TYPE.oracle):
return
version = self.attrs.get('version', OracleVersion.version_other)
if version == OracleVersion.version_other:
return
return 'oracle_%s' % version
class ApplicationUser(SystemUser): class ApplicationUser(SystemUser):
class Meta: class Meta:

View File

@ -2,9 +2,15 @@ from rest_framework import serializers
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from ..application_category import DBSerializer from ..application_category import DBSerializer
from applications.const import OracleVersion
__all__ = ['OracleSerializer'] __all__ = ['OracleSerializer']
class OracleSerializer(DBSerializer): class OracleSerializer(DBSerializer):
version = serializers.ChoiceField(
choices=OracleVersion.choices, default=OracleVersion.version_other,
allow_null=True, label=_('Version'),
help_text=_('Magnus currently supports only 11g and 12c connections')
)
port = serializers.IntegerField(default=1521, label=_('Port'), allow_null=True) port = serializers.IntegerField(default=1521, label=_('Port'), allow_null=True)

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:326eef1f3134c1500a6641c6616a9d509befd5db42ead551fe5ca01b3e0273c0 oid sha256:4d5cc27fc996896f8cba5773c99de59ff854f7ef1ae8c470d5c74bb6b371e6ed
size 128150 size 128472

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-07-12 17:58+0800\n" "POT-Creation-Date: 2022-07-13 16:25+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"
@ -23,13 +23,13 @@ msgid "Acls"
msgstr "Acls" msgstr "Acls"
#: acls/models/base.py:25 acls/serializers/login_asset_acl.py:47 #: acls/models/base.py:25 acls/serializers/login_asset_acl.py:47
#: applications/models/application.py:217 assets/models/asset.py:138 #: applications/models/application.py:220 assets/models/asset.py:138
#: assets/models/base.py:175 assets/models/cluster.py:18 #: assets/models/base.py:175 assets/models/cluster.py:18
#: assets/models/cmd_filter.py:27 assets/models/domain.py:23 #: assets/models/cmd_filter.py:27 assets/models/domain.py:23
#: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24 #: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24
#: orgs/models.py:65 perms/models/base.py:83 rbac/models/role.py:29 #: orgs/models.py:65 perms/models/base.py:83 rbac/models/role.py:29
#: settings/models.py:29 settings/serializers/sms.py:6 #: settings/models.py:29 settings/serializers/sms.py:6
#: terminal/models/endpoint.py:10 terminal/models/endpoint.py:82 #: terminal/models/endpoint.py:10 terminal/models/endpoint.py:88
#: terminal/models/storage.py:26 terminal/models/task.py:16 #: terminal/models/storage.py:26 terminal/models/task.py:16
#: terminal/models/terminal.py:100 users/forms/profile.py:33 #: terminal/models/terminal.py:100 users/forms/profile.py:33
#: users/models/group.py:15 users/models/user.py:661 #: users/models/group.py:15 users/models/user.py:661
@ -38,12 +38,12 @@ msgid "Name"
msgstr "名前" msgstr "名前"
#: acls/models/base.py:27 assets/models/cmd_filter.py:84 #: acls/models/base.py:27 assets/models/cmd_filter.py:84
#: assets/models/user.py:251 terminal/models/endpoint.py:85 #: assets/models/user.py:251 terminal/models/endpoint.py:91
msgid "Priority" msgid "Priority"
msgstr "優先順位" msgstr "優先順位"
#: acls/models/base.py:28 assets/models/cmd_filter.py:84 #: acls/models/base.py:28 assets/models/cmd_filter.py:84
#: assets/models/user.py:251 terminal/models/endpoint.py:86 #: assets/models/user.py:251 terminal/models/endpoint.py:92
msgid "1-100, the lower the value will be match first" msgid "1-100, the lower the value will be match first"
msgstr "1-100、低い値は最初に一致します" msgstr "1-100、低い値は最初に一致します"
@ -53,7 +53,7 @@ msgstr "1-100、低い値は最初に一致します"
msgid "Active" msgid "Active"
msgstr "アクティブ" msgstr "アクティブ"
#: acls/models/base.py:32 applications/models/application.py:230 #: acls/models/base.py:32 applications/models/application.py:233
#: assets/models/asset.py:143 assets/models/asset.py:231 #: assets/models/asset.py:143 assets/models/asset.py:231
#: assets/models/backup.py:54 assets/models/base.py:180 #: assets/models/backup.py:54 assets/models/base.py:180
#: assets/models/cluster.py:29 assets/models/cmd_filter.py:48 #: assets/models/cluster.py:29 assets/models/cmd_filter.py:48
@ -61,7 +61,7 @@ msgstr "アクティブ"
#: assets/models/domain.py:65 assets/models/group.py:23 #: assets/models/domain.py:65 assets/models/group.py:23
#: assets/models/label.py:23 ops/models/adhoc.py:38 orgs/models.py:68 #: assets/models/label.py:23 ops/models/adhoc.py:38 orgs/models.py:68
#: perms/models/base.py:93 rbac/models/role.py:37 settings/models.py:34 #: perms/models/base.py:93 rbac/models/role.py:37 settings/models.py:34
#: terminal/models/endpoint.py:21 terminal/models/endpoint.py:92 #: terminal/models/endpoint.py:23 terminal/models/endpoint.py:98
#: terminal/models/storage.py:29 terminal/models/terminal.py:114 #: terminal/models/storage.py:29 terminal/models/terminal.py:114
#: tickets/models/comment.py:32 tickets/models/ticket/general.py:288 #: tickets/models/comment.py:32 tickets/models/ticket/general.py:288
#: users/models/group.py:16 users/models/user.py:698 #: users/models/group.py:16 users/models/user.py:698
@ -157,7 +157,7 @@ msgstr "コンマ区切り文字列の形式。* はすべて一致すること
#: acls/serializers/login_asset_acl.py:51 assets/models/base.py:176 #: acls/serializers/login_asset_acl.py:51 assets/models/base.py:176
#: assets/models/gathered_user.py:15 audits/models.py:121 #: assets/models/gathered_user.py:15 audits/models.py:121
#: authentication/forms.py:25 authentication/forms.py:27 #: authentication/forms.py:25 authentication/forms.py:27
#: authentication/models.py:245 #: authentication/models.py:253
#: authentication/templates/authentication/_msg_different_city.html:9 #: authentication/templates/authentication/_msg_different_city.html:9
#: authentication/templates/authentication/_msg_oauth_bind.html:9 #: authentication/templates/authentication/_msg_oauth_bind.html:9
#: ops/models/adhoc.py:159 users/forms/profile.py:32 users/models/user.py:659 #: ops/models/adhoc.py:159 users/forms/profile.py:32 users/models/user.py:659
@ -185,7 +185,7 @@ msgstr ""
#: authentication/templates/authentication/_msg_oauth_bind.html:12 #: authentication/templates/authentication/_msg_oauth_bind.html:12
#: authentication/templates/authentication/_msg_rest_password_success.html:8 #: authentication/templates/authentication/_msg_rest_password_success.html:8
#: authentication/templates/authentication/_msg_rest_public_key_success.html:8 #: authentication/templates/authentication/_msg_rest_public_key_success.html:8
#: settings/serializers/terminal.py:8 terminal/serializers/endpoint.py:42 #: settings/serializers/terminal.py:8 terminal/serializers/endpoint.py:54
msgid "IP" msgid "IP"
msgstr "IP" msgstr "IP"
@ -241,7 +241,7 @@ msgstr ""
msgid "Time Period" msgid "Time Period"
msgstr "期間" msgstr "期間"
#: applications/apps.py:9 applications/models/application.py:63 #: applications/apps.py:9 applications/models/application.py:64
msgid "Applications" msgid "Applications"
msgstr "アプリケーション" msgstr "アプリケーション"
@ -260,7 +260,11 @@ msgstr "リモートアプリ"
msgid "Custom" msgid "Custom"
msgstr "カスタム" msgstr "カスタム"
#: applications/models/account.py:12 applications/models/application.py:234 #: applications/const.py:91 rbac/tree.py:29
msgid "Other"
msgstr "その他"
#: applications/models/account.py:12 applications/models/application.py:237
#: assets/models/backup.py:32 assets/models/cmd_filter.py:45 #: assets/models/backup.py:32 assets/models/cmd_filter.py:45
#: authentication/models.py:67 authentication/models.py:95 #: authentication/models.py:67 authentication/models.py:95
#: perms/models/application_permission.py:28 #: perms/models/application_permission.py:28
@ -278,8 +282,9 @@ msgstr "アプリケーション"
msgid "System user" msgid "System user"
msgstr "システムユーザー" msgstr "システムユーザー"
#: applications/models/account.py:17 assets/models/authbook.py:21 #: applications/models/account.py:17
#: settings/serializers/auth/cas.py:18 #: applications/serializers/attrs/application_type/oracle.py:13
#: assets/models/authbook.py:21 settings/serializers/auth/cas.py:18
msgid "Version" msgid "Version"
msgstr "バージョン" msgstr "バージョン"
@ -295,7 +300,7 @@ msgstr "アプリケーションアカウントの秘密を表示できます"
msgid "Can change application account secret" msgid "Can change application account secret"
msgstr "アプリケーションアカウントの秘密を変更できます" msgstr "アプリケーションアカウントの秘密を変更できます"
#: applications/models/application.py:219 #: applications/models/application.py:222
#: applications/serializers/application.py:99 assets/models/label.py:21 #: applications/serializers/application.py:99 assets/models/label.py:21
#: perms/models/application_permission.py:21 #: perms/models/application_permission.py:21
#: perms/serializers/application/user_permission.py:33 #: perms/serializers/application/user_permission.py:33
@ -304,7 +309,7 @@ msgstr "アプリケーションアカウントの秘密を変更できます"
msgid "Category" msgid "Category"
msgstr "カテゴリ" msgstr "カテゴリ"
#: applications/models/application.py:222 #: applications/models/application.py:225
#: applications/serializers/application.py:101 assets/models/backup.py:49 #: applications/serializers/application.py:101 assets/models/backup.py:49
#: assets/models/cmd_filter.py:82 assets/models/user.py:250 #: assets/models/cmd_filter.py:82 assets/models/user.py:250
#: authentication/models.py:70 perms/models/application_permission.py:24 #: authentication/models.py:70 perms/models/application_permission.py:24
@ -318,21 +323,21 @@ msgstr "カテゴリ"
msgid "Type" msgid "Type"
msgstr "タイプ" msgstr "タイプ"
#: applications/models/application.py:226 assets/models/asset.py:217 #: applications/models/application.py:229 assets/models/asset.py:217
#: assets/models/domain.py:29 assets/models/domain.py:64 #: assets/models/domain.py:29 assets/models/domain.py:64
msgid "Domain" msgid "Domain"
msgstr "ドメイン" msgstr "ドメイン"
#: applications/models/application.py:228 xpack/plugins/cloud/models.py:33 #: applications/models/application.py:231 xpack/plugins/cloud/models.py:33
#: xpack/plugins/cloud/serializers/account.py:60 #: xpack/plugins/cloud/serializers/account.py:60
msgid "Attrs" msgid "Attrs"
msgstr "ツールバーの" msgstr "ツールバーの"
#: applications/models/application.py:238 #: applications/models/application.py:241
msgid "Can match application" msgid "Can match application"
msgstr "アプリケーションを一致させることができます" msgstr "アプリケーションを一致させることができます"
#: applications/models/application.py:305 #: applications/models/application.py:320
msgid "Application user" msgid "Application user"
msgstr "アプリケーションユーザー" msgstr "アプリケーションユーザー"
@ -397,7 +402,7 @@ msgstr "ホスト"
#: applications/serializers/attrs/application_type/mongodb.py:10 #: applications/serializers/attrs/application_type/mongodb.py:10
#: applications/serializers/attrs/application_type/mysql.py:10 #: applications/serializers/attrs/application_type/mysql.py:10
#: applications/serializers/attrs/application_type/mysql_workbench.py:22 #: applications/serializers/attrs/application_type/mysql_workbench.py:22
#: applications/serializers/attrs/application_type/oracle.py:10 #: applications/serializers/attrs/application_type/oracle.py:16
#: applications/serializers/attrs/application_type/pgsql.py:10 #: applications/serializers/attrs/application_type/pgsql.py:10
#: applications/serializers/attrs/application_type/redis.py:10 #: applications/serializers/attrs/application_type/redis.py:10
#: applications/serializers/attrs/application_type/sqlserver.py:10 #: applications/serializers/attrs/application_type/sqlserver.py:10
@ -467,6 +472,10 @@ msgstr "Mysql workbench のユーザー名"
msgid "Mysql workbench password" msgid "Mysql workbench password"
msgstr "Mysql workbench パスワード" msgstr "Mysql workbench パスワード"
#: applications/serializers/attrs/application_type/oracle.py:14
msgid "Magnus currently supports only 11g and 12c connections"
msgstr "現在、Magnusは11gおよび12cバージョンへの接続のみをサポートしています"
#: applications/serializers/attrs/application_type/vmware_client.py:26 #: applications/serializers/attrs/application_type/vmware_client.py:26
msgid "Vmware username" msgid "Vmware username"
msgstr "Vmware ユーザー名" msgstr "Vmware ユーザー名"
@ -768,7 +777,7 @@ msgstr "失敗しました"
msgid "Connectivity" msgid "Connectivity"
msgstr "接続性" msgstr "接続性"
#: assets/models/base.py:40 authentication/models.py:248 #: assets/models/base.py:40 authentication/models.py:256
msgid "Date verified" msgid "Date verified"
msgstr "確認済みの日付" msgstr "確認済みの日付"
@ -1616,7 +1625,7 @@ msgstr "本を飛ばす"
msgid "DingTalk" msgid "DingTalk"
msgstr "DingTalk" msgstr "DingTalk"
#: audits/signal_handlers.py:56 authentication/models.py:252 #: audits/signal_handlers.py:56 authentication/models.py:260
msgid "Temporary token" msgid "Temporary token"
msgstr "仮パスワード" msgstr "仮パスワード"
@ -2106,13 +2115,13 @@ msgstr "期限切れ"
msgid "SSO token" msgid "SSO token"
msgstr "SSO token" msgstr "SSO token"
#: authentication/models.py:72 authentication/models.py:246 #: authentication/models.py:72 authentication/models.py:254
#: authentication/templates/authentication/_access_key_modal.html:31 #: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:17 #: settings/serializers/auth/radius.py:17
msgid "Secret" msgid "Secret"
msgstr "ひみつ" msgstr "ひみつ"
#: authentication/models.py:74 authentication/models.py:249 #: authentication/models.py:74 authentication/models.py:257
#: perms/models/base.py:90 tickets/models/ticket/apply_application.py:26 #: perms/models/base.py:90 tickets/models/ticket/apply_application.py:26
#: tickets/models/ticket/apply_asset.py:24 users/models/user.py:703 #: tickets/models/ticket/apply_asset.py:24 users/models/user.py:703
msgid "Date expired" msgid "Date expired"
@ -2130,51 +2139,51 @@ msgstr "接続トークン"
msgid "Can view connection token secret" msgid "Can view connection token secret"
msgstr "接続トークンの秘密を表示できます" msgstr "接続トークンの秘密を表示できます"
#: authentication/models.py:141 #: authentication/models.py:149
msgid "Connection token expired at: {}" msgid "Connection token expired at: {}"
msgstr "接続トークンの有効期限: {}" msgstr "接続トークンの有効期限: {}"
#: authentication/models.py:146 #: authentication/models.py:154
msgid "User not exists" msgid "User not exists"
msgstr "ユーザーは存在しません" msgstr "ユーザーは存在しません"
#: authentication/models.py:150 #: authentication/models.py:158
msgid "User invalid, disabled or expired" msgid "User invalid, disabled or expired"
msgstr "ユーザーが無効、無効、または期限切れです" msgstr "ユーザーが無効、無効、または期限切れです"
#: authentication/models.py:155 #: authentication/models.py:163
msgid "System user not exists" msgid "System user not exists"
msgstr "システムユーザーが存在しません" msgstr "システムユーザーが存在しません"
#: authentication/models.py:161 #: authentication/models.py:169
msgid "Asset not exists" msgid "Asset not exists"
msgstr "アセットが存在しません" msgstr "アセットが存在しません"
#: authentication/models.py:165 #: authentication/models.py:173
msgid "Asset inactive" msgid "Asset inactive"
msgstr "アセットがアクティブ化されていません" msgstr "アセットがアクティブ化されていません"
#: authentication/models.py:172 #: authentication/models.py:180
msgid "User has no permission to access asset or permission expired" msgid "User has no permission to access asset or permission expired"
msgstr "" msgstr ""
"ユーザーがアセットにアクセスする権限を持っていないか、権限の有効期限が切れて" "ユーザーがアセットにアクセスする権限を持っていないか、権限の有効期限が切れて"
"います" "います"
#: authentication/models.py:180 #: authentication/models.py:188
msgid "Application not exists" msgid "Application not exists"
msgstr "アプリが存在しません" msgstr "アプリが存在しません"
#: authentication/models.py:187 #: authentication/models.py:195
msgid "User has no permission to access application or permission expired" msgid "User has no permission to access application or permission expired"
msgstr "" msgstr ""
"ユーザーがアプリにアクセスする権限を持っていないか、権限の有効期限が切れてい" "ユーザーがアプリにアクセスする権限を持っていないか、権限の有効期限が切れてい"
"ます" "ます"
#: authentication/models.py:247 #: authentication/models.py:255
msgid "Verified" msgid "Verified"
msgstr "確認済み" msgstr "確認済み"
#: authentication/models.py:268 #: authentication/models.py:276
msgid "Super connection token" msgid "Super connection token"
msgstr "スーパー接続トークン" msgstr "スーパー接続トークン"
@ -2191,7 +2200,11 @@ msgstr "バインディングリマインダー"
msgid "Validity" msgid "Validity"
msgstr "有効性" msgstr "有効性"
#: authentication/serializers/connection_token.py:73 #: authentication/serializers/connection_token.py:24
msgid "Expired time"
msgstr "期限切れ時間"
#: authentication/serializers/connection_token.py:74
msgid "Asset or application required" msgid "Asset or application required"
msgstr "アセットまたはアプリが必要" msgstr "アセットまたはアプリが必要"
@ -3009,7 +3022,7 @@ msgstr "組織のリソース ({}) は削除できません"
msgid "App organizations" msgid "App organizations"
msgstr "アプリ組織" msgstr "アプリ組織"
#: orgs/mixins/models.py:46 orgs/mixins/serializers.py:25 orgs/models.py:80 #: orgs/mixins/models.py:54 orgs/mixins/serializers.py:25 orgs/models.py:80
#: orgs/models.py:211 rbac/const.py:7 rbac/models/rolebinding.py:48 #: orgs/models.py:211 rbac/const.py:7 rbac/models/rolebinding.py:48
#: rbac/serializers/rolebinding.py:40 settings/serializers/auth/ldap.py:62 #: rbac/serializers/rolebinding.py:40 settings/serializers/auth/ldap.py:62
#: tickets/models/ticket/general.py:300 tickets/serializers/ticket/ticket.py:64 #: tickets/models/ticket/general.py:300 tickets/serializers/ticket/ticket.py:64
@ -3376,10 +3389,6 @@ msgstr "監査ビュー"
msgid "System setting" msgid "System setting"
msgstr "システム設定" msgstr "システム設定"
#: rbac/tree.py:29
msgid "Other"
msgstr "その他"
#: rbac/tree.py:37 #: rbac/tree.py:37
msgid "Accounts" msgid "Accounts"
msgstr "アカウント" msgstr "アカウント"
@ -4678,7 +4687,7 @@ msgstr ""
msgid "Offline video player" msgid "Offline video player"
msgstr "オフラインビデオプレーヤー" msgstr "オフラインビデオプレーヤー"
#: terminal/api/endpoint.py:26 #: terminal/api/endpoint.py:33
msgid "Not found protocol query params" msgid "Not found protocol query params"
msgstr "プロトコルクエリパラメータが見つかりません" msgstr "プロトコルクエリパラメータが見つかりません"
@ -4851,18 +4860,26 @@ msgstr "PostgreSQL ポート"
msgid "Redis Port" msgid "Redis Port"
msgstr "Redis ポート" msgstr "Redis ポート"
#: terminal/models/endpoint.py:26 terminal/models/endpoint.py:90 #: terminal/models/endpoint.py:21
#: terminal/serializers/endpoint.py:45 terminal/serializers/storage.py:38 msgid "Oracle 11g Port"
msgstr "Oracle 11g ポート"
#: terminal/models/endpoint.py:22
msgid "Oracle 12c Port"
msgstr "Oracle 12c ポート"
#: terminal/models/endpoint.py:28 terminal/models/endpoint.py:96
#: terminal/serializers/endpoint.py:57 terminal/serializers/storage.py:38
#: terminal/serializers/storage.py:50 terminal/serializers/storage.py:80 #: terminal/serializers/storage.py:50 terminal/serializers/storage.py:80
#: terminal/serializers/storage.py:90 terminal/serializers/storage.py:98 #: terminal/serializers/storage.py:90 terminal/serializers/storage.py:98
msgid "Endpoint" msgid "Endpoint"
msgstr "エンドポイント" msgstr "エンドポイント"
#: terminal/models/endpoint.py:83 #: terminal/models/endpoint.py:89
msgid "IP group" msgid "IP group"
msgstr "IP グループ" msgstr "IP グループ"
#: terminal/models/endpoint.py:95 #: terminal/models/endpoint.py:101
msgid "Endpoint rule" msgid "Endpoint rule"
msgstr "エンドポイントルール" msgstr "エンドポイントルール"
@ -5043,7 +5060,11 @@ msgstr "レベル"
msgid "Batch danger command alert" msgid "Batch danger command alert"
msgstr "一括危険コマンド警告" msgstr "一括危険コマンド警告"
#: terminal/serializers/endpoint.py:39 #: terminal/serializers/endpoint.py:12
msgid "Oracle port"
msgstr ""
#: terminal/serializers/endpoint.py:51
msgid "" msgid ""
"If asset IP addresses under different endpoints conflict, use asset labels" "If asset IP addresses under different endpoints conflict, use asset labels"
msgstr "" msgstr ""
@ -6703,12 +6724,11 @@ msgid ""
"all instances and randomly match IP addresses. <br>Format for comma-" "all instances and randomly match IP addresses. <br>Format for comma-"
"delimited string, Such as: 192.168.1.0/24, 10.1.1.1-10.1.1.20" "delimited string, Such as: 192.168.1.0/24, 10.1.1.1-10.1.1.20"
msgstr "" msgstr ""
"IP範囲に一致するインスタンスのみが同期されます。<br>" "IP範囲に一致するインスタンスのみが同期されます。<br>インスタンスに複数のIPア"
"インスタンスに複数のIPアドレスが含まれている場合、一致する最初のIPアドレスが作成されたアセットのIPとして使用されます。 <br>" "ドレスが含まれている場合、一致する最初のIPアドレスが作成されたアセットのIPと"
"デフォルト値の*は、すべてのインスタンスを同期し、IPアドレスをランダムに一致させることを意味します。 <br>" "して使用されます。 <br>デフォルト値の*は、すべてのインスタンスを同期し、IPア"
"形式はコンマ区切りの文字列です。例192.168.1.0/24,10.1.1.1-10.1.1.20" "ドレスをランダムに一致させることを意味します。 <br>形式はコンマ区切りの文字列"
"です。例192.168.1.0/24,10.1.1.1-10.1.1.20"
#: xpack/plugins/cloud/serializers/task.py:36 #: xpack/plugins/cloud/serializers/task.py:36
msgid "History count" msgid "History count"

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:1efe7f07b0877357a42a7f93e075c152e2bd8ee7adc20bcab17427a86cce5ed3 oid sha256:7ee69ce22224f6cae615752c034e495c29d93ed9dbe86767f044d5c0f663b8cc
size 105644 size 105904

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-07-12 17:58+0800\n" "POT-Creation-Date: 2022-07-13 16:25+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"
@ -22,13 +22,13 @@ msgid "Acls"
msgstr "访问控制" msgstr "访问控制"
#: acls/models/base.py:25 acls/serializers/login_asset_acl.py:47 #: acls/models/base.py:25 acls/serializers/login_asset_acl.py:47
#: applications/models/application.py:217 assets/models/asset.py:138 #: applications/models/application.py:220 assets/models/asset.py:138
#: assets/models/base.py:175 assets/models/cluster.py:18 #: assets/models/base.py:175 assets/models/cluster.py:18
#: assets/models/cmd_filter.py:27 assets/models/domain.py:23 #: assets/models/cmd_filter.py:27 assets/models/domain.py:23
#: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24 #: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24
#: orgs/models.py:65 perms/models/base.py:83 rbac/models/role.py:29 #: orgs/models.py:65 perms/models/base.py:83 rbac/models/role.py:29
#: settings/models.py:29 settings/serializers/sms.py:6 #: settings/models.py:29 settings/serializers/sms.py:6
#: terminal/models/endpoint.py:10 terminal/models/endpoint.py:82 #: terminal/models/endpoint.py:10 terminal/models/endpoint.py:88
#: terminal/models/storage.py:26 terminal/models/task.py:16 #: terminal/models/storage.py:26 terminal/models/task.py:16
#: terminal/models/terminal.py:100 users/forms/profile.py:33 #: terminal/models/terminal.py:100 users/forms/profile.py:33
#: users/models/group.py:15 users/models/user.py:661 #: users/models/group.py:15 users/models/user.py:661
@ -37,12 +37,12 @@ msgid "Name"
msgstr "名称" msgstr "名称"
#: acls/models/base.py:27 assets/models/cmd_filter.py:84 #: acls/models/base.py:27 assets/models/cmd_filter.py:84
#: assets/models/user.py:251 terminal/models/endpoint.py:85 #: assets/models/user.py:251 terminal/models/endpoint.py:91
msgid "Priority" msgid "Priority"
msgstr "优先级" msgstr "优先级"
#: acls/models/base.py:28 assets/models/cmd_filter.py:84 #: acls/models/base.py:28 assets/models/cmd_filter.py:84
#: assets/models/user.py:251 terminal/models/endpoint.py:86 #: assets/models/user.py:251 terminal/models/endpoint.py:92
msgid "1-100, the lower the value will be match first" msgid "1-100, the lower the value will be match first"
msgstr "优先级可选范围为 1-100 (数值越小越优先)" msgstr "优先级可选范围为 1-100 (数值越小越优先)"
@ -52,7 +52,7 @@ msgstr "优先级可选范围为 1-100 (数值越小越优先)"
msgid "Active" msgid "Active"
msgstr "激活中" msgstr "激活中"
#: acls/models/base.py:32 applications/models/application.py:230 #: acls/models/base.py:32 applications/models/application.py:233
#: assets/models/asset.py:143 assets/models/asset.py:231 #: assets/models/asset.py:143 assets/models/asset.py:231
#: assets/models/backup.py:54 assets/models/base.py:180 #: assets/models/backup.py:54 assets/models/base.py:180
#: assets/models/cluster.py:29 assets/models/cmd_filter.py:48 #: assets/models/cluster.py:29 assets/models/cmd_filter.py:48
@ -60,7 +60,7 @@ msgstr "激活中"
#: assets/models/domain.py:65 assets/models/group.py:23 #: assets/models/domain.py:65 assets/models/group.py:23
#: assets/models/label.py:23 ops/models/adhoc.py:38 orgs/models.py:68 #: assets/models/label.py:23 ops/models/adhoc.py:38 orgs/models.py:68
#: perms/models/base.py:93 rbac/models/role.py:37 settings/models.py:34 #: perms/models/base.py:93 rbac/models/role.py:37 settings/models.py:34
#: terminal/models/endpoint.py:21 terminal/models/endpoint.py:92 #: terminal/models/endpoint.py:23 terminal/models/endpoint.py:98
#: terminal/models/storage.py:29 terminal/models/terminal.py:114 #: terminal/models/storage.py:29 terminal/models/terminal.py:114
#: tickets/models/comment.py:32 tickets/models/ticket/general.py:288 #: tickets/models/comment.py:32 tickets/models/ticket/general.py:288
#: users/models/group.py:16 users/models/user.py:698 #: users/models/group.py:16 users/models/user.py:698
@ -156,7 +156,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. "
#: acls/serializers/login_asset_acl.py:51 assets/models/base.py:176 #: acls/serializers/login_asset_acl.py:51 assets/models/base.py:176
#: assets/models/gathered_user.py:15 audits/models.py:121 #: assets/models/gathered_user.py:15 audits/models.py:121
#: authentication/forms.py:25 authentication/forms.py:27 #: authentication/forms.py:25 authentication/forms.py:27
#: authentication/models.py:245 #: authentication/models.py:253
#: authentication/templates/authentication/_msg_different_city.html:9 #: authentication/templates/authentication/_msg_different_city.html:9
#: authentication/templates/authentication/_msg_oauth_bind.html:9 #: authentication/templates/authentication/_msg_oauth_bind.html:9
#: ops/models/adhoc.py:159 users/forms/profile.py:32 users/models/user.py:659 #: ops/models/adhoc.py:159 users/forms/profile.py:32 users/models/user.py:659
@ -183,7 +183,7 @@ msgstr ""
#: authentication/templates/authentication/_msg_oauth_bind.html:12 #: authentication/templates/authentication/_msg_oauth_bind.html:12
#: authentication/templates/authentication/_msg_rest_password_success.html:8 #: authentication/templates/authentication/_msg_rest_password_success.html:8
#: authentication/templates/authentication/_msg_rest_public_key_success.html:8 #: authentication/templates/authentication/_msg_rest_public_key_success.html:8
#: settings/serializers/terminal.py:8 terminal/serializers/endpoint.py:42 #: settings/serializers/terminal.py:8 terminal/serializers/endpoint.py:54
msgid "IP" msgid "IP"
msgstr "IP" msgstr "IP"
@ -236,7 +236,7 @@ msgstr ""
msgid "Time Period" msgid "Time Period"
msgstr "时段" msgstr "时段"
#: applications/apps.py:9 applications/models/application.py:63 #: applications/apps.py:9 applications/models/application.py:64
msgid "Applications" msgid "Applications"
msgstr "应用管理" msgstr "应用管理"
@ -255,7 +255,11 @@ msgstr "远程应用"
msgid "Custom" msgid "Custom"
msgstr "自定义" msgstr "自定义"
#: applications/models/account.py:12 applications/models/application.py:234 #: applications/const.py:91 rbac/tree.py:29
msgid "Other"
msgstr "其它"
#: applications/models/account.py:12 applications/models/application.py:237
#: assets/models/backup.py:32 assets/models/cmd_filter.py:45 #: assets/models/backup.py:32 assets/models/cmd_filter.py:45
#: authentication/models.py:67 authentication/models.py:95 #: authentication/models.py:67 authentication/models.py:95
#: perms/models/application_permission.py:28 #: perms/models/application_permission.py:28
@ -273,8 +277,9 @@ msgstr "应用程序"
msgid "System user" msgid "System user"
msgstr "系统用户" msgstr "系统用户"
#: applications/models/account.py:17 assets/models/authbook.py:21 #: applications/models/account.py:17
#: settings/serializers/auth/cas.py:18 #: applications/serializers/attrs/application_type/oracle.py:13
#: assets/models/authbook.py:21 settings/serializers/auth/cas.py:18
msgid "Version" msgid "Version"
msgstr "版本" msgstr "版本"
@ -290,7 +295,7 @@ msgstr "可以查看应用账号密码"
msgid "Can change application account secret" msgid "Can change application account secret"
msgstr "可以查看应用账号密码" msgstr "可以查看应用账号密码"
#: applications/models/application.py:219 #: applications/models/application.py:222
#: applications/serializers/application.py:99 assets/models/label.py:21 #: applications/serializers/application.py:99 assets/models/label.py:21
#: perms/models/application_permission.py:21 #: perms/models/application_permission.py:21
#: perms/serializers/application/user_permission.py:33 #: perms/serializers/application/user_permission.py:33
@ -299,7 +304,7 @@ msgstr "可以查看应用账号密码"
msgid "Category" msgid "Category"
msgstr "类别" msgstr "类别"
#: applications/models/application.py:222 #: applications/models/application.py:225
#: applications/serializers/application.py:101 assets/models/backup.py:49 #: applications/serializers/application.py:101 assets/models/backup.py:49
#: assets/models/cmd_filter.py:82 assets/models/user.py:250 #: assets/models/cmd_filter.py:82 assets/models/user.py:250
#: authentication/models.py:70 perms/models/application_permission.py:24 #: authentication/models.py:70 perms/models/application_permission.py:24
@ -313,21 +318,21 @@ msgstr "类别"
msgid "Type" msgid "Type"
msgstr "类型" msgstr "类型"
#: applications/models/application.py:226 assets/models/asset.py:217 #: applications/models/application.py:229 assets/models/asset.py:217
#: assets/models/domain.py:29 assets/models/domain.py:64 #: assets/models/domain.py:29 assets/models/domain.py:64
msgid "Domain" msgid "Domain"
msgstr "网域" msgstr "网域"
#: applications/models/application.py:228 xpack/plugins/cloud/models.py:33 #: applications/models/application.py:231 xpack/plugins/cloud/models.py:33
#: xpack/plugins/cloud/serializers/account.py:60 #: xpack/plugins/cloud/serializers/account.py:60
msgid "Attrs" msgid "Attrs"
msgstr "属性" msgstr "属性"
#: applications/models/application.py:238 #: applications/models/application.py:241
msgid "Can match application" msgid "Can match application"
msgstr "匹配应用" msgstr "匹配应用"
#: applications/models/application.py:305 #: applications/models/application.py:320
msgid "Application user" msgid "Application user"
msgstr "应用用户" msgstr "应用用户"
@ -392,7 +397,7 @@ msgstr "主机"
#: applications/serializers/attrs/application_type/mongodb.py:10 #: applications/serializers/attrs/application_type/mongodb.py:10
#: applications/serializers/attrs/application_type/mysql.py:10 #: applications/serializers/attrs/application_type/mysql.py:10
#: applications/serializers/attrs/application_type/mysql_workbench.py:22 #: applications/serializers/attrs/application_type/mysql_workbench.py:22
#: applications/serializers/attrs/application_type/oracle.py:10 #: applications/serializers/attrs/application_type/oracle.py:16
#: applications/serializers/attrs/application_type/pgsql.py:10 #: applications/serializers/attrs/application_type/pgsql.py:10
#: applications/serializers/attrs/application_type/redis.py:10 #: applications/serializers/attrs/application_type/redis.py:10
#: applications/serializers/attrs/application_type/sqlserver.py:10 #: applications/serializers/attrs/application_type/sqlserver.py:10
@ -462,6 +467,10 @@ msgstr "Mysql 工作台 用户名"
msgid "Mysql workbench password" msgid "Mysql workbench password"
msgstr "Mysql 工作台 密码" msgstr "Mysql 工作台 密码"
#: applications/serializers/attrs/application_type/oracle.py:14
msgid "Magnus currently supports only 11g and 12c connections"
msgstr "目前 Magnus 只支持连接 11g、12c 版本"
#: applications/serializers/attrs/application_type/vmware_client.py:26 #: applications/serializers/attrs/application_type/vmware_client.py:26
msgid "Vmware username" msgid "Vmware username"
msgstr "Vmware 用户名" msgstr "Vmware 用户名"
@ -763,7 +772,7 @@ msgstr "失败"
msgid "Connectivity" msgid "Connectivity"
msgstr "可连接性" msgstr "可连接性"
#: assets/models/base.py:40 authentication/models.py:248 #: assets/models/base.py:40 authentication/models.py:256
msgid "Date verified" msgid "Date verified"
msgstr "校验日期" msgstr "校验日期"
@ -1604,7 +1613,7 @@ msgstr "飞书"
msgid "DingTalk" msgid "DingTalk"
msgstr "钉钉" msgstr "钉钉"
#: audits/signal_handlers.py:56 authentication/models.py:252 #: audits/signal_handlers.py:56 authentication/models.py:260
msgid "Temporary token" msgid "Temporary token"
msgstr "临时密码" msgstr "临时密码"
@ -2085,13 +2094,13 @@ msgstr "过期时间"
msgid "SSO token" msgid "SSO token"
msgstr "SSO token" msgstr "SSO token"
#: authentication/models.py:72 authentication/models.py:246 #: authentication/models.py:72 authentication/models.py:254
#: authentication/templates/authentication/_access_key_modal.html:31 #: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:17 #: settings/serializers/auth/radius.py:17
msgid "Secret" msgid "Secret"
msgstr "密钥" msgstr "密钥"
#: authentication/models.py:74 authentication/models.py:249 #: authentication/models.py:74 authentication/models.py:257
#: perms/models/base.py:90 tickets/models/ticket/apply_application.py:26 #: perms/models/base.py:90 tickets/models/ticket/apply_application.py:26
#: tickets/models/ticket/apply_asset.py:24 users/models/user.py:703 #: tickets/models/ticket/apply_asset.py:24 users/models/user.py:703
msgid "Date expired" msgid "Date expired"
@ -2109,47 +2118,47 @@ msgstr "连接令牌"
msgid "Can view connection token secret" msgid "Can view connection token secret"
msgstr "可以查看连接令牌密文" msgstr "可以查看连接令牌密文"
#: authentication/models.py:141 #: authentication/models.py:149
msgid "Connection token expired at: {}" msgid "Connection token expired at: {}"
msgstr "连接令牌过期: {}" msgstr "连接令牌过期: {}"
#: authentication/models.py:146 #: authentication/models.py:154
msgid "User not exists" msgid "User not exists"
msgstr "用户不存在" msgstr "用户不存在"
#: authentication/models.py:150 #: authentication/models.py:158
msgid "User invalid, disabled or expired" msgid "User invalid, disabled or expired"
msgstr "用户无效,已禁用或已过期" msgstr "用户无效,已禁用或已过期"
#: authentication/models.py:155 #: authentication/models.py:163
msgid "System user not exists" msgid "System user not exists"
msgstr "系统用户不存在" msgstr "系统用户不存在"
#: authentication/models.py:161 #: authentication/models.py:169
msgid "Asset not exists" msgid "Asset not exists"
msgstr "资产不存在" msgstr "资产不存在"
#: authentication/models.py:165 #: authentication/models.py:173
msgid "Asset inactive" msgid "Asset inactive"
msgstr "资产未激活" msgstr "资产未激活"
#: authentication/models.py:172 #: authentication/models.py:180
msgid "User has no permission to access asset or permission expired" msgid "User has no permission to access asset or permission expired"
msgstr "用户没有权限访问资产或权限已过期" msgstr "用户没有权限访问资产或权限已过期"
#: authentication/models.py:180 #: authentication/models.py:188
msgid "Application not exists" msgid "Application not exists"
msgstr "应用不存在" msgstr "应用不存在"
#: authentication/models.py:187 #: authentication/models.py:195
msgid "User has no permission to access application or permission expired" msgid "User has no permission to access application or permission expired"
msgstr "用户没有权限访问应用或权限已过期" msgstr "用户没有权限访问应用或权限已过期"
#: authentication/models.py:247 #: authentication/models.py:255
msgid "Verified" msgid "Verified"
msgstr "已校验" msgstr "已校验"
#: authentication/models.py:268 #: authentication/models.py:276
msgid "Super connection token" msgid "Super connection token"
msgstr "超级连接令牌" msgstr "超级连接令牌"
@ -2166,7 +2175,11 @@ msgstr "绑定提醒"
msgid "Validity" msgid "Validity"
msgstr "有效" msgstr "有效"
#: authentication/serializers/connection_token.py:73 #: authentication/serializers/connection_token.py:24
msgid "Expired time"
msgstr "过期时间"
#: authentication/serializers/connection_token.py:74
msgid "Asset or application required" msgid "Asset or application required"
msgstr "资产或应用必填" msgstr "资产或应用必填"
@ -2969,7 +2982,7 @@ msgstr "组织存在资源 ({}) 不能被删除"
msgid "App organizations" msgid "App organizations"
msgstr "组织管理" msgstr "组织管理"
#: orgs/mixins/models.py:46 orgs/mixins/serializers.py:25 orgs/models.py:80 #: orgs/mixins/models.py:54 orgs/mixins/serializers.py:25 orgs/models.py:80
#: orgs/models.py:211 rbac/const.py:7 rbac/models/rolebinding.py:48 #: orgs/models.py:211 rbac/const.py:7 rbac/models/rolebinding.py:48
#: rbac/serializers/rolebinding.py:40 settings/serializers/auth/ldap.py:62 #: rbac/serializers/rolebinding.py:40 settings/serializers/auth/ldap.py:62
#: tickets/models/ticket/general.py:300 tickets/serializers/ticket/ticket.py:64 #: tickets/models/ticket/general.py:300 tickets/serializers/ticket/ticket.py:64
@ -3333,10 +3346,6 @@ msgstr "审计台"
msgid "System setting" msgid "System setting"
msgstr "系统设置" msgstr "系统设置"
#: rbac/tree.py:29
msgid "Other"
msgstr "其它"
#: rbac/tree.py:37 #: rbac/tree.py:37
msgid "Accounts" msgid "Accounts"
msgstr "账号管理" msgstr "账号管理"
@ -4602,7 +4611,7 @@ msgstr "Jmservisor 是在 windows 远程应用发布服务器中用来拉起远
msgid "Offline video player" msgid "Offline video player"
msgstr "离线录像播放器" msgstr "离线录像播放器"
#: terminal/api/endpoint.py:26 #: terminal/api/endpoint.py:33
msgid "Not found protocol query params" msgid "Not found protocol query params"
msgstr "" msgstr ""
@ -4775,18 +4784,26 @@ msgstr "PostgreSQL 端口"
msgid "Redis Port" msgid "Redis Port"
msgstr "Redis 端口" msgstr "Redis 端口"
#: terminal/models/endpoint.py:26 terminal/models/endpoint.py:90 #: terminal/models/endpoint.py:21
#: terminal/serializers/endpoint.py:45 terminal/serializers/storage.py:38 msgid "Oracle 11g Port"
msgstr "Oracle 11g 端口"
#: terminal/models/endpoint.py:22
msgid "Oracle 12c Port"
msgstr "Oracle 12c 端口"
#: terminal/models/endpoint.py:28 terminal/models/endpoint.py:96
#: terminal/serializers/endpoint.py:57 terminal/serializers/storage.py:38
#: terminal/serializers/storage.py:50 terminal/serializers/storage.py:80 #: terminal/serializers/storage.py:50 terminal/serializers/storage.py:80
#: terminal/serializers/storage.py:90 terminal/serializers/storage.py:98 #: terminal/serializers/storage.py:90 terminal/serializers/storage.py:98
msgid "Endpoint" msgid "Endpoint"
msgstr "端点" msgstr "端点"
#: terminal/models/endpoint.py:83 #: terminal/models/endpoint.py:89
msgid "IP group" msgid "IP group"
msgstr "IP 组" msgstr "IP 组"
#: terminal/models/endpoint.py:95 #: terminal/models/endpoint.py:101
msgid "Endpoint rule" msgid "Endpoint rule"
msgstr "端点规则" msgstr "端点规则"
@ -4967,7 +4984,11 @@ msgstr "级别"
msgid "Batch danger command alert" msgid "Batch danger command alert"
msgstr "批量危险命令告警" msgstr "批量危险命令告警"
#: terminal/serializers/endpoint.py:39 #: terminal/serializers/endpoint.py:12
msgid "Oracle port"
msgstr ""
#: terminal/serializers/endpoint.py:51
msgid "" msgid ""
"If asset IP addresses under different endpoints conflict, use asset labels" "If asset IP addresses under different endpoints conflict, use asset labels"
msgstr "如果不同端点下的资产 IP 有冲突,使用资产标签实现" msgstr "如果不同端点下的资产 IP 有冲突,使用资产标签实现"
@ -6608,10 +6629,9 @@ msgid ""
"all instances and randomly match IP addresses. <br>Format for comma-" "all instances and randomly match IP addresses. <br>Format for comma-"
"delimited string, Such as: 192.168.1.0/24, 10.1.1.1-10.1.1.20" "delimited string, Such as: 192.168.1.0/24, 10.1.1.1-10.1.1.20"
msgstr "" msgstr ""
"只有匹配到 IP 段的实例会被同步。<br>" "只有匹配到 IP 段的实例会被同步。<br>如果实例包含多个 IP 地址,那么第一个匹配"
"如果实例包含多个 IP 地址,那么第一个匹配到的 IP 地址将被用作创建的资产的 IP。<br>" "到的 IP 地址将被用作创建的资产的 IP。<br>默认值 * 表示同步所有实例和随机匹配 "
"默认值 * 表示同步所有实例和随机匹配 IP 地址。<br>" "IP 地址。<br>格式为以逗号分隔的字符串,例如:192.168.1.0/24,10.1.1.1-10.1.1.20"
"格式为以逗号分隔的字符串,例如:192.168.1.0/24,10.1.1.1-10.1.1.20"
#: xpack/plugins/cloud/serializers/task.py:36 #: xpack/plugins/cloud/serializers/task.py:36
msgid "History count" msgid "History count"

View File

@ -1,6 +1,7 @@
from rest_framework.decorators import action 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 rest_framework.request import Request
from common.drf.api import JMSBulkModelViewSet from common.drf.api import JMSBulkModelViewSet
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
@ -18,39 +19,42 @@ __all__ = ['EndpointViewSet', 'EndpointRuleViewSet']
class SmartEndpointViewMixin: class SmartEndpointViewMixin:
get_serializer: callable get_serializer: callable
request: Request
# View 处理过程中用的属性
target_instance: None
target_protocol: None
@action(methods=['get'], detail=False, permission_classes=[IsValidUser], url_path='smart') @action(methods=['get'], detail=False, permission_classes=[IsValidUser], url_path='smart')
def smart(self, request, *args, **kwargs): def smart(self, request, *args, **kwargs):
protocol = request.GET.get('protocol') self.target_instance = self.get_target_instance()
if not protocol: self.target_protocol = self.get_target_protocol()
if not self.target_protocol:
error = _('Not found protocol query params') error = _('Not found protocol query params')
return Response(data={'error': error}, status=status.HTTP_404_NOT_FOUND) return Response(data={'error': error}, status=status.HTTP_404_NOT_FOUND)
endpoint = self.match_endpoint(request, protocol) endpoint = self.match_endpoint()
serializer = self.get_serializer(endpoint) serializer = self.get_serializer(endpoint)
return Response(serializer.data) return Response(serializer.data)
def match_endpoint(self, request, protocol): def match_endpoint(self):
instance = self.get_target_instance(request) endpoint = self.match_endpoint_by_label()
endpoint = self.match_endpoint_by_label(instance, protocol)
if not endpoint: if not endpoint:
endpoint = self.match_endpoint_by_target_ip(request, instance, protocol) endpoint = self.match_endpoint_by_target_ip()
return endpoint return endpoint
@staticmethod def match_endpoint_by_label(self):
def match_endpoint_by_label(instance, protocol): return Endpoint.match_by_instance_label(self.target_instance, self.target_protocol)
return Endpoint.match_by_instance_label(instance, protocol)
@staticmethod def match_endpoint_by_target_ip(self):
def match_endpoint_by_target_ip(request, instance, protocol):
# 用来方便测试 # 用来方便测试
target_ip = request.GET.get('target_ip', '') target_ip = self.request.GET.get('target_ip', '')
if not target_ip and callable(getattr(instance, 'get_target_ip', None)): if not target_ip and callable(getattr(self.target_instance, 'get_target_ip', None)):
target_ip = instance.get_target_ip() target_ip = self.target_instance.get_target_ip()
endpoint = EndpointRule.match_endpoint(target_ip, protocol, request) endpoint = EndpointRule.match_endpoint(target_ip, self.target_protocol, self.request)
return endpoint return endpoint
@staticmethod def get_target_instance(self):
def get_target_instance(request): request = self.request
asset_id = request.GET.get('asset_id') asset_id = request.GET.get('asset_id')
app_id = request.GET.get('app_id') app_id = request.GET.get('app_id')
session_id = request.GET.get('session_id') session_id = request.GET.get('session_id')
@ -77,6 +81,14 @@ class SmartEndpointViewMixin:
instance = get_object_or_404(model, pk=pk) instance = get_object_or_404(model, pk=pk)
return instance return instance
def get_target_protocol(self):
protocol = None
if isinstance(self.target_instance, Application) and self.target_instance.is_type(Application.APP_TYPE.oracle):
protocol = self.target_instance.get_target_protocol_for_oracle()
if not protocol:
protocol = self.request.GET.get('protocol')
return protocol
class EndpointViewSet(SmartEndpointViewMixin, JMSBulkModelViewSet): class EndpointViewSet(SmartEndpointViewMixin, JMSBulkModelViewSet):
filterset_fields = ('name', 'host') filterset_fields = ('name', 'host')

View File

@ -0,0 +1,25 @@
# Generated by Django 3.2.12 on 2022-07-13 06:17
import common.db.fields
import django.core.validators
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('terminal', '0051_sessionsharing_users'),
]
operations = [
migrations.AddField(
model_name='endpoint',
name='oracle_11g_port',
field=common.db.fields.PortField(default=15211, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(65535)], verbose_name='Oracle 11g Port'),
),
migrations.AddField(
model_name='endpoint',
name='oracle_12c_port',
field=common.db.fields.PortField(default=15212, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(65535)], verbose_name='Oracle 12c Port'),
),
]

View File

@ -18,6 +18,8 @@ class Endpoint(JMSModel):
mariadb_port = PortField(default=33061, verbose_name=_('MariaDB Port')) mariadb_port = PortField(default=33061, verbose_name=_('MariaDB Port'))
postgresql_port = PortField(default=54320, verbose_name=_('PostgreSQL Port')) postgresql_port = PortField(default=54320, verbose_name=_('PostgreSQL Port'))
redis_port = PortField(default=63790, verbose_name=_('Redis Port')) redis_port = PortField(default=63790, verbose_name=_('Redis Port'))
oracle_11g_port = PortField(default=15211, verbose_name=_('Oracle 11g Port'))
oracle_12c_port = PortField(default=15212, verbose_name=_('Oracle 12c Port'))
comment = models.TextField(default='', blank=True, verbose_name=_('Comment')) comment = models.TextField(default='', blank=True, verbose_name=_('Comment'))
default_id = '00000000-0000-0000-0000-000000000001' default_id = '00000000-0000-0000-0000-000000000001'
@ -32,6 +34,10 @@ 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 get_oracle_port(self, version):
protocol = f'oracle_{version}'
return self.get_port(protocol)
def is_default(self): def is_default(self):
return str(self.id) == self.default_id return str(self.id) == self.default_id

View File

@ -8,6 +8,8 @@ __all__ = ['EndpointSerializer', 'EndpointRuleSerializer']
class EndpointSerializer(BulkModelSerializer): class EndpointSerializer(BulkModelSerializer):
# 解决 luna 处理繁琐的问题oracle_port 返回匹配到的端口
oracle_port = serializers.SerializerMethodField(label=_('Oracle port'))
class Meta: class Meta:
model = Endpoint model = Endpoint
@ -17,6 +19,8 @@ class EndpointSerializer(BulkModelSerializer):
'https_port', 'http_port', 'ssh_port', 'https_port', 'http_port', 'ssh_port',
'rdp_port', 'mysql_port', 'mariadb_port', 'rdp_port', 'mysql_port', 'mariadb_port',
'postgresql_port', 'redis_port', 'postgresql_port', 'redis_port',
'oracle_11g_port', 'oracle_12c_port',
'oracle_port',
] ]
fields = fields_mini + fields_small + [ fields = fields_mini + fields_small + [
'comment', 'date_created', 'date_updated', 'created_by' 'comment', 'date_created', 'date_updated', 'created_by'
@ -30,8 +34,16 @@ class EndpointSerializer(BulkModelSerializer):
'mariadb_port': {'default': 33061}, 'mariadb_port': {'default': 33061},
'postgresql_port': {'default': 54320}, 'postgresql_port': {'default': 54320},
'redis_port': {'default': 63790}, 'redis_port': {'default': 63790},
'oracle_11g_port': {'default': 15211},
'oracle_12c_port': {'default': 15212},
} }
def get_oracle_port(self, obj: Endpoint):
view = self.context.get('view')
if not view or view.action not in ['smart']:
return 0
return obj.get_port(view.target_protocol)
class EndpointRuleSerializer(BulkModelSerializer): class EndpointRuleSerializer(BulkModelSerializer):
_ip_group_help_text = '{} <br> {}'.format( _ip_group_help_text = '{} <br> {}'.format(