perf: 修改账号生成 (#11591)

* perf: 修改账号生成

* perf: 修改账号模版支持策略

* perf: 修改特殊字符数量

* perf: 修改 model 继承

* perf: 修改顺序

* perf: 修改 requirements

* perf: 修改翻译

* perf: 修改随机生成密码

* perf: 修改密钥生成

* perf: 修复 bug

---------

Co-authored-by: ibuler <ibuler@qq.com>
pull/11603/head
fit2bot 2023-09-19 10:59:33 +08:00 committed by GitHub
parent 0b30f5cf88
commit e6fe7c489e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 432 additions and 326 deletions

View File

@ -4,11 +4,13 @@ from django.utils.translation import gettext_lazy as _
from assets.const import Connectivity from assets.const import Connectivity
from common.db.fields import TreeChoices from common.db.fields import TreeChoices
string_punctuation = '!#$%&()*+,-.:;<=>?@[]^_~'
DEFAULT_PASSWORD_LENGTH = 30 DEFAULT_PASSWORD_LENGTH = 30
DEFAULT_PASSWORD_RULES = { DEFAULT_PASSWORD_RULES = {
'length': DEFAULT_PASSWORD_LENGTH, 'length': DEFAULT_PASSWORD_LENGTH,
'symbol_set': string_punctuation 'uppercase': True,
'lowercase': True,
'digit': True,
'symbol': True,
} }
__all__ = [ __all__ = [
@ -41,8 +43,8 @@ class AutomationTypes(models.TextChoices):
class SecretStrategy(models.TextChoices): class SecretStrategy(models.TextChoices):
custom = 'specific', _('Specific password') custom = 'specific', _('Specific secret')
random = 'random', _('Random') random = 'random', _('Random generate')
class SSHKeyStrategy(models.TextChoices): class SSHKeyStrategy(models.TextChoices):

View File

@ -0,0 +1,18 @@
# Generated by Django 4.1.10 on 2023-09-18 08:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0015_auto_20230825_1120'),
]
operations = [
migrations.AddField(
model_name='accounttemplate',
name='password_rules',
field=models.JSONField(default=dict, verbose_name='Password rules'),
),
]

View File

@ -1,5 +1,5 @@
from .account import * from .account import * # noqa
from .automations import * from .base import * # noqa
from .base import * from .automations import * # noqa
from .template import * from .template import * # noqa
from .virtual import * from .virtual import * # noqa

View File

@ -1,14 +1,13 @@
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from accounts.const import SecretStrategy, SSHKeyStrategy, SecretType from accounts.const import SSHKeyStrategy
from accounts.models import Account from accounts.models import Account, SecretWithRandomMixin
from accounts.tasks import execute_account_automation_task from accounts.tasks import execute_account_automation_task
from assets.models.automations import ( from assets.models.automations import (
BaseAutomation as AssetBaseAutomation, BaseAutomation as AssetBaseAutomation,
AutomationExecution as AssetAutomationExecution AutomationExecution as AssetAutomationExecution
) )
from common.db import fields
__all__ = ['AccountBaseAutomation', 'AutomationExecution', 'ChangeSecretMixin'] __all__ = ['AccountBaseAutomation', 'AutomationExecution', 'ChangeSecretMixin']
@ -49,27 +48,11 @@ class AutomationExecution(AssetAutomationExecution):
return manager.run() return manager.run()
class ChangeSecretRuleMixin(models.Model): class ChangeSecretMixin(SecretWithRandomMixin):
secret_strategy = models.CharField(
choices=SecretStrategy.choices, max_length=16,
default=SecretStrategy.custom, verbose_name=_('Secret strategy')
)
password_rules = models.JSONField(default=dict, verbose_name=_('Password rules'))
ssh_key_change_strategy = models.CharField( ssh_key_change_strategy = models.CharField(
choices=SSHKeyStrategy.choices, max_length=16, choices=SSHKeyStrategy.choices, max_length=16,
default=SSHKeyStrategy.add, verbose_name=_('SSH key change strategy') default=SSHKeyStrategy.add, verbose_name=_('SSH key change strategy')
) )
class Meta:
abstract = True
class ChangeSecretMixin(ChangeSecretRuleMixin):
secret_type = models.CharField(
choices=SecretType.choices, max_length=16,
default=SecretType.PASSWORD, verbose_name=_('Secret type')
)
secret = fields.EncryptTextField(blank=True, null=True, verbose_name=_('Secret'))
get_all_assets: callable # get all assets get_all_assets: callable # get all assets
class Meta: class Meta:

View File

@ -17,9 +17,9 @@ class PushAccountAutomation(ChangeSecretMixin, AccountBaseAutomation):
def create_nonlocal_accounts(self, usernames, asset): def create_nonlocal_accounts(self, usernames, asset):
secret_type = self.secret_type secret_type = self.secret_type
account_usernames = asset.accounts.filter(secret_type=self.secret_type).values_list( account_usernames = asset.accounts \
'username', flat=True .filter(secret_type=self.secret_type) \
) .values_list('username', flat=True)
create_usernames = set(usernames) - set(account_usernames) create_usernames = set(usernames) - set(account_usernames)
create_account_objs = [ create_account_objs = [
Account( Account(

View File

@ -8,8 +8,10 @@ from django.conf import settings
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from accounts.const import SecretType from accounts.const import SecretType, SecretStrategy
from accounts.models.mixins import VaultModelMixin, VaultManagerMixin, VaultQuerySetMixin from accounts.models.mixins import VaultModelMixin, VaultManagerMixin, VaultQuerySetMixin
from accounts.utils import SecretGenerator
from common.db import fields
from common.utils import ( from common.utils import (
ssh_key_string_to_obj, ssh_key_gen, get_logger, ssh_key_string_to_obj, ssh_key_gen, get_logger,
random_string, lazyproperty, parse_ssh_public_key_str, is_openssh_format_key random_string, lazyproperty, parse_ssh_public_key_str, is_openssh_format_key
@ -29,6 +31,35 @@ class BaseAccountManager(VaultManagerMixin, OrgManager):
return self.get_queryset().active() return self.get_queryset().active()
class SecretWithRandomMixin(models.Model):
secret_type = models.CharField(
choices=SecretType.choices, max_length=16,
default=SecretType.PASSWORD, verbose_name=_('Secret type')
)
secret = fields.EncryptTextField(blank=True, null=True, verbose_name=_('Secret'))
secret_strategy = models.CharField(
choices=SecretStrategy.choices, max_length=16,
default=SecretStrategy.custom, verbose_name=_('Secret strategy')
)
password_rules = models.JSONField(default=dict, verbose_name=_('Password rules'))
class Meta:
abstract = True
@lazyproperty
def secret_generator(self):
return SecretGenerator(
self.secret_strategy, self.secret_type,
self.password_rules,
)
def get_secret(self):
if self.secret_strategy == 'random':
return self.secret_generator.get_secret()
else:
return self.secret
class BaseAccount(VaultModelMixin, JMSOrgBaseModel): class BaseAccount(VaultModelMixin, JMSOrgBaseModel):
name = models.CharField(max_length=128, verbose_name=_("Name")) name = models.CharField(max_length=128, verbose_name=_("Name"))
username = models.CharField(max_length=128, blank=True, verbose_name=_('Username'), db_index=True) username = models.CharField(max_length=128, blank=True, verbose_name=_('Username'), db_index=True)

View File

@ -4,22 +4,16 @@ from django.utils import timezone
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from .account import Account from .account import Account
from .base import BaseAccount from .base import BaseAccount, SecretWithRandomMixin
__all__ = ['AccountTemplate', ] __all__ = ['AccountTemplate', ]
from ..const import SecretStrategy
class AccountTemplate(BaseAccount, SecretWithRandomMixin):
class AccountTemplate(BaseAccount):
su_from = models.ForeignKey( su_from = models.ForeignKey(
'self', related_name='su_to', null=True, 'self', related_name='su_to', null=True,
on_delete=models.SET_NULL, verbose_name=_("Su from") on_delete=models.SET_NULL, verbose_name=_("Su from")
) )
secret_strategy = models.CharField(
choices=SecretStrategy.choices, max_length=16,
default=SecretStrategy.custom, verbose_name=_('Secret strategy')
)
auto_push = models.BooleanField(default=False, verbose_name=_('Auto push')) auto_push = models.BooleanField(default=False, verbose_name=_('Auto push'))
platforms = models.ManyToManyField( platforms = models.ManyToManyField(
'assets.Platform', related_name='account_templates', 'assets.Platform', related_name='account_templates',

View File

@ -73,6 +73,22 @@ class AccountCreateUpdateSerializerMixin(serializers.Serializer):
name = name + '_' + uuid.uuid4().hex[:4] name = name + '_' + uuid.uuid4().hex[:4]
initial_data['name'] = name initial_data['name'] = name
@staticmethod
def get_template_attr_for_account(template):
# Set initial data from template
field_names = [
'username', 'secret', 'secret_type', 'privileged', 'is_active'
]
attrs = {}
for name in field_names:
value = getattr(template, name, None)
if value is None:
continue
attrs[name] = value
attrs['secret'] = template.get_secret()
return attrs
def from_template_if_need(self, initial_data): def from_template_if_need(self, initial_data):
if isinstance(initial_data, str): if isinstance(initial_data, str):
return return
@ -89,20 +105,7 @@ class AccountCreateUpdateSerializerMixin(serializers.Serializer):
raise serializers.ValidationError({'template': 'Template not found'}) raise serializers.ValidationError({'template': 'Template not found'})
self._template = template self._template = template
# Set initial data from template attrs = self.get_template_attr_for_account(template)
ignore_fields = ['id', 'date_created', 'date_updated', 'su_from', 'org_id']
field_names = [
field.name for field in template._meta.fields
if field.name not in ignore_fields
]
field_names = [name if name != '_secret' else 'secret' for name in field_names]
attrs = {}
for name in field_names:
value = getattr(template, name, None)
if value is None:
continue
attrs[name] = value
initial_data.update(attrs) initial_data.update(attrs)
initial_data.update({ initial_data.update({
'source': Source.TEMPLATE, 'source': Source.TEMPLATE,

View File

@ -7,10 +7,19 @@ from common.serializers.fields import ObjectRelatedField
from .base import BaseAccountSerializer from .base import BaseAccountSerializer
class PasswordRulesSerializer(serializers.Serializer):
length = serializers.IntegerField(min_value=8, max_value=30, default=16, label=_('Password length'))
lowercase = serializers.BooleanField(default=True, label=_('Lowercase'))
uppercase = serializers.BooleanField(default=True, label=_('Uppercase'))
digit = serializers.BooleanField(default=True, label=_('Digit'))
symbol = serializers.BooleanField(default=True, label=_('Special symbol'))
class AccountTemplateSerializer(BaseAccountSerializer): class AccountTemplateSerializer(BaseAccountSerializer):
is_sync_account = serializers.BooleanField(default=False, write_only=True) is_sync_account = serializers.BooleanField(default=False, write_only=True)
_is_sync_account = False _is_sync_account = False
password_rules = PasswordRulesSerializer(required=False, label=_('Password rules'))
su_from = ObjectRelatedField( su_from = ObjectRelatedField(
required=False, queryset=AccountTemplate.objects, allow_null=True, required=False, queryset=AccountTemplate.objects, allow_null=True,
allow_empty=True, label=_('Su from'), attrs=('id', 'name', 'username') allow_empty=True, label=_('Su from'), attrs=('id', 'name', 'username')
@ -19,17 +28,20 @@ class AccountTemplateSerializer(BaseAccountSerializer):
class Meta(BaseAccountSerializer.Meta): class Meta(BaseAccountSerializer.Meta):
model = AccountTemplate model = AccountTemplate
fields = BaseAccountSerializer.Meta.fields + [ fields = BaseAccountSerializer.Meta.fields + [
'secret_strategy', 'secret_strategy', 'password_rules',
'auto_push', 'push_params', 'platforms', 'auto_push', 'push_params', 'platforms',
'is_sync_account', 'su_from' 'is_sync_account', 'su_from'
] ]
extra_kwargs = { extra_kwargs = {
'secret_strategy': {'help_text': _('Secret generation strategy for account creation')}, 'secret_strategy': {'help_text': _('Secret generation strategy for account creation')},
'auto_push': {'help_text': _('Whether to automatically push the account to the asset')}, 'auto_push': {'help_text': _('Whether to automatically push the account to the asset')},
'platforms': {'help_text': _( 'platforms': {
'Associated platform, you can configure push parameters. ' 'help_text': _(
'If not associated, default parameters will be used' 'Associated platform, you can configure push parameters. '
)}, 'If not associated, default parameters will be used'
),
'required': False
},
} }
def sync_accounts_secret(self, instance, diff): def sync_accounts_secret(self, instance, diff):

View File

@ -4,14 +4,13 @@ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers from rest_framework import serializers
from accounts.const import ( from accounts.const import (
AutomationTypes, DEFAULT_PASSWORD_RULES, AutomationTypes, SecretType, SecretStrategy, SSHKeyStrategy
SecretType, SecretStrategy, SSHKeyStrategy
) )
from accounts.models import ( from accounts.models import (
Account, ChangeSecretAutomation, Account, ChangeSecretAutomation,
ChangeSecretRecord, AutomationExecution ChangeSecretRecord, AutomationExecution
) )
from accounts.serializers import AuthValidateMixin from accounts.serializers import AuthValidateMixin, PasswordRulesSerializer
from assets.models import Asset from assets.models import Asset
from common.serializers.fields import LabeledChoiceField, ObjectRelatedField from common.serializers.fields import LabeledChoiceField, ObjectRelatedField
from common.utils import get_logger from common.utils import get_logger
@ -42,7 +41,7 @@ class ChangeSecretAutomationSerializer(AuthValidateMixin, BaseAutomationSerializ
ssh_key_change_strategy = LabeledChoiceField( ssh_key_change_strategy = LabeledChoiceField(
choices=SSHKeyStrategy.choices, required=False, label=_('SSH Key strategy') choices=SSHKeyStrategy.choices, required=False, label=_('SSH Key strategy')
) )
password_rules = serializers.DictField(default=DEFAULT_PASSWORD_RULES) password_rules = PasswordRulesSerializer(required=False, label=_('Password rules'))
secret_type = LabeledChoiceField(choices=get_secret_types(), required=True, label=_('Secret type')) secret_type = LabeledChoiceField(choices=get_secret_types(), required=True, label=_('Secret type'))
class Meta: class Meta:

View File

@ -1,3 +1,5 @@
import copy
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers from rest_framework import serializers
@ -18,9 +20,19 @@ class SecretGenerator:
return private_key return private_key
def generate_password(self): def generate_password(self):
length = int(self.password_rules.get('length', 0)) password_rules = self.password_rules
length = length if length else DEFAULT_PASSWORD_RULES['length'] if not password_rules or not isinstance(password_rules, dict):
return random_string(length, special_char=True) password_rules = {}
rules = copy.deepcopy(DEFAULT_PASSWORD_RULES)
rules.update(password_rules)
rules = {
'length': rules['length'],
'lower': rules['lowercase'],
'upper': rules['uppercase'],
'digit': rules['digit'],
'special_char': rules['symbol']
}
return random_string(**rules)
def get_secret(self): def get_secret(self):
if self.secret_type == SecretType.SSH_KEY: if self.secret_type == SecretType.SSH_KEY:

View File

@ -1,10 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
import struct
import random import random
import socket import socket
import string import string
import struct
string_punctuation = '!#$%&()*+,-.:;<=>?@[]^_~' string_punctuation = '!#$%&()*+,-.:;<=>?@[]^_~'
@ -18,35 +17,31 @@ def random_ip():
return socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff))) return socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
def random_string(length: int, lower=True, upper=True, digit=True, special_char=False): def random_string(length: int, lower=True, upper=True, digit=True, special_char=False, symbols=string_punctuation):
args_names = ['lower', 'upper', 'digit', 'special_char'] args_names = ['lower', 'upper', 'digit']
args_values = [lower, upper, digit, special_char] args_values = [lower, upper, digit]
args_string = [string.ascii_lowercase, string.ascii_uppercase, string.digits, string_punctuation] args_string = [string.ascii_lowercase, string.ascii_uppercase, string.digits]
args_string_map = dict(zip(args_names, args_string)) args_string_map = dict(zip(args_names, args_string))
kwargs = dict(zip(args_names, args_values)) kwargs = dict(zip(args_names, args_values))
kwargs_keys = list(kwargs.keys()) kwargs_keys = list(kwargs.keys())
kwargs_values = list(kwargs.values()) kwargs_values = list(kwargs.values())
args_true_count = len([i for i in kwargs_values if i]) args_true_count = len([i for i in kwargs_values if i])
assert any(kwargs_values), f'Parameters {kwargs_keys} must have at least one `True`' assert any(kwargs_values), f'Parameters {kwargs_keys} must have at least one `True`'
assert length >= args_true_count, f'Expected length >= {args_true_count}, bug got {length}' assert length >= args_true_count, f'Expected length >= {args_true_count}, bug got {length}'
can_startswith_special_char = args_true_count == 1 and special_char
chars = ''.join([args_string_map[k] for k, v in kwargs.items() if v]) chars = ''.join([args_string_map[k] for k, v in kwargs.items() if v])
password = list(random.choice(chars) for i in range(length))
while True: if special_char:
password = list(random.choice(chars) for i in range(length)) special_num = length // 16 + 1
for k, v in kwargs.items(): special_index = []
if v and not (set(password) & set(args_string_map[k])): for i in range(special_num):
# 没有包含指定的字符, retry index = random.randint(1, length - 1)
break if index not in special_index:
else: special_index.append(index)
if not can_startswith_special_char and password[0] in args_string_map['special_char']: for i in special_index:
# 首位不能为特殊字符, retry password[i] = random.choice(symbols)
continue
else:
# 满足要求终止 while 循环
break
password = ''.join(password) password = ''.join(password)
return password return password

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:2282c0cd38dbf5b6a004f282b871d397fa060385dcb3ec0105d7bbdf2818d780 oid sha256:e272cbf5e09c7c2c5e2ca3215dc57b7835de698d1f02092c893ce81de472d8ad
size 160182 size 160195

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: 2023-09-19 10:25+0800\n" "POT-Creation-Date: 2023-09-19 10:39+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,7 +23,7 @@ msgid "The parameter 'action' must be [{}]"
msgstr "パラメータ 'action' は [{}] でなければなりません。" msgstr "パラメータ 'action' は [{}] でなければなりません。"
#: accounts/const/account.py:6 #: accounts/const/account.py:6
#: accounts/serializers/automations/change_secret.py:33 #: accounts/serializers/automations/change_secret.py:32
#: assets/models/_user.py:24 audits/signal_handlers/login_log.py:35 #: assets/models/_user.py:24 audits/signal_handlers/login_log.py:35
#: authentication/confirm/password.py:9 authentication/forms.py:32 #: authentication/confirm/password.py:9 authentication/forms.py:32
#: authentication/templates/authentication/login.html:286 #: authentication/templates/authentication/login.html:286
@ -36,7 +36,7 @@ msgid "Password"
msgstr "パスワード" msgstr "パスワード"
#: accounts/const/account.py:7 #: accounts/const/account.py:7
#: accounts/serializers/automations/change_secret.py:34 #: accounts/serializers/automations/change_secret.py:33
msgid "SSH key" msgid "SSH key"
msgstr "SSH キー" msgstr "SSH キー"
@ -94,97 +94,97 @@ msgid "Update"
msgstr "更新" msgstr "更新"
#: accounts/const/account.py:33 #: accounts/const/account.py:33
#: accounts/serializers/automations/change_secret.py:156 audits/const.py:55 #: accounts/serializers/automations/change_secret.py:155 audits/const.py:55
#: audits/signal_handlers/activity_log.py:33 common/const/choices.py:19 #: audits/signal_handlers/activity_log.py:33 common/const/choices.py:19
#: ops/const.py:62 terminal/const.py:77 xpack/plugins/cloud/const.py:43 #: ops/const.py:62 terminal/const.py:77 xpack/plugins/cloud/const.py:43
msgid "Failed" msgid "Failed"
msgstr "失敗しました" msgstr "失敗しました"
#: accounts/const/automation.py:22 rbac/tree.py:50 #: accounts/const/automation.py:24 rbac/tree.py:50
msgid "Push account" msgid "Push account"
msgstr "アカウントプッシュ" msgstr "アカウントプッシュ"
#: accounts/const/automation.py:23 #: accounts/const/automation.py:25
msgid "Change secret" msgid "Change secret"
msgstr "パスワードを変更する" msgstr "パスワードを変更する"
#: accounts/const/automation.py:24 #: accounts/const/automation.py:26
msgid "Verify account" msgid "Verify account"
msgstr "アカウントを確認" msgstr "アカウントを確認"
#: accounts/const/automation.py:25 #: accounts/const/automation.py:27
msgid "Gather accounts" msgid "Gather accounts"
msgstr "アカウントのコレクション" msgstr "アカウントのコレクション"
#: accounts/const/automation.py:26 #: accounts/const/automation.py:28
msgid "Verify gateway account" msgid "Verify gateway account"
msgstr "ゲートウェイ アカウントを確認する" msgstr "ゲートウェイ アカウントを確認する"
#: accounts/const/automation.py:44 #: accounts/const/automation.py:46
msgid "Specific password" msgid "Specific secret"
msgstr "特定" msgstr "特定"
#: accounts/const/automation.py:45 #: accounts/const/automation.py:47
msgid "Random" msgid "Random generate"
msgstr "ランダム" msgstr "ランダム生成"
#: accounts/const/automation.py:49 ops/const.py:13 #: accounts/const/automation.py:51 ops/const.py:13
msgid "Append SSH KEY" msgid "Append SSH KEY"
msgstr "追加" msgstr "追加"
#: accounts/const/automation.py:50 ops/const.py:14 #: accounts/const/automation.py:52 ops/const.py:14
msgid "Empty and append SSH KEY" msgid "Empty and append SSH KEY"
msgstr "すべてクリアして追加" msgstr "すべてクリアして追加"
#: accounts/const/automation.py:51 ops/const.py:15 #: accounts/const/automation.py:53 ops/const.py:15
msgid "Replace (Replace only keys pushed by JumpServer) " msgid "Replace (Replace only keys pushed by JumpServer) "
msgstr "置換JumpServer によってプッシュされたキーのみを置換)" msgstr "置換JumpServer によってプッシュされたキーのみを置換)"
#: accounts/const/automation.py:56 #: accounts/const/automation.py:58
msgid "On asset create" msgid "On asset create"
msgstr "アセットが作成されたとき" msgstr "アセットが作成されたとき"
#: accounts/const/automation.py:59 #: accounts/const/automation.py:61
msgid "On perm add user" msgid "On perm add user"
msgstr "承認が変更されたときにユーザーを追加する" msgstr "承認が変更されたときにユーザーを追加する"
#: accounts/const/automation.py:61 #: accounts/const/automation.py:63
msgid "On perm add user group" msgid "On perm add user group"
msgstr "権限変更時にユーザーグループを追加" msgstr "権限変更時にユーザーグループを追加"
#: accounts/const/automation.py:63 #: accounts/const/automation.py:65
msgid "On perm add asset" msgid "On perm add asset"
msgstr "変更の承認時にアセットを追加する" msgstr "変更の承認時にアセットを追加する"
#: accounts/const/automation.py:65 #: accounts/const/automation.py:67
msgid "On perm add node" msgid "On perm add node"
msgstr "承認変更時のノードの追加" msgstr "承認変更時のノードの追加"
#: accounts/const/automation.py:67 #: accounts/const/automation.py:69
msgid "On perm add account" msgid "On perm add account"
msgstr "承認が変更されたときにアカウントを追加する" msgstr "承認が変更されたときにアカウントを追加する"
#: accounts/const/automation.py:69 #: accounts/const/automation.py:71
msgid "On asset join node" msgid "On asset join node"
msgstr "アセットの変更時にノードに追加" msgstr "アセットの変更時にノードに追加"
#: accounts/const/automation.py:71 #: accounts/const/automation.py:73
msgid "On user join group" msgid "On user join group"
msgstr "ユーザー変更時にユーザーグループに追加" msgstr "ユーザー変更時にユーザーグループに追加"
#: accounts/const/automation.py:79 #: accounts/const/automation.py:81
msgid "On perm change" msgid "On perm change"
msgstr "権限が変更されたとき" msgstr "権限が変更されたとき"
#: accounts/const/automation.py:86 #: accounts/const/automation.py:88
msgid "Inherit from group or node" msgid "Inherit from group or node"
msgstr "ユーザーグループまたはアセットノードから継承" msgstr "ユーザーグループまたはアセットノードから継承"
#: accounts/const/automation.py:94 #: accounts/const/automation.py:96
msgid "Create and push" msgid "Create and push"
msgstr "作成してプッシュ" msgstr "作成してプッシュ"
#: accounts/const/automation.py:95 #: accounts/const/automation.py:97
msgid "Only create" msgid "Only create"
msgstr "作成のみ" msgstr "作成のみ"
@ -217,11 +217,11 @@ msgstr "ユーザー %s がパスワードを閲覧/導き出しました"
#: accounts/models/account.py:48 #: accounts/models/account.py:48
#: accounts/models/automations/gather_account.py:16 #: accounts/models/automations/gather_account.py:16
#: accounts/serializers/account/account.py:202 #: accounts/serializers/account/account.py:205
#: accounts/serializers/account/account.py:247 #: accounts/serializers/account/account.py:250
#: accounts/serializers/account/gathered_account.py:10 #: accounts/serializers/account/gathered_account.py:10
#: accounts/serializers/automations/change_secret.py:112 #: accounts/serializers/automations/change_secret.py:111
#: accounts/serializers/automations/change_secret.py:132 #: accounts/serializers/automations/change_secret.py:131
#: acls/serializers/base.py:123 assets/models/asset/common.py:93 #: acls/serializers/base.py:123 assets/models/asset/common.py:93
#: assets/models/asset/common.py:334 assets/models/cmd_filter.py:36 #: assets/models/asset/common.py:334 assets/models/cmd_filter.py:36
#: assets/serializers/domain.py:19 assets/serializers/label.py:27 #: assets/serializers/domain.py:19 assets/serializers/label.py:27
@ -236,10 +236,10 @@ msgstr "ユーザー %s がパスワードを閲覧/導き出しました"
msgid "Asset" msgid "Asset"
msgstr "資産" msgstr "資産"
#: accounts/models/account.py:52 accounts/models/template.py:17 #: accounts/models/account.py:52 accounts/models/template.py:15
#: accounts/serializers/account/account.py:209 #: accounts/serializers/account/account.py:212
#: accounts/serializers/account/account.py:257 #: accounts/serializers/account/account.py:260
#: accounts/serializers/account/template.py:16 #: accounts/serializers/account/template.py:25
#: authentication/serializers/connect_token_secret.py:49 #: authentication/serializers/connect_token_secret.py:49
msgid "Su from" msgid "Su from"
msgstr "から切り替え" msgstr "から切り替え"
@ -250,7 +250,7 @@ msgstr "から切り替え"
msgid "Version" msgid "Version"
msgstr "バージョン" msgstr "バージョン"
#: accounts/models/account.py:56 accounts/serializers/account/account.py:204 #: accounts/models/account.py:56 accounts/serializers/account/account.py:207
#: users/models/user.py:846 #: users/models/user.py:846
msgid "Source" msgid "Source"
msgstr "ソース" msgstr "ソース"
@ -260,8 +260,8 @@ msgid "Source ID"
msgstr "ソース ID" msgstr "ソース ID"
#: accounts/models/account.py:60 #: accounts/models/account.py:60
#: accounts/serializers/automations/change_secret.py:113 #: accounts/serializers/automations/change_secret.py:112
#: accounts/serializers/automations/change_secret.py:133 #: accounts/serializers/automations/change_secret.py:132
#: acls/serializers/base.py:124 assets/serializers/asset/common.py:125 #: acls/serializers/base.py:124 assets/serializers/asset/common.py:125
#: assets/serializers/gateway.py:28 audits/models.py:55 ops/models/base.py:18 #: assets/serializers/gateway.py:28 audits/models.py:55 ops/models/base.py:18
#: perms/models/asset_permission.py:70 perms/serializers/permission.py:39 #: perms/models/asset_permission.py:70 perms/serializers/permission.py:39
@ -340,8 +340,8 @@ msgid "Reason"
msgstr "理由" msgstr "理由"
#: accounts/models/automations/backup_account.py:107 #: accounts/models/automations/backup_account.py:107
#: accounts/serializers/automations/change_secret.py:111 #: accounts/serializers/automations/change_secret.py:110
#: accounts/serializers/automations/change_secret.py:134 #: accounts/serializers/automations/change_secret.py:133
#: ops/serializers/job.py:56 terminal/serializers/session.py:46 #: ops/serializers/job.py:56 terminal/serializers/session.py:46
msgid "Is success" msgid "Is success"
msgstr "成功は" msgstr "成功は"
@ -350,75 +350,49 @@ msgstr "成功は"
msgid "Account backup execution" msgid "Account backup execution"
msgstr "アカウントバックアップの実行" msgstr "アカウントバックアップの実行"
#: accounts/models/automations/base.py:19 #: accounts/models/automations/base.py:18
msgid "Account automation task" msgid "Account automation task"
msgstr "アカウント自動化タスク" msgstr "アカウント自動化タスク"
#: accounts/models/automations/base.py:33 #: accounts/models/automations/base.py:32
msgid "Automation execution" msgid "Automation execution"
msgstr "自動実行" msgstr "自動実行"
#: accounts/models/automations/base.py:34 #: accounts/models/automations/base.py:33
msgid "Automation executions" msgid "Automation executions"
msgstr "自動実行" msgstr "自動実行"
#: accounts/models/automations/base.py:36 #: accounts/models/automations/base.py:35
msgid "Can view change secret execution" msgid "Can view change secret execution"
msgstr "改密実行の表示" msgstr "改密実行の表示"
#: accounts/models/automations/base.py:37 #: accounts/models/automations/base.py:36
msgid "Can add change secret execution" msgid "Can add change secret execution"
msgstr "改密実行の作成" msgstr "改密実行の作成"
#: accounts/models/automations/base.py:39 #: accounts/models/automations/base.py:38
msgid "Can view gather accounts execution" msgid "Can view gather accounts execution"
msgstr "コレクションアカウントの実行を表示" msgstr "コレクションアカウントの実行を表示"
#: accounts/models/automations/base.py:40 #: accounts/models/automations/base.py:39
msgid "Can add gather accounts execution" msgid "Can add gather accounts execution"
msgstr "回収口座作成の実行" msgstr "回収口座作成の実行"
#: accounts/models/automations/base.py:42 #: accounts/models/automations/base.py:41
msgid "Can view push account execution" msgid "Can view push account execution"
msgstr "プッシュ アカウントの実行を表示する" msgstr "プッシュ アカウントの実行を表示する"
#: accounts/models/automations/base.py:43 #: accounts/models/automations/base.py:42
msgid "Can add push account execution" msgid "Can add push account execution"
msgstr "プッシュ アカウントの作成の実行" msgstr "プッシュ アカウントの作成の実行"
#: accounts/models/automations/base.py:55 accounts/models/template.py:21 #: accounts/models/automations/base.py:54
#: accounts/serializers/automations/change_secret.py:40
msgid "Secret strategy"
msgstr "鍵ポリシー"
#: accounts/models/automations/base.py:57
msgid "Password rules"
msgstr "パスワードルール"
#: accounts/models/automations/base.py:60
msgid "SSH key change strategy" msgid "SSH key change strategy"
msgstr "SSHキープッシュ方式" msgstr "SSHキープッシュ方式"
#: accounts/models/automations/base.py:70 accounts/models/base.py:36
#: accounts/serializers/account/account.py:429
#: accounts/serializers/account/base.py:16
#: accounts/serializers/automations/change_secret.py:46
#: authentication/serializers/connect_token_secret.py:41
#: authentication/serializers/connect_token_secret.py:50
msgid "Secret type"
msgstr "鍵の種類"
#: accounts/models/automations/base.py:72 accounts/models/mixins/vault.py:48
#: accounts/serializers/account/base.py:19
#: authentication/models/temp_token.py:10
#: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:19
msgid "Secret"
msgstr "ひみつ"
#: accounts/models/automations/change_secret.py:15 #: accounts/models/automations/change_secret.py:15
#: accounts/serializers/account/backup.py:34 #: accounts/serializers/account/backup.py:34
#: accounts/serializers/automations/change_secret.py:57 #: accounts/serializers/automations/change_secret.py:56
msgid "Recipient" msgid "Recipient"
msgstr "受信者" msgstr "受信者"
@ -446,7 +420,7 @@ msgid "Date finished"
msgstr "終了日" msgstr "終了日"
#: accounts/models/automations/change_secret.py:44 #: accounts/models/automations/change_secret.py:44
#: accounts/serializers/account/account.py:249 assets/const/automation.py:8 #: accounts/serializers/account/account.py:252 assets/const/automation.py:8
#: authentication/templates/authentication/passkey.html:173 #: authentication/templates/authentication/passkey.html:173
#: authentication/views/base.py:26 authentication/views/base.py:27 #: authentication/views/base.py:26 authentication/views/base.py:27
#: authentication/views/base.py:28 common/const/choices.py:20 #: authentication/views/base.py:28 common/const/choices.py:20
@ -466,7 +440,7 @@ msgid "Date last login"
msgstr "最終ログイン日" msgstr "最終ログイン日"
#: accounts/models/automations/gather_account.py:17 #: accounts/models/automations/gather_account.py:17
#: accounts/models/automations/push_account.py:15 accounts/models/base.py:34 #: accounts/models/automations/push_account.py:15 accounts/models/base.py:65
#: accounts/serializers/account/virtual.py:21 acls/serializers/base.py:19 #: accounts/serializers/account/virtual.py:21 acls/serializers/base.py:19
#: acls/serializers/base.py:50 assets/models/_user.py:23 audits/models.py:180 #: acls/serializers/base.py:50 assets/models/_user.py:23 audits/models.py:180
#: authentication/forms.py:25 authentication/forms.py:27 #: authentication/forms.py:25 authentication/forms.py:27
@ -516,7 +490,34 @@ msgstr "アカウントプッシュ"
msgid "Verify asset account" msgid "Verify asset account"
msgstr "アカウントの確認" msgstr "アカウントの確認"
#: accounts/models/base.py:33 accounts/serializers/account/virtual.py:20 #: accounts/models/base.py:37 accounts/models/base.py:67
#: accounts/serializers/account/account.py:432
#: accounts/serializers/account/base.py:16
#: accounts/serializers/automations/change_secret.py:45
#: authentication/serializers/connect_token_secret.py:41
#: authentication/serializers/connect_token_secret.py:50
msgid "Secret type"
msgstr "鍵の種類"
#: accounts/models/base.py:39 accounts/models/mixins/vault.py:48
#: accounts/serializers/account/base.py:19
#: authentication/models/temp_token.py:10
#: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:19
msgid "Secret"
msgstr "ひみつ"
#: accounts/models/base.py:42
#: accounts/serializers/automations/change_secret.py:39
msgid "Secret strategy"
msgstr "鍵ポリシー"
#: accounts/models/base.py:44 accounts/serializers/account/template.py:22
#: accounts/serializers/automations/change_secret.py:44
msgid "Password rules"
msgstr "パスワードルール"
#: accounts/models/base.py:64 accounts/serializers/account/virtual.py:20
#: acls/models/base.py:35 acls/models/base.py:96 acls/models/command_acl.py:21 #: acls/models/base.py:35 acls/models/base.py:96 acls/models/command_acl.py:21
#: acls/serializers/base.py:35 applications/models.py:9 #: acls/serializers/base.py:35 applications/models.py:9
#: assets/models/_user.py:22 assets/models/asset/common.py:91 #: assets/models/_user.py:22 assets/models/asset/common.py:91
@ -541,11 +542,11 @@ msgstr "アカウントの確認"
msgid "Name" msgid "Name"
msgstr "名前" msgstr "名前"
#: accounts/models/base.py:38 #: accounts/models/base.py:69
msgid "Privileged" msgid "Privileged"
msgstr "特権アカウント" msgstr "特権アカウント"
#: accounts/models/base.py:39 assets/models/asset/common.py:156 #: accounts/models/base.py:70 assets/models/asset/common.py:156
#: assets/models/automations/base.py:21 assets/models/cmd_filter.py:39 #: assets/models/automations/base.py:21 assets/models/cmd_filter.py:39
#: assets/models/label.py:22 #: assets/models/label.py:22
#: authentication/serializers/connect_token_secret.py:114 #: authentication/serializers/connect_token_secret.py:114
@ -554,27 +555,27 @@ msgstr "特権アカウント"
msgid "Is active" msgid "Is active"
msgstr "アクティブです。" msgstr "アクティブです。"
#: accounts/models/template.py:23 assets/models/_user.py:53 #: accounts/models/template.py:17 assets/models/_user.py:53
msgid "Auto push" msgid "Auto push"
msgstr "オートプッシュ" msgstr "オートプッシュ"
#: accounts/models/template.py:26 #: accounts/models/template.py:20
msgid "Platforms" msgid "Platforms"
msgstr "プラットフォーム" msgstr "プラットフォーム"
#: accounts/models/template.py:28 #: accounts/models/template.py:22
msgid "Push params" msgid "Push params"
msgstr "パラメータをプッシュする" msgstr "パラメータをプッシュする"
#: accounts/models/template.py:31 xpack/plugins/cloud/models.py:325 #: accounts/models/template.py:25 xpack/plugins/cloud/models.py:325
msgid "Account template" msgid "Account template"
msgstr "アカウント テンプレート" msgstr "アカウント テンプレート"
#: accounts/models/template.py:36 #: accounts/models/template.py:30
msgid "Can view asset account template secret" msgid "Can view asset account template secret"
msgstr "アセット アカウント テンプレートのパスワードを表示できます" msgstr "アセット アカウント テンプレートのパスワードを表示できます"
#: accounts/models/template.py:37 #: accounts/models/template.py:31
msgid "Can change asset account template secret" msgid "Can change asset account template secret"
msgstr "アセット アカウント テンプレートのパスワードを変更できます" msgstr "アセット アカウント テンプレートのパスワードを変更できます"
@ -656,7 +657,7 @@ msgstr "今すぐプッシュ"
msgid "Exist policy" msgid "Exist policy"
msgstr "アカウントの存在ポリシー" msgstr "アカウントの存在ポリシー"
#: accounts/serializers/account/account.py:182 applications/models.py:11 #: accounts/serializers/account/account.py:185 applications/models.py:11
#: assets/models/label.py:21 assets/models/platform.py:89 #: assets/models/label.py:21 assets/models/platform.py:89
#: assets/serializers/asset/common.py:121 assets/serializers/cagegory.py:8 #: assets/serializers/asset/common.py:121 assets/serializers/cagegory.py:8
#: assets/serializers/platform.py:133 assets/serializers/platform.py:229 #: assets/serializers/platform.py:133 assets/serializers/platform.py:229
@ -665,7 +666,7 @@ msgstr "アカウントの存在ポリシー"
msgid "Category" msgid "Category"
msgstr "カテゴリ" msgstr "カテゴリ"
#: accounts/serializers/account/account.py:183 #: accounts/serializers/account/account.py:186
#: accounts/serializers/automations/base.py:54 acls/models/command_acl.py:24 #: accounts/serializers/automations/base.py:54 acls/models/command_acl.py:24
#: acls/serializers/command_acl.py:18 applications/models.py:14 #: acls/serializers/command_acl.py:18 applications/models.py:14
#: assets/models/_user.py:50 assets/models/automations/base.py:20 #: assets/models/_user.py:50 assets/models/automations/base.py:20
@ -685,26 +686,26 @@ msgstr "カテゴリ"
msgid "Type" msgid "Type"
msgstr "タイプ" msgstr "タイプ"
#: accounts/serializers/account/account.py:198 #: accounts/serializers/account/account.py:201
msgid "Asset not found" msgid "Asset not found"
msgstr "資産が存在しません" msgstr "資産が存在しません"
#: accounts/serializers/account/account.py:238 #: accounts/serializers/account/account.py:241
msgid "Has secret" msgid "Has secret"
msgstr "エスクローされたパスワード" msgstr "エスクローされたパスワード"
#: accounts/serializers/account/account.py:248 ops/models/celery.py:60 #: accounts/serializers/account/account.py:251 ops/models/celery.py:60
#: tickets/models/comment.py:13 tickets/models/ticket/general.py:45 #: tickets/models/comment.py:13 tickets/models/ticket/general.py:45
#: tickets/models/ticket/general.py:279 tickets/serializers/super_ticket.py:14 #: tickets/models/ticket/general.py:279 tickets/serializers/super_ticket.py:14
#: tickets/serializers/ticket/ticket.py:21 #: tickets/serializers/ticket/ticket.py:21
msgid "State" msgid "State"
msgstr "状態" msgstr "状態"
#: accounts/serializers/account/account.py:250 #: accounts/serializers/account/account.py:253
msgid "Changed" msgid "Changed"
msgstr "編集済み" msgstr "編集済み"
#: accounts/serializers/account/account.py:260 #: accounts/serializers/account/account.py:263
#: accounts/serializers/automations/base.py:22 acls/models/base.py:97 #: accounts/serializers/automations/base.py:22 acls/models/base.py:97
#: assets/models/automations/base.py:19 #: assets/models/automations/base.py:19
#: assets/serializers/automations/base.py:20 ops/models/base.py:17 #: assets/serializers/automations/base.py:20 ops/models/base.py:17
@ -713,27 +714,27 @@ msgstr "編集済み"
msgid "Assets" msgid "Assets"
msgstr "資産" msgstr "資産"
#: accounts/serializers/account/account.py:315 #: accounts/serializers/account/account.py:318
msgid "Account already exists" msgid "Account already exists"
msgstr "アカウントはすでに存在しています" msgstr "アカウントはすでに存在しています"
#: accounts/serializers/account/account.py:365 #: accounts/serializers/account/account.py:368
#, python-format #, python-format
msgid "Asset does not support this secret type: %s" msgid "Asset does not support this secret type: %s"
msgstr "アセットはアカウント タイプをサポートしていません: %s" msgstr "アセットはアカウント タイプをサポートしていません: %s"
#: accounts/serializers/account/account.py:397 #: accounts/serializers/account/account.py:400
msgid "Account has exist" msgid "Account has exist"
msgstr "アカウントはすでに存在しています" msgstr "アカウントはすでに存在しています"
#: accounts/serializers/account/account.py:430 #: accounts/serializers/account/account.py:433
#: authentication/serializers/connect_token_secret.py:156 #: authentication/serializers/connect_token_secret.py:156
#: authentication/templates/authentication/_access_key_modal.html:30 #: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:31 #: perms/models/perm_node.py:21 users/serializers/group.py:31
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
#: accounts/serializers/account/account.py:437 acls/serializers/base.py:116 #: accounts/serializers/account/account.py:440 acls/serializers/base.py:116
#: assets/models/cmd_filter.py:24 assets/models/label.py:16 audits/models.py:50 #: assets/models/cmd_filter.py:24 assets/models/label.py:16 audits/models.py:50
#: audits/models.py:86 audits/models.py:164 audits/models.py:262 #: audits/models.py:86 audits/models.py:164 audits/models.py:262
#: audits/serializers.py:171 authentication/models/connection_token.py:32 #: audits/serializers.py:171 authentication/models/connection_token.py:32
@ -752,7 +753,7 @@ msgstr "ID"
msgid "User" msgid "User"
msgstr "ユーザー" msgstr "ユーザー"
#: accounts/serializers/account/account.py:438 #: accounts/serializers/account/account.py:441
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:158 terminal/notifications.py:207 #: terminal/notifications.py:158 terminal/notifications.py:207
msgid "Date" msgid "Date"
@ -771,7 +772,7 @@ msgid "Executed amount"
msgstr "実行回数" msgstr "実行回数"
#: accounts/serializers/account/backup.py:35 #: accounts/serializers/account/backup.py:35
#: accounts/serializers/automations/change_secret.py:58 #: accounts/serializers/automations/change_secret.py:57
msgid "Currently only mail sending is supported" msgid "Currently only mail sending is supported"
msgstr "現在、メール送信のみがサポートされています" msgstr "現在、メール送信のみがサポートされています"
@ -796,15 +797,39 @@ msgstr ""
"ヒント: 認証にユーザー名が必要ない場合は、`null`を入力します。ADアカウントの" "ヒント: 認証にユーザー名が必要ない場合は、`null`を入力します。ADアカウントの"
"場合は、`username@domain`のようになります。" "場合は、`username@domain`のようになります。"
#: accounts/serializers/account/template.py:27 #: accounts/serializers/account/template.py:11
#, fuzzy
#| msgid "Password strength"
msgid "Password length"
msgstr "パスワードの強さ"
#: accounts/serializers/account/template.py:12
#, fuzzy
#| msgid "Powershell"
msgid "Lowercase"
msgstr "PowerShell"
#: accounts/serializers/account/template.py:13
msgid "Uppercase"
msgstr ""
#: accounts/serializers/account/template.py:14
msgid "Digit"
msgstr ""
#: accounts/serializers/account/template.py:15
msgid "Special symbol"
msgstr ""
#: accounts/serializers/account/template.py:36
msgid "Secret generation strategy for account creation" msgid "Secret generation strategy for account creation"
msgstr "账号创建时,密文生成策略" msgstr "账号创建时,密文生成策略"
#: accounts/serializers/account/template.py:28 #: accounts/serializers/account/template.py:37
msgid "Whether to automatically push the account to the asset" msgid "Whether to automatically push the account to the asset"
msgstr "是否自动推送账号到资产" msgstr "是否自动推送账号到资产"
#: accounts/serializers/account/template.py:30 #: accounts/serializers/account/template.py:40
msgid "" msgid ""
"Associated platform, you can configure push parameters. If not associated, " "Associated platform, you can configure push parameters. If not associated, "
"default parameters will be used" "default parameters will be used"
@ -852,24 +877,24 @@ msgstr "名前は既に存在します。"
msgid "Automation snapshot" msgid "Automation snapshot"
msgstr "自動スナップショット" msgstr "自動スナップショット"
#: accounts/serializers/automations/change_secret.py:43 #: accounts/serializers/automations/change_secret.py:42
msgid "SSH Key strategy" msgid "SSH Key strategy"
msgstr "SSHキー戦略" msgstr "SSHキー戦略"
#: accounts/serializers/automations/change_secret.py:81 #: accounts/serializers/automations/change_secret.py:80
msgid "* Please enter the correct password length" msgid "* Please enter the correct password length"
msgstr "* 正しいパスワードの長さを入力してください" msgstr "* 正しいパスワードの長さを入力してください"
#: accounts/serializers/automations/change_secret.py:85 #: accounts/serializers/automations/change_secret.py:84
msgid "* Password length range 6-30 bits" msgid "* Password length range 6-30 bits"
msgstr "* パスワードの長さの範囲6-30ビット" msgstr "* パスワードの長さの範囲6-30ビット"
#: accounts/serializers/automations/change_secret.py:115 #: accounts/serializers/automations/change_secret.py:114
#: assets/models/automations/base.py:127 #: assets/models/automations/base.py:127
msgid "Automation task execution" msgid "Automation task execution"
msgstr "自動タスク実行履歴" msgstr "自動タスク実行履歴"
#: accounts/serializers/automations/change_secret.py:155 audits/const.py:54 #: accounts/serializers/automations/change_secret.py:154 audits/const.py:54
#: audits/models.py:60 audits/signal_handlers/activity_log.py:33 #: audits/models.py:60 audits/signal_handlers/activity_log.py:33
#: common/const/choices.py:18 ops/const.py:60 ops/serializers/celery.py:40 #: common/const/choices.py:18 ops/const.py:60 ops/serializers/celery.py:40
#: terminal/const.py:76 terminal/models/session/sharing.py:121 #: terminal/const.py:76 terminal/models/session/sharing.py:121
@ -910,23 +935,23 @@ msgstr "アセット アカウントの可用性を確認する"
msgid "Verify accounts connectivity" msgid "Verify accounts connectivity"
msgstr "アカウント接続のテスト" msgstr "アカウント接続のテスト"
#: accounts/utils.py:41 #: accounts/utils.py:46
msgid "Password can not contains `{{` " msgid "Password can not contains `{{` "
msgstr "パスワードには '{{' を含まない" msgstr "パスワードには '{{' を含まない"
#: accounts/utils.py:43 #: accounts/utils.py:48
msgid "Password can not contains `{%` " msgid "Password can not contains `{%` "
msgstr "パスワードには '{%' を含まない" msgstr "パスワードには '{%' を含まない"
#: accounts/utils.py:46 #: accounts/utils.py:51
msgid "Password can not contains `'` " msgid "Password can not contains `'` "
msgstr "パスワードには `'` を含まない" msgstr "パスワードには `'` を含まない"
#: accounts/utils.py:48 #: accounts/utils.py:53
msgid "Password can not contains `\"` " msgid "Password can not contains `\"` "
msgstr "パスワードには `\"` を含まない" msgstr "パスワードには `\"` を含まない"
#: accounts/utils.py:54 #: accounts/utils.py:59
msgid "private key invalid or passphrase error" msgid "private key invalid or passphrase error"
msgstr "秘密鍵が無効またはpassphraseエラー" msgstr "秘密鍵が無効またはpassphraseエラー"
@ -8434,5 +8459,8 @@ msgstr "エンタープライズプロフェッショナル版"
msgid "Ultimate edition" msgid "Ultimate edition"
msgstr "エンタープライズ・フラッグシップ・エディション" msgstr "エンタープライズ・フラッグシップ・エディション"
#~ msgid "Random"
#~ msgstr "ランダム"
#~ msgid "Enterprise edition" #~ msgid "Enterprise edition"
#~ msgstr "エンタープライズ基本版" #~ 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:f07bd3ce99241c56762a54ed058913995775ba4fa019b7713dd74f5a3ef75d22 oid sha256:2492fc51a9dfef6fbeccd0ee4a8612d1c4e8bf3897fe518a6500c6bda4828f1a
size 130862 size 130875

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: 2023-09-19 10:33+0800\n" "POT-Creation-Date: 2023-09-19 10:39+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,7 +22,7 @@ msgid "The parameter 'action' must be [{}]"
msgstr "参数 'action' 必须是 [{}]" msgstr "参数 'action' 必须是 [{}]"
#: accounts/const/account.py:6 #: accounts/const/account.py:6
#: accounts/serializers/automations/change_secret.py:33 #: accounts/serializers/automations/change_secret.py:32
#: assets/models/_user.py:24 audits/signal_handlers/login_log.py:35 #: assets/models/_user.py:24 audits/signal_handlers/login_log.py:35
#: authentication/confirm/password.py:9 authentication/forms.py:32 #: authentication/confirm/password.py:9 authentication/forms.py:32
#: authentication/templates/authentication/login.html:286 #: authentication/templates/authentication/login.html:286
@ -35,7 +35,7 @@ msgid "Password"
msgstr "密码" msgstr "密码"
#: accounts/const/account.py:7 #: accounts/const/account.py:7
#: accounts/serializers/automations/change_secret.py:34 #: accounts/serializers/automations/change_secret.py:33
msgid "SSH key" msgid "SSH key"
msgstr "SSH 密钥" msgstr "SSH 密钥"
@ -93,97 +93,97 @@ msgid "Update"
msgstr "更新" msgstr "更新"
#: accounts/const/account.py:33 #: accounts/const/account.py:33
#: accounts/serializers/automations/change_secret.py:156 audits/const.py:55 #: accounts/serializers/automations/change_secret.py:155 audits/const.py:55
#: audits/signal_handlers/activity_log.py:33 common/const/choices.py:19 #: audits/signal_handlers/activity_log.py:33 common/const/choices.py:19
#: ops/const.py:62 terminal/const.py:77 xpack/plugins/cloud/const.py:43 #: ops/const.py:62 terminal/const.py:77 xpack/plugins/cloud/const.py:43
msgid "Failed" msgid "Failed"
msgstr "失败" msgstr "失败"
#: accounts/const/automation.py:22 rbac/tree.py:50 #: accounts/const/automation.py:24 rbac/tree.py:50
msgid "Push account" msgid "Push account"
msgstr "账号推送" msgstr "账号推送"
#: accounts/const/automation.py:23 #: accounts/const/automation.py:25
msgid "Change secret" msgid "Change secret"
msgstr "更改密码" msgstr "更改密码"
#: accounts/const/automation.py:24 #: accounts/const/automation.py:26
msgid "Verify account" msgid "Verify account"
msgstr "验证账号" msgstr "验证账号"
#: accounts/const/automation.py:25 #: accounts/const/automation.py:27
msgid "Gather accounts" msgid "Gather accounts"
msgstr "收集账号" msgstr "收集账号"
#: accounts/const/automation.py:26 #: accounts/const/automation.py:28
msgid "Verify gateway account" msgid "Verify gateway account"
msgstr "验证网关账号" msgstr "验证网关账号"
#: accounts/const/automation.py:44 #: accounts/const/automation.py:46
msgid "Specific password" msgid "Specific secret"
msgstr "指定" msgstr "指定"
#: accounts/const/automation.py:45 #: accounts/const/automation.py:47
msgid "Random" msgid "Random generate"
msgstr "随机" msgstr "随机生成"
#: accounts/const/automation.py:49 ops/const.py:13 #: accounts/const/automation.py:51 ops/const.py:13
msgid "Append SSH KEY" msgid "Append SSH KEY"
msgstr "追加" msgstr "追加"
#: accounts/const/automation.py:50 ops/const.py:14 #: accounts/const/automation.py:52 ops/const.py:14
msgid "Empty and append SSH KEY" msgid "Empty and append SSH KEY"
msgstr "清空所有并添加" msgstr "清空所有并添加"
#: accounts/const/automation.py:51 ops/const.py:15 #: accounts/const/automation.py:53 ops/const.py:15
msgid "Replace (Replace only keys pushed by JumpServer) " msgid "Replace (Replace only keys pushed by JumpServer) "
msgstr "替换 (只替换由 JumpServer 推送的密钥)" msgstr "替换 (只替换由 JumpServer 推送的密钥)"
#: accounts/const/automation.py:56 #: accounts/const/automation.py:58
msgid "On asset create" msgid "On asset create"
msgstr "资产创建时" msgstr "资产创建时"
#: accounts/const/automation.py:59 #: accounts/const/automation.py:61
msgid "On perm add user" msgid "On perm add user"
msgstr "授权变更时添加用户" msgstr "授权变更时添加用户"
#: accounts/const/automation.py:61 #: accounts/const/automation.py:63
msgid "On perm add user group" msgid "On perm add user group"
msgstr "授权变更时添加用户组" msgstr "授权变更时添加用户组"
#: accounts/const/automation.py:63 #: accounts/const/automation.py:65
msgid "On perm add asset" msgid "On perm add asset"
msgstr "授权变更时添加资产" msgstr "授权变更时添加资产"
#: accounts/const/automation.py:65 #: accounts/const/automation.py:67
msgid "On perm add node" msgid "On perm add node"
msgstr "授权变更时添加节点" msgstr "授权变更时添加节点"
#: accounts/const/automation.py:67 #: accounts/const/automation.py:69
msgid "On perm add account" msgid "On perm add account"
msgstr "授权变更时添加账号" msgstr "授权变更时添加账号"
#: accounts/const/automation.py:69 #: accounts/const/automation.py:71
msgid "On asset join node" msgid "On asset join node"
msgstr "资产变更时添加到节点" msgstr "资产变更时添加到节点"
#: accounts/const/automation.py:71 #: accounts/const/automation.py:73
msgid "On user join group" msgid "On user join group"
msgstr "用户变更时添加到用户组" msgstr "用户变更时添加到用户组"
#: accounts/const/automation.py:79 #: accounts/const/automation.py:81
msgid "On perm change" msgid "On perm change"
msgstr "授权变更时" msgstr "授权变更时"
#: accounts/const/automation.py:86 #: accounts/const/automation.py:88
msgid "Inherit from group or node" msgid "Inherit from group or node"
msgstr "继承自用户组或资产节点" msgstr "继承自用户组或资产节点"
#: accounts/const/automation.py:94 #: accounts/const/automation.py:96
msgid "Create and push" msgid "Create and push"
msgstr "创建并推送" msgstr "创建并推送"
#: accounts/const/automation.py:95 #: accounts/const/automation.py:97
msgid "Only create" msgid "Only create"
msgstr "仅创建" msgstr "仅创建"
@ -216,11 +216,11 @@ msgstr "用户 %s 查看/导出 了密码"
#: accounts/models/account.py:48 #: accounts/models/account.py:48
#: accounts/models/automations/gather_account.py:16 #: accounts/models/automations/gather_account.py:16
#: accounts/serializers/account/account.py:202 #: accounts/serializers/account/account.py:205
#: accounts/serializers/account/account.py:247 #: accounts/serializers/account/account.py:250
#: accounts/serializers/account/gathered_account.py:10 #: accounts/serializers/account/gathered_account.py:10
#: accounts/serializers/automations/change_secret.py:112 #: accounts/serializers/automations/change_secret.py:111
#: accounts/serializers/automations/change_secret.py:132 #: accounts/serializers/automations/change_secret.py:131
#: acls/serializers/base.py:123 assets/models/asset/common.py:93 #: acls/serializers/base.py:123 assets/models/asset/common.py:93
#: assets/models/asset/common.py:334 assets/models/cmd_filter.py:36 #: assets/models/asset/common.py:334 assets/models/cmd_filter.py:36
#: assets/serializers/domain.py:19 assets/serializers/label.py:27 #: assets/serializers/domain.py:19 assets/serializers/label.py:27
@ -235,10 +235,10 @@ msgstr "用户 %s 查看/导出 了密码"
msgid "Asset" msgid "Asset"
msgstr "资产" msgstr "资产"
#: accounts/models/account.py:52 accounts/models/template.py:17 #: accounts/models/account.py:52 accounts/models/template.py:15
#: accounts/serializers/account/account.py:209 #: accounts/serializers/account/account.py:212
#: accounts/serializers/account/account.py:257 #: accounts/serializers/account/account.py:260
#: accounts/serializers/account/template.py:16 #: accounts/serializers/account/template.py:25
#: authentication/serializers/connect_token_secret.py:49 #: authentication/serializers/connect_token_secret.py:49
msgid "Su from" msgid "Su from"
msgstr "切换自" msgstr "切换自"
@ -249,7 +249,7 @@ msgstr "切换自"
msgid "Version" msgid "Version"
msgstr "版本" msgstr "版本"
#: accounts/models/account.py:56 accounts/serializers/account/account.py:204 #: accounts/models/account.py:56 accounts/serializers/account/account.py:207
#: users/models/user.py:846 #: users/models/user.py:846
msgid "Source" msgid "Source"
msgstr "来源" msgstr "来源"
@ -259,8 +259,8 @@ msgid "Source ID"
msgstr "来源 ID" msgstr "来源 ID"
#: accounts/models/account.py:60 #: accounts/models/account.py:60
#: accounts/serializers/automations/change_secret.py:113 #: accounts/serializers/automations/change_secret.py:112
#: accounts/serializers/automations/change_secret.py:133 #: accounts/serializers/automations/change_secret.py:132
#: acls/serializers/base.py:124 assets/serializers/asset/common.py:125 #: acls/serializers/base.py:124 assets/serializers/asset/common.py:125
#: assets/serializers/gateway.py:28 audits/models.py:55 ops/models/base.py:18 #: assets/serializers/gateway.py:28 audits/models.py:55 ops/models/base.py:18
#: perms/models/asset_permission.py:70 perms/serializers/permission.py:39 #: perms/models/asset_permission.py:70 perms/serializers/permission.py:39
@ -339,8 +339,8 @@ msgid "Reason"
msgstr "原因" msgstr "原因"
#: accounts/models/automations/backup_account.py:107 #: accounts/models/automations/backup_account.py:107
#: accounts/serializers/automations/change_secret.py:111 #: accounts/serializers/automations/change_secret.py:110
#: accounts/serializers/automations/change_secret.py:134 #: accounts/serializers/automations/change_secret.py:133
#: ops/serializers/job.py:56 terminal/serializers/session.py:46 #: ops/serializers/job.py:56 terminal/serializers/session.py:46
msgid "Is success" msgid "Is success"
msgstr "是否成功" msgstr "是否成功"
@ -349,75 +349,49 @@ msgstr "是否成功"
msgid "Account backup execution" msgid "Account backup execution"
msgstr "账号备份执行" msgstr "账号备份执行"
#: accounts/models/automations/base.py:19 #: accounts/models/automations/base.py:18
msgid "Account automation task" msgid "Account automation task"
msgstr "账号自动化任务" msgstr "账号自动化任务"
#: accounts/models/automations/base.py:33 #: accounts/models/automations/base.py:32
msgid "Automation execution" msgid "Automation execution"
msgstr "自动化执行" msgstr "自动化执行"
#: accounts/models/automations/base.py:34 #: accounts/models/automations/base.py:33
msgid "Automation executions" msgid "Automation executions"
msgstr "自动化执行" msgstr "自动化执行"
#: accounts/models/automations/base.py:36 #: accounts/models/automations/base.py:35
msgid "Can view change secret execution" msgid "Can view change secret execution"
msgstr "查看改密执行" msgstr "查看改密执行"
#: accounts/models/automations/base.py:37 #: accounts/models/automations/base.py:36
msgid "Can add change secret execution" msgid "Can add change secret execution"
msgstr "创建改密执行" msgstr "创建改密执行"
#: accounts/models/automations/base.py:39 #: accounts/models/automations/base.py:38
msgid "Can view gather accounts execution" msgid "Can view gather accounts execution"
msgstr "查看收集账号执行" msgstr "查看收集账号执行"
#: accounts/models/automations/base.py:40 #: accounts/models/automations/base.py:39
msgid "Can add gather accounts execution" msgid "Can add gather accounts execution"
msgstr "创建收集账号执行" msgstr "创建收集账号执行"
#: accounts/models/automations/base.py:42 #: accounts/models/automations/base.py:41
msgid "Can view push account execution" msgid "Can view push account execution"
msgstr "查看推送账号执行" msgstr "查看推送账号执行"
#: accounts/models/automations/base.py:43 #: accounts/models/automations/base.py:42
msgid "Can add push account execution" msgid "Can add push account execution"
msgstr "创建推送账号执行" msgstr "创建推送账号执行"
#: accounts/models/automations/base.py:55 accounts/models/template.py:21 #: accounts/models/automations/base.py:54
#: accounts/serializers/automations/change_secret.py:40
msgid "Secret strategy"
msgstr "密文策略"
#: accounts/models/automations/base.py:57
msgid "Password rules"
msgstr "密码规则"
#: accounts/models/automations/base.py:60
msgid "SSH key change strategy" msgid "SSH key change strategy"
msgstr "SSH 密钥推送方式" msgstr "SSH 密钥推送方式"
#: accounts/models/automations/base.py:70 accounts/models/base.py:36
#: accounts/serializers/account/account.py:429
#: accounts/serializers/account/base.py:16
#: accounts/serializers/automations/change_secret.py:46
#: authentication/serializers/connect_token_secret.py:41
#: authentication/serializers/connect_token_secret.py:50
msgid "Secret type"
msgstr "密文类型"
#: accounts/models/automations/base.py:72 accounts/models/mixins/vault.py:48
#: accounts/serializers/account/base.py:19
#: authentication/models/temp_token.py:10
#: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:19
msgid "Secret"
msgstr "密钥"
#: accounts/models/automations/change_secret.py:15 #: accounts/models/automations/change_secret.py:15
#: accounts/serializers/account/backup.py:34 #: accounts/serializers/account/backup.py:34
#: accounts/serializers/automations/change_secret.py:57 #: accounts/serializers/automations/change_secret.py:56
msgid "Recipient" msgid "Recipient"
msgstr "收件人" msgstr "收件人"
@ -445,7 +419,7 @@ msgid "Date finished"
msgstr "结束日期" msgstr "结束日期"
#: accounts/models/automations/change_secret.py:44 #: accounts/models/automations/change_secret.py:44
#: accounts/serializers/account/account.py:249 assets/const/automation.py:8 #: accounts/serializers/account/account.py:252 assets/const/automation.py:8
#: authentication/templates/authentication/passkey.html:173 #: authentication/templates/authentication/passkey.html:173
#: authentication/views/base.py:26 authentication/views/base.py:27 #: authentication/views/base.py:26 authentication/views/base.py:27
#: authentication/views/base.py:28 common/const/choices.py:20 #: authentication/views/base.py:28 common/const/choices.py:20
@ -465,7 +439,7 @@ msgid "Date last login"
msgstr "最后登录日期" msgstr "最后登录日期"
#: accounts/models/automations/gather_account.py:17 #: accounts/models/automations/gather_account.py:17
#: accounts/models/automations/push_account.py:15 accounts/models/base.py:34 #: accounts/models/automations/push_account.py:15 accounts/models/base.py:65
#: accounts/serializers/account/virtual.py:21 acls/serializers/base.py:19 #: accounts/serializers/account/virtual.py:21 acls/serializers/base.py:19
#: acls/serializers/base.py:50 assets/models/_user.py:23 audits/models.py:180 #: acls/serializers/base.py:50 assets/models/_user.py:23 audits/models.py:180
#: authentication/forms.py:25 authentication/forms.py:27 #: authentication/forms.py:25 authentication/forms.py:27
@ -515,7 +489,34 @@ msgstr "账号推送"
msgid "Verify asset account" msgid "Verify asset account"
msgstr "账号验证" msgstr "账号验证"
#: accounts/models/base.py:33 accounts/serializers/account/virtual.py:20 #: accounts/models/base.py:37 accounts/models/base.py:67
#: accounts/serializers/account/account.py:432
#: accounts/serializers/account/base.py:16
#: accounts/serializers/automations/change_secret.py:45
#: authentication/serializers/connect_token_secret.py:41
#: authentication/serializers/connect_token_secret.py:50
msgid "Secret type"
msgstr "密文类型"
#: accounts/models/base.py:39 accounts/models/mixins/vault.py:48
#: accounts/serializers/account/base.py:19
#: authentication/models/temp_token.py:10
#: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:19
msgid "Secret"
msgstr "密钥"
#: accounts/models/base.py:42
#: accounts/serializers/automations/change_secret.py:39
msgid "Secret strategy"
msgstr "密文策略"
#: accounts/models/base.py:44 accounts/serializers/account/template.py:22
#: accounts/serializers/automations/change_secret.py:44
msgid "Password rules"
msgstr "密码规则"
#: accounts/models/base.py:64 accounts/serializers/account/virtual.py:20
#: acls/models/base.py:35 acls/models/base.py:96 acls/models/command_acl.py:21 #: acls/models/base.py:35 acls/models/base.py:96 acls/models/command_acl.py:21
#: acls/serializers/base.py:35 applications/models.py:9 #: acls/serializers/base.py:35 applications/models.py:9
#: assets/models/_user.py:22 assets/models/asset/common.py:91 #: assets/models/_user.py:22 assets/models/asset/common.py:91
@ -540,11 +541,11 @@ msgstr "账号验证"
msgid "Name" msgid "Name"
msgstr "名称" msgstr "名称"
#: accounts/models/base.py:38 #: accounts/models/base.py:69
msgid "Privileged" msgid "Privileged"
msgstr "特权账号" msgstr "特权账号"
#: accounts/models/base.py:39 assets/models/asset/common.py:156 #: accounts/models/base.py:70 assets/models/asset/common.py:156
#: assets/models/automations/base.py:21 assets/models/cmd_filter.py:39 #: assets/models/automations/base.py:21 assets/models/cmd_filter.py:39
#: assets/models/label.py:22 #: assets/models/label.py:22
#: authentication/serializers/connect_token_secret.py:114 #: authentication/serializers/connect_token_secret.py:114
@ -553,27 +554,27 @@ msgstr "特权账号"
msgid "Is active" msgid "Is active"
msgstr "激活" msgstr "激活"
#: accounts/models/template.py:23 assets/models/_user.py:53 #: accounts/models/template.py:17 assets/models/_user.py:53
msgid "Auto push" msgid "Auto push"
msgstr "自动推送" msgstr "自动推送"
#: accounts/models/template.py:26 #: accounts/models/template.py:20
msgid "Platforms" msgid "Platforms"
msgstr "系统平台" msgstr "系统平台"
#: accounts/models/template.py:28 #: accounts/models/template.py:22
msgid "Push params" msgid "Push params"
msgstr "账号推送参数" msgstr "账号推送参数"
#: accounts/models/template.py:31 xpack/plugins/cloud/models.py:325 #: accounts/models/template.py:25 xpack/plugins/cloud/models.py:325
msgid "Account template" msgid "Account template"
msgstr "账号模版" msgstr "账号模版"
#: accounts/models/template.py:36 #: accounts/models/template.py:30
msgid "Can view asset account template secret" msgid "Can view asset account template secret"
msgstr "可以查看资产账号模版密码" msgstr "可以查看资产账号模版密码"
#: accounts/models/template.py:37 #: accounts/models/template.py:31
msgid "Can change asset account template secret" msgid "Can change asset account template secret"
msgstr "可以更改资产账号模版密码" msgstr "可以更改资产账号模版密码"
@ -654,7 +655,7 @@ msgstr "立即推送"
msgid "Exist policy" msgid "Exist policy"
msgstr "账号存在策略" msgstr "账号存在策略"
#: accounts/serializers/account/account.py:182 applications/models.py:11 #: accounts/serializers/account/account.py:185 applications/models.py:11
#: assets/models/label.py:21 assets/models/platform.py:89 #: assets/models/label.py:21 assets/models/platform.py:89
#: assets/serializers/asset/common.py:121 assets/serializers/cagegory.py:8 #: assets/serializers/asset/common.py:121 assets/serializers/cagegory.py:8
#: assets/serializers/platform.py:133 assets/serializers/platform.py:229 #: assets/serializers/platform.py:133 assets/serializers/platform.py:229
@ -663,7 +664,7 @@ msgstr "账号存在策略"
msgid "Category" msgid "Category"
msgstr "类别" msgstr "类别"
#: accounts/serializers/account/account.py:183 #: accounts/serializers/account/account.py:186
#: accounts/serializers/automations/base.py:54 acls/models/command_acl.py:24 #: accounts/serializers/automations/base.py:54 acls/models/command_acl.py:24
#: acls/serializers/command_acl.py:18 applications/models.py:14 #: acls/serializers/command_acl.py:18 applications/models.py:14
#: assets/models/_user.py:50 assets/models/automations/base.py:20 #: assets/models/_user.py:50 assets/models/automations/base.py:20
@ -683,26 +684,26 @@ msgstr "类别"
msgid "Type" msgid "Type"
msgstr "类型" msgstr "类型"
#: accounts/serializers/account/account.py:198 #: accounts/serializers/account/account.py:201
msgid "Asset not found" msgid "Asset not found"
msgstr "资产不存在" msgstr "资产不存在"
#: accounts/serializers/account/account.py:238 #: accounts/serializers/account/account.py:241
msgid "Has secret" msgid "Has secret"
msgstr "已托管密码" msgstr "已托管密码"
#: accounts/serializers/account/account.py:248 ops/models/celery.py:60 #: accounts/serializers/account/account.py:251 ops/models/celery.py:60
#: tickets/models/comment.py:13 tickets/models/ticket/general.py:45 #: tickets/models/comment.py:13 tickets/models/ticket/general.py:45
#: tickets/models/ticket/general.py:279 tickets/serializers/super_ticket.py:14 #: tickets/models/ticket/general.py:279 tickets/serializers/super_ticket.py:14
#: tickets/serializers/ticket/ticket.py:21 #: tickets/serializers/ticket/ticket.py:21
msgid "State" msgid "State"
msgstr "状态" msgstr "状态"
#: accounts/serializers/account/account.py:250 #: accounts/serializers/account/account.py:253
msgid "Changed" msgid "Changed"
msgstr "已修改" msgstr "已修改"
#: accounts/serializers/account/account.py:260 #: accounts/serializers/account/account.py:263
#: accounts/serializers/automations/base.py:22 acls/models/base.py:97 #: accounts/serializers/automations/base.py:22 acls/models/base.py:97
#: assets/models/automations/base.py:19 #: assets/models/automations/base.py:19
#: assets/serializers/automations/base.py:20 ops/models/base.py:17 #: assets/serializers/automations/base.py:20 ops/models/base.py:17
@ -711,27 +712,27 @@ msgstr "已修改"
msgid "Assets" msgid "Assets"
msgstr "资产" msgstr "资产"
#: accounts/serializers/account/account.py:315 #: accounts/serializers/account/account.py:318
msgid "Account already exists" msgid "Account already exists"
msgstr "账号已存在" msgstr "账号已存在"
#: accounts/serializers/account/account.py:365 #: accounts/serializers/account/account.py:368
#, python-format #, python-format
msgid "Asset does not support this secret type: %s" msgid "Asset does not support this secret type: %s"
msgstr "资产不支持账号类型: %s" msgstr "资产不支持账号类型: %s"
#: accounts/serializers/account/account.py:397 #: accounts/serializers/account/account.py:400
msgid "Account has exist" msgid "Account has exist"
msgstr "账号已存在" msgstr "账号已存在"
#: accounts/serializers/account/account.py:430 #: accounts/serializers/account/account.py:433
#: authentication/serializers/connect_token_secret.py:156 #: authentication/serializers/connect_token_secret.py:156
#: authentication/templates/authentication/_access_key_modal.html:30 #: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:31 #: perms/models/perm_node.py:21 users/serializers/group.py:31
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
#: accounts/serializers/account/account.py:437 acls/serializers/base.py:116 #: accounts/serializers/account/account.py:440 acls/serializers/base.py:116
#: assets/models/cmd_filter.py:24 assets/models/label.py:16 audits/models.py:50 #: assets/models/cmd_filter.py:24 assets/models/label.py:16 audits/models.py:50
#: audits/models.py:86 audits/models.py:164 audits/models.py:262 #: audits/models.py:86 audits/models.py:164 audits/models.py:262
#: audits/serializers.py:171 authentication/models/connection_token.py:32 #: audits/serializers.py:171 authentication/models/connection_token.py:32
@ -750,7 +751,7 @@ msgstr "ID"
msgid "User" msgid "User"
msgstr "用户" msgstr "用户"
#: accounts/serializers/account/account.py:438 #: accounts/serializers/account/account.py:441
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:158 terminal/notifications.py:207 #: terminal/notifications.py:158 terminal/notifications.py:207
msgid "Date" msgid "Date"
@ -769,7 +770,7 @@ msgid "Executed amount"
msgstr "执行次数" msgstr "执行次数"
#: accounts/serializers/account/backup.py:35 #: accounts/serializers/account/backup.py:35
#: accounts/serializers/automations/change_secret.py:58 #: accounts/serializers/automations/change_secret.py:57
msgid "Currently only mail sending is supported" msgid "Currently only mail sending is supported"
msgstr "当前只支持邮件发送" msgstr "当前只支持邮件发送"
@ -794,15 +795,39 @@ msgstr ""
"提示: 如果认证时不需要用户名,可填写为 null, 如果是 AD 账号,格式为 " "提示: 如果认证时不需要用户名,可填写为 null, 如果是 AD 账号,格式为 "
"username@domain" "username@domain"
#: accounts/serializers/account/template.py:27 #: accounts/serializers/account/template.py:11
#, fuzzy
#| msgid "Password strength"
msgid "Password length"
msgstr "密码强度:"
#: accounts/serializers/account/template.py:12
#, fuzzy
#| msgid "Powershell"
msgid "Lowercase"
msgstr "PowerShell"
#: accounts/serializers/account/template.py:13
msgid "Uppercase"
msgstr ""
#: accounts/serializers/account/template.py:14
msgid "Digit"
msgstr ""
#: accounts/serializers/account/template.py:15
msgid "Special symbol"
msgstr ""
#: accounts/serializers/account/template.py:36
msgid "Secret generation strategy for account creation" msgid "Secret generation strategy for account creation"
msgstr "密码生成策略,用于账号创建时,设置密码" msgstr "密码生成策略,用于账号创建时,设置密码"
#: accounts/serializers/account/template.py:28 #: accounts/serializers/account/template.py:37
msgid "Whether to automatically push the account to the asset" msgid "Whether to automatically push the account to the asset"
msgstr "是否自动推送账号到资产" msgstr "是否自动推送账号到资产"
#: accounts/serializers/account/template.py:30 #: accounts/serializers/account/template.py:40
msgid "" msgid ""
"Associated platform, you can configure push parameters. If not associated, " "Associated platform, you can configure push parameters. If not associated, "
"default parameters will be used" "default parameters will be used"
@ -849,24 +874,24 @@ msgstr "名称已存在"
msgid "Automation snapshot" msgid "Automation snapshot"
msgstr "自动化快照" msgstr "自动化快照"
#: accounts/serializers/automations/change_secret.py:43 #: accounts/serializers/automations/change_secret.py:42
msgid "SSH Key strategy" msgid "SSH Key strategy"
msgstr "SSH 密钥更改方式" msgstr "SSH 密钥更改方式"
#: accounts/serializers/automations/change_secret.py:81 #: accounts/serializers/automations/change_secret.py:80
msgid "* Please enter the correct password length" msgid "* Please enter the correct password length"
msgstr "* 请输入正确的密码长度" msgstr "* 请输入正确的密码长度"
#: accounts/serializers/automations/change_secret.py:85 #: accounts/serializers/automations/change_secret.py:84
msgid "* Password length range 6-30 bits" msgid "* Password length range 6-30 bits"
msgstr "* 密码长度范围 6-30 位" msgstr "* 密码长度范围 6-30 位"
#: accounts/serializers/automations/change_secret.py:115 #: accounts/serializers/automations/change_secret.py:114
#: assets/models/automations/base.py:127 #: assets/models/automations/base.py:127
msgid "Automation task execution" msgid "Automation task execution"
msgstr "自动化任务执行历史" msgstr "自动化任务执行历史"
#: accounts/serializers/automations/change_secret.py:155 audits/const.py:54 #: accounts/serializers/automations/change_secret.py:154 audits/const.py:54
#: audits/models.py:60 audits/signal_handlers/activity_log.py:33 #: audits/models.py:60 audits/signal_handlers/activity_log.py:33
#: common/const/choices.py:18 ops/const.py:60 ops/serializers/celery.py:40 #: common/const/choices.py:18 ops/const.py:60 ops/serializers/celery.py:40
#: terminal/const.py:76 terminal/models/session/sharing.py:121 #: terminal/const.py:76 terminal/models/session/sharing.py:121
@ -907,23 +932,23 @@ msgstr "验证资产账号可用性"
msgid "Verify accounts connectivity" msgid "Verify accounts connectivity"
msgstr "测试账号可连接性" msgstr "测试账号可连接性"
#: accounts/utils.py:41 #: accounts/utils.py:46
msgid "Password can not contains `{{` " msgid "Password can not contains `{{` "
msgstr "密码不能包含 `{{` 字符" msgstr "密码不能包含 `{{` 字符"
#: accounts/utils.py:43 #: accounts/utils.py:48
msgid "Password can not contains `{%` " msgid "Password can not contains `{%` "
msgstr "密码不能包含 `{%` 字符" msgstr "密码不能包含 `{%` 字符"
#: accounts/utils.py:46 #: accounts/utils.py:51
msgid "Password can not contains `'` " msgid "Password can not contains `'` "
msgstr "密码不能包含 `'` 字符" msgstr "密码不能包含 `'` 字符"
#: accounts/utils.py:48 #: accounts/utils.py:53
msgid "Password can not contains `\"` " msgid "Password can not contains `\"` "
msgstr "密码不能包含 `\"` 字符" msgstr "密码不能包含 `\"` 字符"
#: accounts/utils.py:54 #: accounts/utils.py:59
msgid "private key invalid or passphrase error" msgid "private key invalid or passphrase error"
msgstr "密钥不合法或密钥密码错误" msgstr "密钥不合法或密钥密码错误"
@ -8318,3 +8343,7 @@ msgstr "企业专业版"
#: xpack/plugins/license/models.py:86 #: xpack/plugins/license/models.py:86
msgid "Ultimate edition" msgid "Ultimate edition"
msgstr "企业旗舰版" msgstr "企业旗舰版"
#~ msgid "Random"
#~ msgstr "随机"