mirror of https://github.com/jumpserver/jumpserver
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
parent
0b30f5cf88
commit
e6fe7c489e
|
@ -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):
|
||||||
|
|
|
@ -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'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 "エンタープライズ基本版"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 "随机"
|
||||||
|
|
Loading…
Reference in New Issue