feat: 添加 临时 password (#8035)

* perf: 添加 template password

* perf: 修改id

* perf: 修改 翻译

* perf: 修改 tmp token

* perf: 修改 token

Co-authored-by: ibuler <ibuler@qq.com>
pull/8054/head
fit2bot 2022-04-13 20:24:56 +08:00 committed by GitHub
parent 10b033010e
commit b610d71e11
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 611 additions and 390 deletions

View File

@ -70,6 +70,7 @@ class AuthBackendLabelMapping(LazyObject):
backend_label_mapping[settings.AUTH_BACKEND_AUTH_TOKEN] = _('Auth Token') backend_label_mapping[settings.AUTH_BACKEND_AUTH_TOKEN] = _('Auth Token')
backend_label_mapping[settings.AUTH_BACKEND_WECOM] = _('WeCom') backend_label_mapping[settings.AUTH_BACKEND_WECOM] = _('WeCom')
backend_label_mapping[settings.AUTH_BACKEND_DINGTALK] = _('DingTalk') backend_label_mapping[settings.AUTH_BACKEND_DINGTALK] = _('DingTalk')
backend_label_mapping[settings.AUTH_BACKEND_TEMP_TOKEN] = _('Temporary token')
return backend_label_mapping return backend_label_mapping
def _setup(self): def _setup(self):

View File

@ -11,3 +11,4 @@ from .wecom import *
from .dingtalk import * from .dingtalk import *
from .feishu import * from .feishu import *
from .password import * from .password import *
from .temp_token import *

View File

@ -0,0 +1,27 @@
from django.utils import timezone
from rest_framework.response import Response
from rest_framework.decorators import action
from common.drf.api import JMSModelViewSet
from common.permissions import IsValidUser
from ..models import TempToken
from ..serializers import TempTokenSerializer
class TempTokenViewSet(JMSModelViewSet):
serializer_class = TempTokenSerializer
permission_classes = [IsValidUser]
http_method_names = ['post', 'get', 'options', 'patch']
def get_queryset(self):
username = self.request.user.username
return TempToken.objects.filter(username=username)
@action(methods=['PATCH'], detail=True, url_path='expire')
def expire(self, *args, **kwargs):
instance = self.get_object()
instance.date_expired = timezone.now()
instance.save()
serializer = self.get_serializer(instance)
return Response(serializer.data)

View File

@ -1,6 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
from django.shortcuts import redirect
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.generics import CreateAPIView from rest_framework.generics import CreateAPIView

View File

@ -1,10 +1,11 @@
from django.contrib.auth.backends import BaseBackend
from django.contrib.auth.backends import ModelBackend from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
from users.models import User from users.models import User
from common.utils import get_logger from common.utils import get_logger
UserModel = get_user_model()
logger = get_logger(__file__) logger = get_logger(__file__)

View File

@ -53,7 +53,7 @@ class LDAPAuthorizationBackend(JMSBaseAuthBackend, LDAPBackend):
else: else:
built = False built = False
return (user, built) return user, built
def pre_check(self, username, password): def pre_check(self, username, password):
if not settings.AUTH_LDAP: if not settings.AUTH_LDAP:
@ -75,6 +75,9 @@ class LDAPAuthorizationBackend(JMSBaseAuthBackend, LDAPBackend):
def authenticate(self, request=None, username=None, password=None, **kwargs): def authenticate(self, request=None, username=None, password=None, **kwargs):
logger.info('Authentication LDAP backend') logger.info('Authentication LDAP backend')
if username is None or password is None:
logger.info('No username or password')
return None
match, msg = self.pre_check(username, password) match, msg = self.pre_check(username, password)
if not match: if not match:
logger.info('Authenticate failed: {}'.format(msg)) logger.info('Authenticate failed: {}'.format(msg))

View File

@ -13,20 +13,23 @@ User = get_user_model()
class CreateUserMixin: class CreateUserMixin:
def get_django_user(self, username, password=None, *args, **kwargs): @staticmethod
def get_django_user(username, password=None, *args, **kwargs):
if isinstance(username, bytes): if isinstance(username, bytes):
username = username.decode() username = username.decode()
try: user = User.objects.filter(username=username).first()
user = User.objects.get(username=username) if user:
except User.DoesNotExist: return user
if '@' in username:
email = username if '@' in username:
else: email = username
email_suffix = settings.EMAIL_SUFFIX else:
email = '{}@{}'.format(username, email_suffix) email_suffix = settings.EMAIL_SUFFIX
user = User(username=username, name=username, email=email) email = '{}@{}'.format(username, email_suffix)
user.source = user.Source.radius.value
user.save() user = User(username=username, name=username, email=email)
user.source = user.Source.radius.value
user.save()
return user return user
def _perform_radius_auth(self, client, packet): def _perform_radius_auth(self, client, packet):

View File

@ -14,7 +14,7 @@ from ..base import JMSModelBackend
__all__ = ['SAML2Backend'] __all__ = ['SAML2Backend']
logger = get_logger(__file__) logger = get_logger(__name__)
class SAML2Backend(JMSModelBackend): class SAML2Backend(JMSModelBackend):

View File

@ -0,0 +1,26 @@
from django.utils import timezone
from django.conf import settings
from django.core.exceptions import PermissionDenied
from authentication.models import TempToken
from .base import JMSModelBackend
class TempTokenAuthBackend(JMSModelBackend):
model = TempToken
def authenticate(self, request, username='', password='', *args, **kwargs):
token = self.model.objects.filter(username=username, secret=password).first()
if not token:
return None
if not token.is_valid:
raise PermissionDenied('Token is invalid, expired at {}'.format(token.date_expired))
token.verified = True
token.date_verified = timezone.now()
token.save()
return token.user
@staticmethod
def is_enabled():
return settings.AUTH_TEMP_TOKEN

View File

@ -0,0 +1,32 @@
# Generated by Django 3.1.14 on 2022-04-08 07:04
from django.db import migrations, models
import uuid
class Migration(migrations.Migration):
dependencies = [
('authentication', '0009_auto_20220310_0616'),
]
operations = [
migrations.CreateModel(
name='TempToken',
fields=[
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')),
('updated_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Updated by')),
('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')),
('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('username', models.CharField(max_length=128, verbose_name='Username')),
('secret', models.CharField(max_length=64, verbose_name='Secret')),
('verified', models.BooleanField(default=False, verbose_name='Verified')),
('date_verified', models.DateTimeField(null=True, verbose_name='Date verified')),
('date_expired', models.DateTimeField(verbose_name='Date verified')),
],
options={
'verbose_name': 'Temporary token',
},
),
]

View File

@ -1,8 +1,9 @@
import uuid import uuid
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from rest_framework.authtoken.models import Token
from django.conf import settings from django.conf import settings
from rest_framework.authtoken.models import Token
from common.db import models from common.db import models
@ -64,6 +65,27 @@ class ConnectionToken(models.JMSBaseModel):
] ]
class TempToken(models.JMSModel):
username = models.CharField(max_length=128, verbose_name=_("Username"))
secret = models.CharField(max_length=64, verbose_name=_("Secret"))
verified = models.BooleanField(default=False, verbose_name=_("Verified"))
date_verified = models.DateTimeField(null=True, verbose_name=_("Date verified"))
date_expired = models.DateTimeField(verbose_name=_("Date expired"))
class Meta:
verbose_name = _("Temporary token")
@property
def user(self):
from users.models import User
return User.objects.filter(username=self.username).first()
@property
def is_valid(self):
not_expired = self.date_expired and self.date_expired > timezone.now()
return not self.verified and not_expired
class SuperConnectionToken(ConnectionToken): class SuperConnectionToken(ConnectionToken):
class Meta: class Meta:
proxy = True proxy = True

View File

@ -0,0 +1,3 @@
from .token import *
from .connect_token import *
from .password_mfa import *

View File

@ -1,109 +1,22 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
from django.utils import timezone
from rest_framework import serializers from rest_framework import serializers
from common.utils import get_object_or_none
from users.models import User from users.models import User
from assets.models import Asset, SystemUser, Gateway, Domain, CommandFilterRule from assets.models import Asset, SystemUser, Gateway, Domain, CommandFilterRule
from applications.models import Application from applications.models import Application
from users.serializers import UserProfileSerializer
from assets.serializers import ProtocolsField from assets.serializers import ProtocolsField
from perms.serializers.base import ActionsField from perms.serializers.base import ActionsField
from .models import AccessKey
__all__ = [ __all__ = [
'AccessKeySerializer', 'OtpVerifySerializer', 'BearerTokenSerializer', 'ConnectionTokenSerializer', 'ConnectionTokenApplicationSerializer',
'MFAChallengeSerializer', 'SSOTokenSerializer', 'ConnectionTokenUserSerializer', 'ConnectionTokenFilterRuleSerializer',
'ConnectionTokenSerializer', 'ConnectionTokenSecretSerializer', 'ConnectionTokenAssetSerializer', 'ConnectionTokenSystemUserSerializer',
'PasswordVerifySerializer', 'MFASelectTypeSerializer', 'ConnectionTokenDomainSerializer', 'ConnectionTokenRemoteAppSerializer',
'ConnectionTokenGatewaySerializer', 'ConnectionTokenSecretSerializer'
] ]
class AccessKeySerializer(serializers.ModelSerializer):
class Meta:
model = AccessKey
fields = ['id', 'secret', 'is_active', 'date_created']
read_only_fields = ['id', 'secret', 'date_created']
class OtpVerifySerializer(serializers.Serializer):
code = serializers.CharField(max_length=6, min_length=6)
class PasswordVerifySerializer(serializers.Serializer):
password = serializers.CharField()
class BearerTokenSerializer(serializers.Serializer):
username = serializers.CharField(allow_null=True, required=False, write_only=True)
password = serializers.CharField(write_only=True, allow_null=True,
required=False, allow_blank=True)
public_key = serializers.CharField(write_only=True, allow_null=True,
allow_blank=True, required=False)
token = serializers.CharField(read_only=True)
keyword = serializers.SerializerMethodField()
date_expired = serializers.DateTimeField(read_only=True)
user = UserProfileSerializer(read_only=True)
@staticmethod
def get_keyword(obj):
return 'Bearer'
def update_last_login(self, user):
user.last_login = timezone.now()
user.save(update_fields=['last_login'])
def get_request_user(self):
request = self.context.get('request')
if request.user and request.user.is_authenticated:
user = request.user
else:
user_id = request.session.get('user_id')
user = get_object_or_none(User, pk=user_id)
if not user:
raise serializers.ValidationError(
"user id {} not exist".format(user_id)
)
return user
def create(self, validated_data):
request = self.context.get('request')
user = self.get_request_user()
token, date_expired = user.create_bearer_token(request)
self.update_last_login(user)
instance = {
"token": token,
"date_expired": date_expired,
"user": user
}
return instance
class MFASelectTypeSerializer(serializers.Serializer):
type = serializers.CharField()
username = serializers.CharField(required=False, allow_blank=True, allow_null=True)
class MFAChallengeSerializer(serializers.Serializer):
type = serializers.CharField(write_only=True, required=False, allow_blank=True)
code = serializers.CharField(write_only=True)
def create(self, validated_data):
pass
def update(self, instance, validated_data):
pass
class SSOTokenSerializer(serializers.Serializer):
username = serializers.CharField(write_only=True)
login_url = serializers.CharField(read_only=True)
next = serializers.CharField(write_only=True, allow_blank=True, required=False, allow_null=True)
class ConnectionTokenSerializer(serializers.Serializer): class ConnectionTokenSerializer(serializers.Serializer):
user = serializers.CharField(max_length=128, required=False, allow_blank=True) user = serializers.CharField(max_length=128, required=False, allow_blank=True)
system_user = serializers.CharField(max_length=128, required=True) system_user = serializers.CharField(max_length=128, required=True)

View File

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
#
from rest_framework import serializers
__all__ = [
'OtpVerifySerializer', 'MFAChallengeSerializer', 'MFASelectTypeSerializer',
'PasswordVerifySerializer',
]
class PasswordVerifySerializer(serializers.Serializer):
password = serializers.CharField()
class MFASelectTypeSerializer(serializers.Serializer):
type = serializers.CharField()
username = serializers.CharField(required=False, allow_blank=True, allow_null=True)
class MFAChallengeSerializer(serializers.Serializer):
type = serializers.CharField(write_only=True, required=False, allow_blank=True)
code = serializers.CharField(write_only=True)
def create(self, validated_data):
pass
def update(self, instance, validated_data):
pass
class OtpVerifySerializer(serializers.Serializer):
code = serializers.CharField(max_length=6, min_length=6)

View File

@ -0,0 +1,103 @@
# -*- coding: utf-8 -*-
#
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from common.utils import get_object_or_none, random_string
from users.models import User
from users.serializers import UserProfileSerializer
from ..models import AccessKey, TempToken
__all__ = [
'AccessKeySerializer', 'BearerTokenSerializer',
'SSOTokenSerializer', 'TempTokenSerializer',
]
class AccessKeySerializer(serializers.ModelSerializer):
class Meta:
model = AccessKey
fields = ['id', 'secret', 'is_active', 'date_created']
read_only_fields = ['id', 'secret', 'date_created']
class BearerTokenSerializer(serializers.Serializer):
username = serializers.CharField(allow_null=True, required=False, write_only=True)
password = serializers.CharField(write_only=True, allow_null=True,
required=False, allow_blank=True)
public_key = serializers.CharField(write_only=True, allow_null=True,
allow_blank=True, required=False)
token = serializers.CharField(read_only=True)
keyword = serializers.SerializerMethodField()
date_expired = serializers.DateTimeField(read_only=True)
user = UserProfileSerializer(read_only=True)
@staticmethod
def get_keyword(obj):
return 'Bearer'
def update_last_login(self, user):
user.last_login = timezone.now()
user.save(update_fields=['last_login'])
def get_request_user(self):
request = self.context.get('request')
if request.user and request.user.is_authenticated:
user = request.user
else:
user_id = request.session.get('user_id')
user = get_object_or_none(User, pk=user_id)
if not user:
raise serializers.ValidationError(
"user id {} not exist".format(user_id)
)
return user
def create(self, validated_data):
request = self.context.get('request')
user = self.get_request_user()
token, date_expired = user.create_bearer_token(request)
self.update_last_login(user)
instance = {
"token": token,
"date_expired": date_expired,
"user": user
}
return instance
class SSOTokenSerializer(serializers.Serializer):
username = serializers.CharField(write_only=True)
login_url = serializers.CharField(read_only=True)
next = serializers.CharField(write_only=True, allow_blank=True, required=False, allow_null=True)
class TempTokenSerializer(serializers.ModelSerializer):
is_valid = serializers.BooleanField(label=_("Is valid"), read_only=True)
class Meta:
model = TempToken
fields = [
'id', 'username', 'secret', 'verified', 'is_valid',
'date_created', 'date_updated', 'date_verified',
'date_expired',
]
read_only_fields = fields
def create(self, validated_data):
request = self.context.get('request')
if not request or not request.user:
raise PermissionError()
secret = random_string(36)
username = request.user.username
kwargs = {
'username': username, 'secret': secret,
'date_expired': timezone.now() + timezone.timedelta(seconds=5*60),
}
token = TempToken(**kwargs)
token.save()
return token

View File

@ -9,6 +9,7 @@ app_name = 'authentication'
router = DefaultRouter() router = DefaultRouter()
router.register('access-keys', api.AccessKeyViewSet, 'access-key') router.register('access-keys', api.AccessKeyViewSet, 'access-key')
router.register('sso', api.SSOViewSet, 'sso') router.register('sso', api.SSOViewSet, 'sso')
router.register('temp-tokens', api.TempTokenViewSet, 'temp-token')
router.register('connection-token', api.UserConnectionTokenViewSet, 'connection-token') router.register('connection-token', api.UserConnectionTokenViewSet, 'connection-token')

View File

@ -31,6 +31,8 @@ def combine_seq(s1, s2, callback=None):
def get_logger(name=''): def get_logger(name=''):
if '/' in name:
name = os.path.basename(name).replace('.py', '')
return logging.getLogger('jumpserver.%s' % name) return logging.getLogger('jumpserver.%s' % name)

View File

@ -40,27 +40,3 @@ def random_string(length, lower=True, upper=True, digit=True, special_char=False
password = ''.join(password) password = ''.join(password)
return password return password
# def strTimeProp(start, end, prop, fmt):
# time_start = time.mktime(time.strptime(start, fmt))
# time_end = time.mktime(time.strptime(end, fmt))
# ptime = time_start + prop * (time_end - time_start)
# return int(ptime)
#
#
# def randomTimestamp(start, end, fmt='%Y-%m-%d %H:%M:%S'):
# return strTimeProp(start, end, random.random(), fmt)
#
#
# def randomDate(start, end, frmt='%Y-%m-%d %H:%M:%S'):
# return time.strftime(frmt, time.localtime(strTimeProp(start, end, random.random(), frmt)))
#
#
# def randomTimestampList(start, end, n, frmt='%Y-%m-%d %H:%M:%S'):
# return [randomTimestamp(start, end, frmt) for _ in range(n)]
#
#
# def randomDateList(start, end, n, frmt='%Y-%m-%d %H:%M:%S'):
# return [randomDate(start, end, frmt) for _ in range(n)]

View File

@ -256,6 +256,8 @@ class Config(dict):
'AUTH_SAML2_PROVIDER_AUTHORIZATION_ENDPOINT': '/', 'AUTH_SAML2_PROVIDER_AUTHORIZATION_ENDPOINT': '/',
'AUTH_SAML2_AUTHENTICATION_FAILURE_REDIRECT_URI': '/', 'AUTH_SAML2_AUTHENTICATION_FAILURE_REDIRECT_URI': '/',
'AUTH_TEMP_TOKEN': False,
# 企业微信 # 企业微信
'AUTH_WECOM': False, 'AUTH_WECOM': False,
'WECOM_CORPID': '', 'WECOM_CORPID': '',

View File

@ -109,11 +109,11 @@ CAS_APPLY_ATTRIBUTES_TO_USER = CONFIG.CAS_APPLY_ATTRIBUTES_TO_USER
CAS_RENAME_ATTRIBUTES = CONFIG.CAS_RENAME_ATTRIBUTES CAS_RENAME_ATTRIBUTES = CONFIG.CAS_RENAME_ATTRIBUTES
CAS_CREATE_USER = CONFIG.CAS_CREATE_USER CAS_CREATE_USER = CONFIG.CAS_CREATE_USER
# SSO Auth # SSO auth
AUTH_SSO = CONFIG.AUTH_SSO AUTH_SSO = CONFIG.AUTH_SSO
AUTH_SSO_AUTHKEY_TTL = CONFIG.AUTH_SSO_AUTHKEY_TTL AUTH_SSO_AUTHKEY_TTL = CONFIG.AUTH_SSO_AUTHKEY_TTL
# WECOM Auth # WECOM auth
AUTH_WECOM = CONFIG.AUTH_WECOM AUTH_WECOM = CONFIG.AUTH_WECOM
WECOM_CORPID = CONFIG.WECOM_CORPID WECOM_CORPID = CONFIG.WECOM_CORPID
WECOM_AGENTID = CONFIG.WECOM_AGENTID WECOM_AGENTID = CONFIG.WECOM_AGENTID
@ -141,6 +141,9 @@ SAML2_SP_ADVANCED_SETTINGS = CONFIG.SAML2_SP_ADVANCED_SETTINGS
SAML2_LOGIN_URL_NAME = "authentication:saml2:saml2-login" SAML2_LOGIN_URL_NAME = "authentication:saml2:saml2-login"
SAML2_LOGOUT_URL_NAME = "authentication:saml2:saml2-logout" SAML2_LOGOUT_URL_NAME = "authentication:saml2:saml2-logout"
# 临时 token
AUTH_TEMP_TOKEN = CONFIG.AUTH_TEMP_TOKEN
# Other setting # Other setting
TOKEN_EXPIRATION = CONFIG.TOKEN_EXPIRATION TOKEN_EXPIRATION = CONFIG.TOKEN_EXPIRATION
OTP_IN_RADIUS = CONFIG.OTP_IN_RADIUS OTP_IN_RADIUS = CONFIG.OTP_IN_RADIUS
@ -160,6 +163,7 @@ AUTH_BACKEND_DINGTALK = 'authentication.backends.sso.DingTalkAuthentication'
AUTH_BACKEND_FEISHU = 'authentication.backends.sso.FeiShuAuthentication' AUTH_BACKEND_FEISHU = 'authentication.backends.sso.FeiShuAuthentication'
AUTH_BACKEND_AUTH_TOKEN = 'authentication.backends.sso.AuthorizationTokenAuthentication' AUTH_BACKEND_AUTH_TOKEN = 'authentication.backends.sso.AuthorizationTokenAuthentication'
AUTH_BACKEND_SAML2 = 'authentication.backends.saml2.SAML2Backend' AUTH_BACKEND_SAML2 = 'authentication.backends.saml2.SAML2Backend'
AUTH_BACKEND_TEMP_TOKEN = 'authentication.backends.token.TempTokenAuthBackend'
AUTHENTICATION_BACKENDS = [ AUTHENTICATION_BACKENDS = [
@ -172,7 +176,7 @@ AUTHENTICATION_BACKENDS = [
# 扫码模式 # 扫码模式
AUTH_BACKEND_WECOM, AUTH_BACKEND_DINGTALK, AUTH_BACKEND_FEISHU, AUTH_BACKEND_WECOM, AUTH_BACKEND_DINGTALK, AUTH_BACKEND_FEISHU,
# Token模式 # Token模式
AUTH_BACKEND_AUTH_TOKEN, AUTH_BACKEND_SSO, AUTH_BACKEND_AUTH_TOKEN, AUTH_BACKEND_SSO, AUTH_BACKEND_TEMP_TOKEN
] ]
ONLY_ALLOW_EXIST_USER_AUTH = CONFIG.ONLY_ALLOW_EXIST_USER_AUTH ONLY_ALLOW_EXIST_USER_AUTH = CONFIG.ONLY_ALLOW_EXIST_USER_AUTH

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:70685e92cbf84f4178224a44fd84eb884a0acfb9749200541ea6655a9a397a72 oid sha256:89878c511a62211520b347ccf37676cb11e9a0b3257ff968fb6d5dd81726a1e5
size 125019 size 125117

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-12 17:03+0800\n" "POT-Creation-Date: 2022-04-13 20:21+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"
@ -29,25 +29,25 @@ msgstr "Acls"
#: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24 #: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24
#: orgs/models.py:65 perms/models/base.py:83 rbac/models/role.py:29 #: orgs/models.py:65 perms/models/base.py:83 rbac/models/role.py:29
#: settings/models.py:29 settings/serializers/sms.py:6 #: settings/models.py:29 settings/serializers/sms.py:6
#: terminal/models/endpoint.py:10 terminal/models/endpoint.py:53 #: terminal/models/endpoint.py:10 terminal/models/endpoint.py:55
#: terminal/models/storage.py:23 terminal/models/task.py:16 #: terminal/models/storage.py:23 terminal/models/task.py:16
#: terminal/models/terminal.py:100 users/forms/profile.py:32 #: terminal/models/terminal.py:100 users/forms/profile.py:32
#: users/models/group.py:15 users/models/user.py:661 #: users/models/group.py:15 users/models/user.py:661
#: xpack/plugins/cloud/models.py:28 #: xpack/plugins/cloud/models.py:27
msgid "Name" msgid "Name"
msgstr "名前" msgstr "名前"
#: acls/models/base.py:27 assets/models/cmd_filter.py:84 #: acls/models/base.py:27 assets/models/cmd_filter.py:84
#: assets/models/user.py:247 terminal/models/endpoint.py:56 #: assets/models/user.py:247 terminal/models/endpoint.py:58
msgid "Priority" msgid "Priority"
msgstr "優先順位" msgstr "優先順位"
#: acls/models/base.py:28 assets/models/cmd_filter.py:84 #: acls/models/base.py:28 assets/models/cmd_filter.py:84
#: assets/models/user.py:247 terminal/models/endpoint.py:57 #: assets/models/user.py:247 terminal/models/endpoint.py:59
msgid "1-100, the lower the value will be match first" msgid "1-100, the lower the value will be match first"
msgstr "1-100、低い値は最初に一致します" msgstr "1-100、低い値は最初に一致します"
#: acls/models/base.py:31 authentication/models.py:17 #: acls/models/base.py:31 authentication/models.py:18
#: authentication/templates/authentication/_access_key_modal.html:32 #: authentication/templates/authentication/_access_key_modal.html:32
#: perms/models/base.py:88 terminal/models/sharing.py:26 #: perms/models/base.py:88 terminal/models/sharing.py:26
msgid "Active" msgid "Active"
@ -61,12 +61,12 @@ msgstr "アクティブ"
#: assets/models/domain.py:64 assets/models/group.py:23 #: assets/models/domain.py:64 assets/models/group.py:23
#: assets/models/label.py:23 ops/models/adhoc.py:38 orgs/models.py:68 #: assets/models/label.py:23 ops/models/adhoc.py:38 orgs/models.py:68
#: perms/models/base.py:93 rbac/models/role.py:37 settings/models.py:34 #: perms/models/base.py:93 rbac/models/role.py:37 settings/models.py:34
#: terminal/models/endpoint.py:20 terminal/models/endpoint.py:63 #: terminal/models/endpoint.py:20 terminal/models/endpoint.py:65
#: terminal/models/storage.py:26 terminal/models/terminal.py:114 #: terminal/models/storage.py:26 terminal/models/terminal.py:114
#: tickets/models/comment.py:24 tickets/models/ticket.py:154 #: tickets/models/comment.py:24 tickets/models/ticket.py:154
#: users/models/group.py:16 users/models/user.py:698 #: users/models/group.py:16 users/models/user.py:698
#: xpack/plugins/change_auth_plan/models/base.py:44 #: xpack/plugins/change_auth_plan/models/base.py:44
#: xpack/plugins/cloud/models.py:35 xpack/plugins/cloud/models.py:116 #: xpack/plugins/cloud/models.py:34 xpack/plugins/cloud/models.py:115
#: xpack/plugins/gathered_user/models.py:26 #: xpack/plugins/gathered_user/models.py:26
msgid "Comment" msgid "Comment"
msgstr "コメント" msgstr "コメント"
@ -87,9 +87,9 @@ msgstr "ログイン確認"
#: acls/models/login_acl.py:24 acls/models/login_asset_acl.py:20 #: acls/models/login_acl.py:24 acls/models/login_asset_acl.py:20
#: assets/models/cmd_filter.py:30 assets/models/label.py:15 audits/models.py:37 #: assets/models/cmd_filter.py:30 assets/models/label.py:15 audits/models.py:37
#: audits/models.py:60 audits/models.py:85 audits/serializers.py:100 #: audits/models.py:60 audits/models.py:85 audits/serializers.py:100
#: authentication/models.py:50 orgs/models.py:214 perms/models/base.py:84 #: authentication/models.py:51 orgs/models.py:214 perms/models/base.py:84
#: rbac/builtin.py:106 rbac/models/rolebinding.py:40 #: rbac/builtin.py:107 rbac/models/rolebinding.py:40
#: terminal/backends/command/models.py:19 #: terminal/backends/command/models.py:20
#: terminal/backends/command/serializers.py:12 terminal/models/session.py:44 #: terminal/backends/command/serializers.py:12 terminal/models/session.py:44
#: terminal/notifications.py:91 terminal/notifications.py:139 #: terminal/notifications.py:91 terminal/notifications.py:139
#: tickets/models/comment.py:17 users/const.py:14 users/models/user.py:886 #: tickets/models/comment.py:17 users/const.py:14 users/models/user.py:886
@ -129,12 +129,12 @@ msgstr "システムユーザー"
#: assets/models/backup.py:31 assets/models/cmd_filter.py:38 #: assets/models/backup.py:31 assets/models/cmd_filter.py:38
#: assets/models/gathered_user.py:14 assets/serializers/label.py:30 #: assets/models/gathered_user.py:14 assets/serializers/label.py:30
#: assets/serializers/system_user.py:264 audits/models.py:39 #: assets/serializers/system_user.py:264 audits/models.py:39
#: perms/models/asset_permission.py:23 terminal/backends/command/models.py:20 #: perms/models/asset_permission.py:23 terminal/backends/command/models.py:21
#: terminal/backends/command/serializers.py:13 terminal/models/session.py:46 #: terminal/backends/command/serializers.py:13 terminal/models/session.py:46
#: terminal/notifications.py:90 #: terminal/notifications.py:90
#: xpack/plugins/change_auth_plan/models/asset.py:199 #: xpack/plugins/change_auth_plan/models/asset.py:199
#: xpack/plugins/change_auth_plan/serializers/asset.py:180 #: xpack/plugins/change_auth_plan/serializers/asset.py:180
#: xpack/plugins/cloud/models.py:223 #: xpack/plugins/cloud/models.py:222
msgid "Asset" msgid "Asset"
msgstr "資産" msgstr "資産"
@ -154,6 +154,7 @@ msgstr "コンマ区切り文字列の形式。* はすべて一致すること
#: acls/serializers/login_asset_acl.py:51 assets/models/base.py:176 #: acls/serializers/login_asset_acl.py:51 assets/models/base.py:176
#: assets/models/gathered_user.py:15 audits/models.py:119 #: assets/models/gathered_user.py:15 audits/models.py:119
#: authentication/forms.py:15 authentication/forms.py:17 #: authentication/forms.py:15 authentication/forms.py:17
#: authentication/models.py:69
#: authentication/templates/authentication/_msg_different_city.html:9 #: authentication/templates/authentication/_msg_different_city.html:9
#: authentication/templates/authentication/_msg_oauth_bind.html:9 #: authentication/templates/authentication/_msg_oauth_bind.html:9
#: ops/models/adhoc.py:159 users/forms/profile.py:31 users/models/user.py:659 #: ops/models/adhoc.py:159 users/forms/profile.py:31 users/models/user.py:659
@ -265,7 +266,7 @@ msgstr "アプリケーション"
#: applications/models/account.py:15 assets/models/authbook.py:20 #: applications/models/account.py:15 assets/models/authbook.py:20
#: assets/models/cmd_filter.py:42 assets/models/user.py:338 audits/models.py:40 #: assets/models/cmd_filter.py:42 assets/models/user.py:338 audits/models.py:40
#: perms/models/application_permission.py:33 #: perms/models/application_permission.py:33
#: perms/models/asset_permission.py:25 terminal/backends/command/models.py:21 #: perms/models/asset_permission.py:25 terminal/backends/command/models.py:22
#: terminal/backends/command/serializers.py:35 terminal/models/session.py:48 #: terminal/backends/command/serializers.py:35 terminal/models/session.py:48
#: xpack/plugins/change_auth_plan/models/app.py:36 #: xpack/plugins/change_auth_plan/models/app.py:36
#: xpack/plugins/change_auth_plan/models/app.py:147 #: xpack/plugins/change_auth_plan/models/app.py:147
@ -317,7 +318,7 @@ msgstr "タイプ"
msgid "Domain" msgid "Domain"
msgstr "ドメイン" msgstr "ドメイン"
#: applications/models/application.py:228 xpack/plugins/cloud/models.py:33 #: applications/models/application.py:228 xpack/plugins/cloud/models.py:32
#: xpack/plugins/cloud/serializers/account.py:58 #: xpack/plugins/cloud/serializers/account.py:58
msgid "Attrs" msgid "Attrs"
msgstr "ツールバーの" msgstr "ツールバーの"
@ -356,7 +357,7 @@ msgstr "タイプ表示"
#: common/mixins/models.py:50 ops/models/adhoc.py:39 ops/models/command.py:30 #: common/mixins/models.py:50 ops/models/adhoc.py:39 ops/models/command.py:30
#: orgs/models.py:67 orgs/models.py:217 perms/models/base.py:92 #: orgs/models.py:67 orgs/models.py:217 perms/models/base.py:92
#: users/models/group.py:18 users/models/user.py:918 #: users/models/group.py:18 users/models/user.py:918
#: xpack/plugins/cloud/models.py:125 #: xpack/plugins/cloud/models.py:124
msgid "Date created" msgid "Date created"
msgstr "作成された日付" msgstr "作成された日付"
@ -571,7 +572,7 @@ msgstr "ホスト名生"
#: assets/models/asset.py:215 assets/serializers/account.py:16 #: assets/models/asset.py:215 assets/serializers/account.py:16
#: assets/serializers/asset.py:65 perms/serializers/asset/user_permission.py:41 #: assets/serializers/asset.py:65 perms/serializers/asset/user_permission.py:41
#: xpack/plugins/cloud/models.py:107 xpack/plugins/cloud/serializers/task.py:42 #: xpack/plugins/cloud/models.py:106 xpack/plugins/cloud/serializers/task.py:42
msgid "Protocols" msgid "Protocols"
msgstr "プロトコル" msgstr "プロトコル"
@ -611,7 +612,7 @@ msgstr "ラベル"
#: orgs/models.py:219 perms/models/base.py:91 users/models/user.py:706 #: orgs/models.py:219 perms/models/base.py:91 users/models/user.py:706
#: users/serializers/group.py:33 #: users/serializers/group.py:33
#: xpack/plugins/change_auth_plan/models/base.py:48 #: xpack/plugins/change_auth_plan/models/base.py:48
#: xpack/plugins/cloud/models.py:122 xpack/plugins/gathered_user/models.py:30 #: xpack/plugins/cloud/models.py:121 xpack/plugins/gathered_user/models.py:30
msgid "Created by" msgid "Created by"
msgstr "によって作成された" msgstr "によって作成された"
@ -715,7 +716,7 @@ msgstr "トリガーモード"
#: xpack/plugins/change_auth_plan/models/base.py:201 #: xpack/plugins/change_auth_plan/models/base.py:201
#: xpack/plugins/change_auth_plan/serializers/app.py:66 #: xpack/plugins/change_auth_plan/serializers/app.py:66
#: xpack/plugins/change_auth_plan/serializers/asset.py:179 #: xpack/plugins/change_auth_plan/serializers/asset.py:179
#: xpack/plugins/cloud/models.py:179 #: xpack/plugins/cloud/models.py:178
msgid "Reason" msgid "Reason"
msgstr "理由" msgstr "理由"
@ -751,7 +752,7 @@ msgstr "失敗しました"
msgid "Connectivity" msgid "Connectivity"
msgstr "接続性" msgstr "接続性"
#: assets/models/base.py:40 #: assets/models/base.py:40 authentication/models.py:72
msgid "Date verified" msgid "Date verified"
msgstr "確認済みの日付" msgstr "確認済みの日付"
@ -953,7 +954,7 @@ msgid "Parent key"
msgstr "親キー" msgstr "親キー"
#: assets/models/node.py:559 assets/serializers/system_user.py:263 #: assets/models/node.py:559 assets/serializers/system_user.py:263
#: xpack/plugins/cloud/models.py:96 xpack/plugins/cloud/serializers/task.py:69 #: xpack/plugins/cloud/models.py:95 xpack/plugins/cloud/serializers/task.py:69
msgid "Node" msgid "Node"
msgstr "ノード" msgstr "ノード"
@ -1011,7 +1012,7 @@ msgstr "ログインモード"
msgid "SFTP Root" msgid "SFTP Root"
msgstr "SFTPルート" msgstr "SFTPルート"
#: assets/models/user.py:254 authentication/models.py:48 #: assets/models/user.py:254 authentication/models.py:49
msgid "Token" msgid "Token"
msgstr "トークン" msgstr "トークン"
@ -1426,6 +1427,7 @@ msgid "Resource"
msgstr "リソース" msgstr "リソース"
#: audits/models.py:65 audits/models.py:88 #: audits/models.py:65 audits/models.py:88
#: terminal/backends/command/serializers.py:39
msgid "Datetime" msgid "Datetime"
msgstr "時間" msgstr "時間"
@ -1480,8 +1482,8 @@ msgid "MFA"
msgstr "MFA" msgstr "MFA"
#: audits/models.py:126 terminal/models/status.py:33 #: audits/models.py:126 terminal/models/status.py:33
#: tickets/models/ticket.py:140 xpack/plugins/cloud/models.py:175 #: tickets/models/ticket.py:140 xpack/plugins/cloud/models.py:174
#: xpack/plugins/cloud/models.py:227 #: xpack/plugins/cloud/models.py:226
msgid "Status" msgid "Status"
msgstr "ステータス" msgstr "ステータス"
@ -1518,7 +1520,7 @@ msgid "Hosts display"
msgstr "ホスト表示" msgstr "ホスト表示"
#: audits/serializers.py:96 ops/models/command.py:27 #: audits/serializers.py:96 ops/models/command.py:27
#: xpack/plugins/cloud/models.py:173 #: xpack/plugins/cloud/models.py:172
msgid "Result" msgid "Result"
msgstr "結果" msgstr "結果"
@ -1562,170 +1564,174 @@ msgstr "企業微信"
msgid "DingTalk" msgid "DingTalk"
msgstr "DingTalk" msgstr "DingTalk"
#: audits/signal_handlers.py:106 #: audits/signal_handlers.py:73 authentication/models.py:76
msgid "Temporary token"
msgstr "一時的なトークン"
#: audits/signal_handlers.py:107
msgid "User and Group" msgid "User and Group"
msgstr "ユーザーとグループ" msgstr "ユーザーとグループ"
#: audits/signal_handlers.py:107 #: audits/signal_handlers.py:108
#, python-brace-format #, python-brace-format
msgid "{User} JOINED {UserGroup}" msgid "{User} JOINED {UserGroup}"
msgstr "{User} に参加 {UserGroup}" msgstr "{User} に参加 {UserGroup}"
#: audits/signal_handlers.py:108 #: audits/signal_handlers.py:109
#, python-brace-format #, python-brace-format
msgid "{User} LEFT {UserGroup}" msgid "{User} LEFT {UserGroup}"
msgstr "{User} のそばを通る {UserGroup}" msgstr "{User} のそばを通る {UserGroup}"
#: audits/signal_handlers.py:111 #: audits/signal_handlers.py:112
msgid "Asset and SystemUser" msgid "Asset and SystemUser"
msgstr "資産およびシステム・ユーザー" msgstr "資産およびシステム・ユーザー"
#: audits/signal_handlers.py:112 #: audits/signal_handlers.py:113
#, python-brace-format #, python-brace-format
msgid "{Asset} ADD {SystemUser}" msgid "{Asset} ADD {SystemUser}"
msgstr "{Asset} 追加 {SystemUser}" msgstr "{Asset} 追加 {SystemUser}"
#: audits/signal_handlers.py:113 #: audits/signal_handlers.py:114
#, python-brace-format #, python-brace-format
msgid "{Asset} REMOVE {SystemUser}" msgid "{Asset} REMOVE {SystemUser}"
msgstr "{Asset} 削除 {SystemUser}" msgstr "{Asset} 削除 {SystemUser}"
#: audits/signal_handlers.py:116 #: audits/signal_handlers.py:117
msgid "Node and Asset" msgid "Node and Asset"
msgstr "ノードと資産" msgstr "ノードと資産"
#: audits/signal_handlers.py:117 #: audits/signal_handlers.py:118
#, python-brace-format #, python-brace-format
msgid "{Node} ADD {Asset}" msgid "{Node} ADD {Asset}"
msgstr "{Node} 追加 {Asset}" msgstr "{Node} 追加 {Asset}"
#: audits/signal_handlers.py:118 #: audits/signal_handlers.py:119
#, python-brace-format #, python-brace-format
msgid "{Node} REMOVE {Asset}" msgid "{Node} REMOVE {Asset}"
msgstr "{Node} 削除 {Asset}" msgstr "{Node} 削除 {Asset}"
#: audits/signal_handlers.py:121 #: audits/signal_handlers.py:122
msgid "User asset permissions" msgid "User asset permissions"
msgstr "ユーザー資産の権限" msgstr "ユーザー資産の権限"
#: audits/signal_handlers.py:122 #: audits/signal_handlers.py:123
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} ADD {User}" msgid "{AssetPermission} ADD {User}"
msgstr "{AssetPermission} 追加 {User}" msgstr "{AssetPermission} 追加 {User}"
#: audits/signal_handlers.py:123 #: audits/signal_handlers.py:124
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} REMOVE {User}" msgid "{AssetPermission} REMOVE {User}"
msgstr "{AssetPermission} 削除 {User}" msgstr "{AssetPermission} 削除 {User}"
#: audits/signal_handlers.py:126 #: audits/signal_handlers.py:127
msgid "User group asset permissions" msgid "User group asset permissions"
msgstr "ユーザーグループの資産権限" msgstr "ユーザーグループの資産権限"
#: audits/signal_handlers.py:127 #: audits/signal_handlers.py:128
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} ADD {UserGroup}" msgid "{AssetPermission} ADD {UserGroup}"
msgstr "{AssetPermission} 追加 {UserGroup}" msgstr "{AssetPermission} 追加 {UserGroup}"
#: audits/signal_handlers.py:128 #: audits/signal_handlers.py:129
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} REMOVE {UserGroup}" msgid "{AssetPermission} REMOVE {UserGroup}"
msgstr "{AssetPermission} 削除 {UserGroup}" msgstr "{AssetPermission} 削除 {UserGroup}"
#: audits/signal_handlers.py:131 perms/models/asset_permission.py:29 #: audits/signal_handlers.py:132 perms/models/asset_permission.py:29
msgid "Asset permission" msgid "Asset permission"
msgstr "資産権限" msgstr "資産権限"
#: audits/signal_handlers.py:132 #: audits/signal_handlers.py:133
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} ADD {Asset}" msgid "{AssetPermission} ADD {Asset}"
msgstr "{AssetPermission} 追加 {Asset}" msgstr "{AssetPermission} 追加 {Asset}"
#: audits/signal_handlers.py:133 #: audits/signal_handlers.py:134
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} REMOVE {Asset}" msgid "{AssetPermission} REMOVE {Asset}"
msgstr "{AssetPermission} 削除 {Asset}" msgstr "{AssetPermission} 削除 {Asset}"
#: audits/signal_handlers.py:136 #: audits/signal_handlers.py:137
msgid "Node permission" msgid "Node permission"
msgstr "ノード権限" msgstr "ノード権限"
#: audits/signal_handlers.py:137 #: audits/signal_handlers.py:138
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} ADD {Node}" msgid "{AssetPermission} ADD {Node}"
msgstr "{AssetPermission} 追加 {Node}" msgstr "{AssetPermission} 追加 {Node}"
#: audits/signal_handlers.py:138 #: audits/signal_handlers.py:139
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} REMOVE {Node}" msgid "{AssetPermission} REMOVE {Node}"
msgstr "{AssetPermission} 削除 {Node}" msgstr "{AssetPermission} 削除 {Node}"
#: audits/signal_handlers.py:141 #: audits/signal_handlers.py:142
msgid "Asset permission and SystemUser" msgid "Asset permission and SystemUser"
msgstr "資産権限とSystemUser" msgstr "資産権限とSystemUser"
#: audits/signal_handlers.py:142 #: audits/signal_handlers.py:143
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} ADD {SystemUser}" msgid "{AssetPermission} ADD {SystemUser}"
msgstr "{AssetPermission} 追加 {SystemUser}" msgstr "{AssetPermission} 追加 {SystemUser}"
#: audits/signal_handlers.py:143 #: audits/signal_handlers.py:144
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} REMOVE {SystemUser}" msgid "{AssetPermission} REMOVE {SystemUser}"
msgstr "{AssetPermission} 削除 {SystemUser}" msgstr "{AssetPermission} 削除 {SystemUser}"
#: audits/signal_handlers.py:146 #: audits/signal_handlers.py:147
msgid "User application permissions" msgid "User application permissions"
msgstr "ユーザーアプリケーションの権限" msgstr "ユーザーアプリケーションの権限"
#: audits/signal_handlers.py:147 #: audits/signal_handlers.py:148
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} ADD {User}" msgid "{ApplicationPermission} ADD {User}"
msgstr "{ApplicationPermission} 追加 {User}" msgstr "{ApplicationPermission} 追加 {User}"
#: audits/signal_handlers.py:148 #: audits/signal_handlers.py:149
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} REMOVE {User}" msgid "{ApplicationPermission} REMOVE {User}"
msgstr "{ApplicationPermission} 削除 {User}" msgstr "{ApplicationPermission} 削除 {User}"
#: audits/signal_handlers.py:151 #: audits/signal_handlers.py:152
msgid "User group application permissions" msgid "User group application permissions"
msgstr "ユーザーグループアプリケーションの権限" msgstr "ユーザーグループアプリケーションの権限"
#: audits/signal_handlers.py:152 #: audits/signal_handlers.py:153
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} ADD {UserGroup}" msgid "{ApplicationPermission} ADD {UserGroup}"
msgstr "{ApplicationPermission} 追加 {UserGroup}" msgstr "{ApplicationPermission} 追加 {UserGroup}"
#: audits/signal_handlers.py:153 #: audits/signal_handlers.py:154
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} REMOVE {UserGroup}" msgid "{ApplicationPermission} REMOVE {UserGroup}"
msgstr "{ApplicationPermission} 削除 {UserGroup}" msgstr "{ApplicationPermission} 削除 {UserGroup}"
#: audits/signal_handlers.py:156 perms/models/application_permission.py:38 #: audits/signal_handlers.py:157 perms/models/application_permission.py:38
msgid "Application permission" msgid "Application permission"
msgstr "申請許可" msgstr "申請許可"
#: audits/signal_handlers.py:157 #: audits/signal_handlers.py:158
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} ADD {Application}" msgid "{ApplicationPermission} ADD {Application}"
msgstr "{ApplicationPermission} 追加 {Application}" msgstr "{ApplicationPermission} 追加 {Application}"
#: audits/signal_handlers.py:158 #: audits/signal_handlers.py:159
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} REMOVE {Application}" msgid "{ApplicationPermission} REMOVE {Application}"
msgstr "{ApplicationPermission} 削除 {Application}" msgstr "{ApplicationPermission} 削除 {Application}"
#: audits/signal_handlers.py:161 #: audits/signal_handlers.py:162
msgid "Application permission and SystemUser" msgid "Application permission and SystemUser"
msgstr "アプリケーション権限とSystemUser" msgstr "アプリケーション権限とSystemUser"
#: audits/signal_handlers.py:162 #: audits/signal_handlers.py:163
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} ADD {SystemUser}" msgid "{ApplicationPermission} ADD {SystemUser}"
msgstr "{ApplicationPermission} 追加 {SystemUser}" msgstr "{ApplicationPermission} 追加 {SystemUser}"
#: audits/signal_handlers.py:163 #: audits/signal_handlers.py:164
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} REMOVE {SystemUser}" msgid "{ApplicationPermission} REMOVE {SystemUser}"
msgstr "{ApplicationPermission} 削除 {SystemUser}" msgstr "{ApplicationPermission} 削除 {SystemUser}"
@ -2028,31 +2034,48 @@ msgstr "MFAタイプ ({}) が有効になっていない"
msgid "Please change your password" msgid "Please change your password"
msgstr "パスワードを変更してください" msgstr "パスワードを変更してください"
#: authentication/models.py:33 terminal/serializers/storage.py:28 #: authentication/models.py:34 terminal/serializers/storage.py:28
msgid "Access key" msgid "Access key"
msgstr "アクセスキー" msgstr "アクセスキー"
#: authentication/models.py:40 #: authentication/models.py:41
msgid "Private Token" msgid "Private Token"
msgstr "プライベートトークン" msgstr "プライベートトークン"
#: authentication/models.py:49 #: authentication/models.py:50
msgid "Expired" msgid "Expired"
msgstr "期限切れ" msgstr "期限切れ"
#: authentication/models.py:53 #: authentication/models.py:54
msgid "SSO token" msgid "SSO token"
msgstr "SSO token" msgstr "SSO token"
#: authentication/models.py:61 #: authentication/models.py:62
msgid "Connection token" msgid "Connection token"
msgstr "接続トークン" msgstr "接続トークン"
#: authentication/models.py:63 #: authentication/models.py:64
msgid "Can view connection token secret" msgid "Can view connection token secret"
msgstr "接続トークンの秘密を表示できます" msgstr "接続トークンの秘密を表示できます"
#: authentication/models.py:70 #: authentication/models.py:70
#: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:17
msgid "Secret"
msgstr "ひみつ"
#: authentication/models.py:71
msgid "Verified"
msgstr "確認済み"
#: authentication/models.py:73 perms/models/base.py:90
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:58
#: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:60
#: users/models/user.py:703
msgid "Date expired"
msgstr "期限切れの日付"
#: authentication/models.py:92
msgid "Super connection token" msgid "Super connection token"
msgstr "スーパー接続トークン" msgstr "スーパー接続トークン"
@ -2064,6 +2087,14 @@ msgstr "異なる都市ログインのリマインダー"
msgid "binding reminder" msgid "binding reminder"
msgstr "バインディングリマインダー" msgstr "バインディングリマインダー"
#: authentication/serializers/token.py:79
#: perms/serializers/application/permission.py:20
#: perms/serializers/application/permission.py:41
#: perms/serializers/asset/permission.py:19
#: perms/serializers/asset/permission.py:45 users/serializers/user.py:141
msgid "Is valid"
msgstr "有効です"
#: authentication/templates/authentication/_access_key_modal.html:6 #: authentication/templates/authentication/_access_key_modal.html:6
msgid "API key list" msgid "API key list"
msgstr "APIキーリスト" msgstr "APIキーリスト"
@ -2081,11 +2112,6 @@ msgstr "ドキュメント"
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
#: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:17
msgid "Secret"
msgstr "秘密"
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:93 terminal/notifications.py:141 #: terminal/notifications.py:93 terminal/notifications.py:141
msgid "Date" msgid "Date"
@ -2151,7 +2177,7 @@ msgstr "コードエラー"
#: authentication/templates/authentication/_msg_reset_password.html:3 #: authentication/templates/authentication/_msg_reset_password.html:3
#: authentication/templates/authentication/_msg_rest_password_success.html:2 #: authentication/templates/authentication/_msg_rest_password_success.html:2
#: authentication/templates/authentication/_msg_rest_public_key_success.html:2 #: authentication/templates/authentication/_msg_rest_public_key_success.html:2
#: jumpserver/conf.py:296 ops/tasks.py:145 ops/tasks.py:148 #: jumpserver/conf.py:298 ops/tasks.py:145 ops/tasks.py:148
#: perms/templates/perms/_msg_item_permissions_expire.html:3 #: perms/templates/perms/_msg_item_permissions_expire.html:3
#: perms/templates/perms/_msg_permed_items_expire.html:3 #: perms/templates/perms/_msg_permed_items_expire.html:3
#: users/templates/users/_msg_account_expire_reminder.html:4 #: users/templates/users/_msg_account_expire_reminder.html:4
@ -2612,11 +2638,11 @@ msgstr "特殊文字を含むべきではない"
msgid "The mobile phone number format is incorrect" msgid "The mobile phone number format is incorrect"
msgstr "携帯電話番号の形式が正しくありません" msgstr "携帯電話番号の形式が正しくありません"
#: jumpserver/conf.py:295 #: jumpserver/conf.py:297
msgid "Create account successfully" msgid "Create account successfully"
msgstr "アカウントを正常に作成" msgstr "アカウントを正常に作成"
#: jumpserver/conf.py:297 #: jumpserver/conf.py:299
msgid "Your account has been created successfully" msgid "Your account has been created successfully"
msgstr "アカウントが正常に作成されました" msgstr "アカウントが正常に作成されました"
@ -2972,13 +2998,6 @@ msgstr "クリップボードペースト"
msgid "Clipboard copy paste" msgid "Clipboard copy paste"
msgstr "クリップボードコピーペースト" msgstr "クリップボードコピーペースト"
#: perms/models/base.py:90
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:58
#: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:60
#: users/models/user.py:703
msgid "Date expired"
msgstr "期限切れの日付"
#: perms/models/base.py:94 #: perms/models/base.py:94
msgid "From ticket" msgid "From ticket"
msgstr "チケットから" msgstr "チケットから"
@ -3015,13 +3034,6 @@ msgstr "アプリケーション権限の有効期限が近づいています"
msgid "application permissions of organization {}" msgid "application permissions of organization {}"
msgstr "Organization {} のアプリケーション権限" msgstr "Organization {} のアプリケーション権限"
#: perms/serializers/application/permission.py:20
#: perms/serializers/application/permission.py:41
#: perms/serializers/asset/permission.py:19
#: perms/serializers/asset/permission.py:45 users/serializers/user.py:141
msgid "Is valid"
msgstr "有効です"
#: perms/serializers/application/permission.py:21 #: perms/serializers/application/permission.py:21
#: perms/serializers/application/permission.py:40 #: perms/serializers/application/permission.py:40
#: perms/serializers/asset/permission.py:20 #: perms/serializers/asset/permission.py:20
@ -3114,27 +3126,27 @@ msgstr "{} 少なくとも1つのシステムロール"
msgid "RBAC" msgid "RBAC"
msgstr "RBAC" msgstr "RBAC"
#: rbac/builtin.py:97 #: rbac/builtin.py:98
msgid "SystemAdmin" msgid "SystemAdmin"
msgstr "システム管理者" msgstr "システム管理者"
#: rbac/builtin.py:100 #: rbac/builtin.py:101
msgid "SystemAuditor" msgid "SystemAuditor"
msgstr "システム監査人" msgstr "システム監査人"
#: rbac/builtin.py:103 #: rbac/builtin.py:104
msgid "SystemComponent" msgid "SystemComponent"
msgstr "システムコンポーネント" msgstr "システムコンポーネント"
#: rbac/builtin.py:109 #: rbac/builtin.py:110
msgid "OrgAdmin" msgid "OrgAdmin"
msgstr "組織管理者" msgstr "組織管理者"
#: rbac/builtin.py:112 #: rbac/builtin.py:113
msgid "OrgAuditor" msgid "OrgAuditor"
msgstr "監査員を組織する" msgstr "監査員を組織する"
#: rbac/builtin.py:115 #: rbac/builtin.py:116
msgid "OrgUser" msgid "OrgUser"
msgstr "組織ユーザー" msgstr "組織ユーザー"
@ -4599,30 +4611,30 @@ msgstr "ターミナル管理"
msgid "Invalid elasticsearch config" msgid "Invalid elasticsearch config"
msgstr "無効なElasticsearch構成" msgstr "無効なElasticsearch構成"
#: terminal/backends/command/models.py:15 #: terminal/backends/command/models.py:16
msgid "Ordinary" msgid "Ordinary"
msgstr "普通" msgstr "普通"
#: terminal/backends/command/models.py:16 #: terminal/backends/command/models.py:17
msgid "Dangerous" msgid "Dangerous"
msgstr "危険" msgstr "危険"
#: terminal/backends/command/models.py:22 #: terminal/backends/command/models.py:23
msgid "Input" msgid "Input"
msgstr "入力" msgstr "入力"
#: terminal/backends/command/models.py:23 #: terminal/backends/command/models.py:24
#: terminal/backends/command/serializers.py:36 #: terminal/backends/command/serializers.py:36
msgid "Output" msgid "Output"
msgstr "出力" msgstr "出力"
#: terminal/backends/command/models.py:24 terminal/models/replay.py:9 #: terminal/backends/command/models.py:25 terminal/models/replay.py:9
#: terminal/models/sharing.py:17 terminal/models/sharing.py:64 #: terminal/models/sharing.py:17 terminal/models/sharing.py:64
#: terminal/templates/terminal/_msg_command_alert.html:10 #: terminal/templates/terminal/_msg_command_alert.html:10
msgid "Session" msgid "Session"
msgstr "セッション" msgstr "セッション"
#: terminal/backends/command/models.py:25 #: terminal/backends/command/models.py:26
#: terminal/backends/command/serializers.py:17 #: terminal/backends/command/serializers.py:17
msgid "Risk level" msgid "Risk level"
msgstr "リスクレベル" msgstr "リスクレベル"
@ -4639,7 +4651,7 @@ msgstr "リスクレベル表示"
msgid "Timestamp" msgid "Timestamp"
msgstr "タイムスタンプ" msgstr "タイムスタンプ"
#: terminal/backends/command/serializers.py:39 terminal/models/terminal.py:105 #: terminal/backends/command/serializers.py:40 terminal/models/terminal.py:105
msgid "Remote Address" msgid "Remote Address"
msgstr "リモートアドレス" msgstr "リモートアドレス"
@ -4699,18 +4711,18 @@ msgstr "MariaDB ポート"
msgid "PostgreSQL Port" msgid "PostgreSQL Port"
msgstr "PostgreSQL ポート" msgstr "PostgreSQL ポート"
#: terminal/models/endpoint.py:25 terminal/models/endpoint.py:61 #: terminal/models/endpoint.py:25 terminal/models/endpoint.py:63
#: terminal/serializers/endpoint.py:40 terminal/serializers/storage.py:37 #: terminal/serializers/endpoint.py:40 terminal/serializers/storage.py:37
#: terminal/serializers/storage.py:49 terminal/serializers/storage.py:79 #: terminal/serializers/storage.py:49 terminal/serializers/storage.py:79
#: terminal/serializers/storage.py:89 terminal/serializers/storage.py:97 #: terminal/serializers/storage.py:89 terminal/serializers/storage.py:97
msgid "Endpoint" msgid "Endpoint"
msgstr "エンドポイント" msgstr "エンドポイント"
#: terminal/models/endpoint.py:54 #: terminal/models/endpoint.py:56
msgid "IP group" msgid "IP group"
msgstr "IP グループ" msgstr "IP グループ"
#: terminal/models/endpoint.py:66 #: terminal/models/endpoint.py:68
msgid "Endpoint rule" msgid "Endpoint rule"
msgstr "エンドポイントルール" msgstr "エンドポイントルール"
@ -4931,7 +4943,7 @@ msgstr "バケット"
msgid "Secret key" msgid "Secret key"
msgstr "秘密キー" msgstr "秘密キー"
#: terminal/serializers/storage.py:64 xpack/plugins/cloud/models.py:220 #: terminal/serializers/storage.py:64 xpack/plugins/cloud/models.py:219
msgid "Region" msgid "Region"
msgstr "リージョン" msgstr "リージョン"
@ -6262,79 +6274,79 @@ msgstr "リリース済み"
msgid "Cloud center" msgid "Cloud center"
msgstr "クラウドセンター" msgstr "クラウドセンター"
#: xpack/plugins/cloud/models.py:30 #: xpack/plugins/cloud/models.py:29
msgid "Provider" msgid "Provider"
msgstr "プロバイダー" msgstr "プロバイダー"
#: xpack/plugins/cloud/models.py:34 #: xpack/plugins/cloud/models.py:33
msgid "Validity" msgid "Validity"
msgstr "有効性" msgstr "有効性"
#: xpack/plugins/cloud/models.py:39 #: xpack/plugins/cloud/models.py:38
msgid "Cloud account" msgid "Cloud account"
msgstr "クラウドアカウント" msgstr "クラウドアカウント"
#: xpack/plugins/cloud/models.py:41 #: xpack/plugins/cloud/models.py:40
msgid "Test cloud account" msgid "Test cloud account"
msgstr "クラウドアカウントのテスト" msgstr "クラウドアカウントのテスト"
#: xpack/plugins/cloud/models.py:85 xpack/plugins/cloud/serializers/task.py:66 #: xpack/plugins/cloud/models.py:84 xpack/plugins/cloud/serializers/task.py:66
msgid "Account" msgid "Account"
msgstr "アカウント" msgstr "アカウント"
#: xpack/plugins/cloud/models.py:88 xpack/plugins/cloud/serializers/task.py:37 #: xpack/plugins/cloud/models.py:87 xpack/plugins/cloud/serializers/task.py:37
msgid "Regions" msgid "Regions"
msgstr "リージョン" msgstr "リージョン"
#: xpack/plugins/cloud/models.py:91 #: xpack/plugins/cloud/models.py:90
msgid "Hostname strategy" msgid "Hostname strategy"
msgstr "ホスト名戦略" msgstr "ホスト名戦略"
#: xpack/plugins/cloud/models.py:100 xpack/plugins/cloud/serializers/task.py:67 #: xpack/plugins/cloud/models.py:99 xpack/plugins/cloud/serializers/task.py:67
msgid "Unix admin user" msgid "Unix admin user"
msgstr "Unix adminユーザー" msgstr "Unix adminユーザー"
#: xpack/plugins/cloud/models.py:104 xpack/plugins/cloud/serializers/task.py:68 #: xpack/plugins/cloud/models.py:103 xpack/plugins/cloud/serializers/task.py:68
msgid "Windows admin user" msgid "Windows admin user"
msgstr "Windows管理者" msgstr "Windows管理者"
#: xpack/plugins/cloud/models.py:110 xpack/plugins/cloud/serializers/task.py:45 #: xpack/plugins/cloud/models.py:109 xpack/plugins/cloud/serializers/task.py:45
msgid "IP network segment group" msgid "IP network segment group"
msgstr "IPネットワークセグメントグループ" msgstr "IPネットワークセグメントグループ"
#: xpack/plugins/cloud/models.py:113 xpack/plugins/cloud/serializers/task.py:71 #: xpack/plugins/cloud/models.py:112 xpack/plugins/cloud/serializers/task.py:71
msgid "Always update" msgid "Always update"
msgstr "常に更新" msgstr "常に更新"
#: xpack/plugins/cloud/models.py:119 #: xpack/plugins/cloud/models.py:118
msgid "Date last sync" msgid "Date last sync"
msgstr "最終同期日" msgstr "最終同期日"
#: xpack/plugins/cloud/models.py:130 xpack/plugins/cloud/models.py:171 #: xpack/plugins/cloud/models.py:129 xpack/plugins/cloud/models.py:170
msgid "Sync instance task" msgid "Sync instance task"
msgstr "インスタンスの同期タスク" msgstr "インスタンスの同期タスク"
#: xpack/plugins/cloud/models.py:182 xpack/plugins/cloud/models.py:230 #: xpack/plugins/cloud/models.py:181 xpack/plugins/cloud/models.py:229
msgid "Date sync" msgid "Date sync"
msgstr "日付の同期" msgstr "日付の同期"
#: xpack/plugins/cloud/models.py:186 #: xpack/plugins/cloud/models.py:185
msgid "Sync instance task execution" msgid "Sync instance task execution"
msgstr "インスタンスタスクの同期実行" msgstr "インスタンスタスクの同期実行"
#: xpack/plugins/cloud/models.py:210 #: xpack/plugins/cloud/models.py:209
msgid "Sync task" msgid "Sync task"
msgstr "同期タスク" msgstr "同期タスク"
#: xpack/plugins/cloud/models.py:214 #: xpack/plugins/cloud/models.py:213
msgid "Sync instance task history" msgid "Sync instance task history"
msgstr "インスタンスタスク履歴の同期" msgstr "インスタンスタスク履歴の同期"
#: xpack/plugins/cloud/models.py:217 #: xpack/plugins/cloud/models.py:216
msgid "Instance" msgid "Instance"
msgstr "インスタンス" msgstr "インスタンス"
#: xpack/plugins/cloud/models.py:234 #: xpack/plugins/cloud/models.py:233
msgid "Sync instance detail" msgid "Sync instance detail"
msgstr "同期インスタンスの詳細" msgstr "同期インスタンスの詳細"
@ -6688,3 +6700,26 @@ msgstr "究極のエディション"
#: xpack/plugins/license/models.py:77 #: xpack/plugins/license/models.py:77
msgid "Community edition" msgid "Community edition"
msgstr "コミュニティ版" msgstr "コミュニティ版"
#~ msgid "Inherit"
#~ msgstr "継承"
#~ msgid "Include"
#~ msgstr "含める"
#~ msgid "Exclude"
#~ msgstr "除外"
#~ msgid "DatabaseApp"
#~ msgstr "データベースの適用"
#, fuzzy
#~| msgid "Connection token"
#~ msgid "One time token"
#~ msgstr "接続トークン"
#~ msgid "JD Cloud"
#~ msgstr "京東雲"
#~ msgid "CN East-Suqian"
#~ 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:9c13775875a335e3c8dbc7f666af622c5aa12050100b15e616c210e8e3043e38 oid sha256:c5e41035cf1525f01fb773511041f0f8a3a25cdfb1fa4f1e681c6d7eec85f6b9
size 103490 size 103570

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: JumpServer 0.3.3\n" "Project-Id-Version: JumpServer 0.3.3\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-12 17:03+0800\n" "POT-Creation-Date: 2022-04-13 20:21+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"
@ -28,25 +28,25 @@ msgstr "访问控制"
#: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24 #: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24
#: orgs/models.py:65 perms/models/base.py:83 rbac/models/role.py:29 #: orgs/models.py:65 perms/models/base.py:83 rbac/models/role.py:29
#: settings/models.py:29 settings/serializers/sms.py:6 #: settings/models.py:29 settings/serializers/sms.py:6
#: terminal/models/endpoint.py:10 terminal/models/endpoint.py:53 #: terminal/models/endpoint.py:10 terminal/models/endpoint.py:55
#: terminal/models/storage.py:23 terminal/models/task.py:16 #: terminal/models/storage.py:23 terminal/models/task.py:16
#: terminal/models/terminal.py:100 users/forms/profile.py:32 #: terminal/models/terminal.py:100 users/forms/profile.py:32
#: users/models/group.py:15 users/models/user.py:661 #: users/models/group.py:15 users/models/user.py:661
#: xpack/plugins/cloud/models.py:28 #: xpack/plugins/cloud/models.py:27
msgid "Name" msgid "Name"
msgstr "名称" msgstr "名称"
#: acls/models/base.py:27 assets/models/cmd_filter.py:84 #: acls/models/base.py:27 assets/models/cmd_filter.py:84
#: assets/models/user.py:247 terminal/models/endpoint.py:56 #: assets/models/user.py:247 terminal/models/endpoint.py:58
msgid "Priority" msgid "Priority"
msgstr "优先级" msgstr "优先级"
#: acls/models/base.py:28 assets/models/cmd_filter.py:84 #: acls/models/base.py:28 assets/models/cmd_filter.py:84
#: assets/models/user.py:247 terminal/models/endpoint.py:57 #: assets/models/user.py:247 terminal/models/endpoint.py:59
msgid "1-100, the lower the value will be match first" msgid "1-100, the lower the value will be match first"
msgstr "优先级可选范围为 1-100 (数值越小越优先)" msgstr "优先级可选范围为 1-100 (数值越小越优先)"
#: acls/models/base.py:31 authentication/models.py:17 #: acls/models/base.py:31 authentication/models.py:18
#: authentication/templates/authentication/_access_key_modal.html:32 #: authentication/templates/authentication/_access_key_modal.html:32
#: perms/models/base.py:88 terminal/models/sharing.py:26 #: perms/models/base.py:88 terminal/models/sharing.py:26
msgid "Active" msgid "Active"
@ -60,12 +60,12 @@ msgstr "激活中"
#: assets/models/domain.py:64 assets/models/group.py:23 #: assets/models/domain.py:64 assets/models/group.py:23
#: assets/models/label.py:23 ops/models/adhoc.py:38 orgs/models.py:68 #: assets/models/label.py:23 ops/models/adhoc.py:38 orgs/models.py:68
#: perms/models/base.py:93 rbac/models/role.py:37 settings/models.py:34 #: perms/models/base.py:93 rbac/models/role.py:37 settings/models.py:34
#: terminal/models/endpoint.py:20 terminal/models/endpoint.py:63 #: terminal/models/endpoint.py:20 terminal/models/endpoint.py:65
#: terminal/models/storage.py:26 terminal/models/terminal.py:114 #: terminal/models/storage.py:26 terminal/models/terminal.py:114
#: tickets/models/comment.py:24 tickets/models/ticket.py:154 #: tickets/models/comment.py:24 tickets/models/ticket.py:154
#: users/models/group.py:16 users/models/user.py:698 #: users/models/group.py:16 users/models/user.py:698
#: xpack/plugins/change_auth_plan/models/base.py:44 #: xpack/plugins/change_auth_plan/models/base.py:44
#: xpack/plugins/cloud/models.py:35 xpack/plugins/cloud/models.py:116 #: xpack/plugins/cloud/models.py:34 xpack/plugins/cloud/models.py:115
#: xpack/plugins/gathered_user/models.py:26 #: xpack/plugins/gathered_user/models.py:26
msgid "Comment" msgid "Comment"
msgstr "备注" msgstr "备注"
@ -86,9 +86,9 @@ msgstr "登录复核"
#: acls/models/login_acl.py:24 acls/models/login_asset_acl.py:20 #: acls/models/login_acl.py:24 acls/models/login_asset_acl.py:20
#: assets/models/cmd_filter.py:30 assets/models/label.py:15 audits/models.py:37 #: assets/models/cmd_filter.py:30 assets/models/label.py:15 audits/models.py:37
#: audits/models.py:60 audits/models.py:85 audits/serializers.py:100 #: audits/models.py:60 audits/models.py:85 audits/serializers.py:100
#: authentication/models.py:50 orgs/models.py:214 perms/models/base.py:84 #: authentication/models.py:51 orgs/models.py:214 perms/models/base.py:84
#: rbac/builtin.py:106 rbac/models/rolebinding.py:40 #: rbac/builtin.py:107 rbac/models/rolebinding.py:40
#: terminal/backends/command/models.py:19 #: terminal/backends/command/models.py:20
#: terminal/backends/command/serializers.py:12 terminal/models/session.py:44 #: terminal/backends/command/serializers.py:12 terminal/models/session.py:44
#: terminal/notifications.py:91 terminal/notifications.py:139 #: terminal/notifications.py:91 terminal/notifications.py:139
#: tickets/models/comment.py:17 users/const.py:14 users/models/user.py:886 #: tickets/models/comment.py:17 users/const.py:14 users/models/user.py:886
@ -128,12 +128,12 @@ msgstr "系统用户"
#: assets/models/backup.py:31 assets/models/cmd_filter.py:38 #: assets/models/backup.py:31 assets/models/cmd_filter.py:38
#: assets/models/gathered_user.py:14 assets/serializers/label.py:30 #: assets/models/gathered_user.py:14 assets/serializers/label.py:30
#: assets/serializers/system_user.py:264 audits/models.py:39 #: assets/serializers/system_user.py:264 audits/models.py:39
#: perms/models/asset_permission.py:23 terminal/backends/command/models.py:20 #: perms/models/asset_permission.py:23 terminal/backends/command/models.py:21
#: terminal/backends/command/serializers.py:13 terminal/models/session.py:46 #: terminal/backends/command/serializers.py:13 terminal/models/session.py:46
#: terminal/notifications.py:90 #: terminal/notifications.py:90
#: xpack/plugins/change_auth_plan/models/asset.py:199 #: xpack/plugins/change_auth_plan/models/asset.py:199
#: xpack/plugins/change_auth_plan/serializers/asset.py:180 #: xpack/plugins/change_auth_plan/serializers/asset.py:180
#: xpack/plugins/cloud/models.py:223 #: xpack/plugins/cloud/models.py:222
msgid "Asset" msgid "Asset"
msgstr "资产" msgstr "资产"
@ -153,6 +153,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. "
#: acls/serializers/login_asset_acl.py:51 assets/models/base.py:176 #: acls/serializers/login_asset_acl.py:51 assets/models/base.py:176
#: assets/models/gathered_user.py:15 audits/models.py:119 #: assets/models/gathered_user.py:15 audits/models.py:119
#: authentication/forms.py:15 authentication/forms.py:17 #: authentication/forms.py:15 authentication/forms.py:17
#: authentication/models.py:69
#: authentication/templates/authentication/_msg_different_city.html:9 #: authentication/templates/authentication/_msg_different_city.html:9
#: authentication/templates/authentication/_msg_oauth_bind.html:9 #: authentication/templates/authentication/_msg_oauth_bind.html:9
#: ops/models/adhoc.py:159 users/forms/profile.py:31 users/models/user.py:659 #: ops/models/adhoc.py:159 users/forms/profile.py:31 users/models/user.py:659
@ -260,7 +261,7 @@ msgstr "应用程序"
#: applications/models/account.py:15 assets/models/authbook.py:20 #: applications/models/account.py:15 assets/models/authbook.py:20
#: assets/models/cmd_filter.py:42 assets/models/user.py:338 audits/models.py:40 #: assets/models/cmd_filter.py:42 assets/models/user.py:338 audits/models.py:40
#: perms/models/application_permission.py:33 #: perms/models/application_permission.py:33
#: perms/models/asset_permission.py:25 terminal/backends/command/models.py:21 #: perms/models/asset_permission.py:25 terminal/backends/command/models.py:22
#: terminal/backends/command/serializers.py:35 terminal/models/session.py:48 #: terminal/backends/command/serializers.py:35 terminal/models/session.py:48
#: xpack/plugins/change_auth_plan/models/app.py:36 #: xpack/plugins/change_auth_plan/models/app.py:36
#: xpack/plugins/change_auth_plan/models/app.py:147 #: xpack/plugins/change_auth_plan/models/app.py:147
@ -312,7 +313,7 @@ msgstr "类型"
msgid "Domain" msgid "Domain"
msgstr "网域" msgstr "网域"
#: applications/models/application.py:228 xpack/plugins/cloud/models.py:33 #: applications/models/application.py:228 xpack/plugins/cloud/models.py:32
#: xpack/plugins/cloud/serializers/account.py:58 #: xpack/plugins/cloud/serializers/account.py:58
msgid "Attrs" msgid "Attrs"
msgstr "属性" msgstr "属性"
@ -351,7 +352,7 @@ msgstr "类型名称"
#: common/mixins/models.py:50 ops/models/adhoc.py:39 ops/models/command.py:30 #: common/mixins/models.py:50 ops/models/adhoc.py:39 ops/models/command.py:30
#: orgs/models.py:67 orgs/models.py:217 perms/models/base.py:92 #: orgs/models.py:67 orgs/models.py:217 perms/models/base.py:92
#: users/models/group.py:18 users/models/user.py:918 #: users/models/group.py:18 users/models/user.py:918
#: xpack/plugins/cloud/models.py:125 #: xpack/plugins/cloud/models.py:124
msgid "Date created" msgid "Date created"
msgstr "创建日期" msgstr "创建日期"
@ -566,7 +567,7 @@ msgstr "主机名原始"
#: assets/models/asset.py:215 assets/serializers/account.py:16 #: assets/models/asset.py:215 assets/serializers/account.py:16
#: assets/serializers/asset.py:65 perms/serializers/asset/user_permission.py:41 #: assets/serializers/asset.py:65 perms/serializers/asset/user_permission.py:41
#: xpack/plugins/cloud/models.py:107 xpack/plugins/cloud/serializers/task.py:42 #: xpack/plugins/cloud/models.py:106 xpack/plugins/cloud/serializers/task.py:42
msgid "Protocols" msgid "Protocols"
msgstr "协议组" msgstr "协议组"
@ -606,7 +607,7 @@ msgstr "标签管理"
#: orgs/models.py:219 perms/models/base.py:91 users/models/user.py:706 #: orgs/models.py:219 perms/models/base.py:91 users/models/user.py:706
#: users/serializers/group.py:33 #: users/serializers/group.py:33
#: xpack/plugins/change_auth_plan/models/base.py:48 #: xpack/plugins/change_auth_plan/models/base.py:48
#: xpack/plugins/cloud/models.py:122 xpack/plugins/gathered_user/models.py:30 #: xpack/plugins/cloud/models.py:121 xpack/plugins/gathered_user/models.py:30
msgid "Created by" msgid "Created by"
msgstr "创建者" msgstr "创建者"
@ -710,7 +711,7 @@ msgstr "触发模式"
#: xpack/plugins/change_auth_plan/models/base.py:201 #: xpack/plugins/change_auth_plan/models/base.py:201
#: xpack/plugins/change_auth_plan/serializers/app.py:66 #: xpack/plugins/change_auth_plan/serializers/app.py:66
#: xpack/plugins/change_auth_plan/serializers/asset.py:179 #: xpack/plugins/change_auth_plan/serializers/asset.py:179
#: xpack/plugins/cloud/models.py:179 #: xpack/plugins/cloud/models.py:178
msgid "Reason" msgid "Reason"
msgstr "原因" msgstr "原因"
@ -746,7 +747,7 @@ msgstr "失败"
msgid "Connectivity" msgid "Connectivity"
msgstr "可连接性" msgstr "可连接性"
#: assets/models/base.py:40 #: assets/models/base.py:40 authentication/models.py:72
msgid "Date verified" msgid "Date verified"
msgstr "校验日期" msgstr "校验日期"
@ -948,7 +949,7 @@ msgid "Parent key"
msgstr "ssh私钥" msgstr "ssh私钥"
#: assets/models/node.py:559 assets/serializers/system_user.py:263 #: assets/models/node.py:559 assets/serializers/system_user.py:263
#: xpack/plugins/cloud/models.py:96 xpack/plugins/cloud/serializers/task.py:69 #: xpack/plugins/cloud/models.py:95 xpack/plugins/cloud/serializers/task.py:69
msgid "Node" msgid "Node"
msgstr "节点" msgstr "节点"
@ -1006,7 +1007,7 @@ msgstr "认证方式"
msgid "SFTP Root" msgid "SFTP Root"
msgstr "SFTP根路径" msgstr "SFTP根路径"
#: assets/models/user.py:254 authentication/models.py:48 #: assets/models/user.py:254 authentication/models.py:49
msgid "Token" msgid "Token"
msgstr "Token" msgstr "Token"
@ -1414,6 +1415,7 @@ msgid "Resource"
msgstr "资源" msgstr "资源"
#: audits/models.py:65 audits/models.py:88 #: audits/models.py:65 audits/models.py:88
#: terminal/backends/command/serializers.py:39
msgid "Datetime" msgid "Datetime"
msgstr "日期" msgstr "日期"
@ -1468,8 +1470,8 @@ msgid "MFA"
msgstr "MFA" msgstr "MFA"
#: audits/models.py:126 terminal/models/status.py:33 #: audits/models.py:126 terminal/models/status.py:33
#: tickets/models/ticket.py:140 xpack/plugins/cloud/models.py:175 #: tickets/models/ticket.py:140 xpack/plugins/cloud/models.py:174
#: xpack/plugins/cloud/models.py:227 #: xpack/plugins/cloud/models.py:226
msgid "Status" msgid "Status"
msgstr "状态" msgstr "状态"
@ -1506,7 +1508,7 @@ msgid "Hosts display"
msgstr "主机名称" msgstr "主机名称"
#: audits/serializers.py:96 ops/models/command.py:27 #: audits/serializers.py:96 ops/models/command.py:27
#: xpack/plugins/cloud/models.py:173 #: xpack/plugins/cloud/models.py:172
msgid "Result" msgid "Result"
msgstr "结果" msgstr "结果"
@ -1550,170 +1552,174 @@ msgstr "企业微信"
msgid "DingTalk" msgid "DingTalk"
msgstr "钉钉" msgstr "钉钉"
#: audits/signal_handlers.py:106 #: audits/signal_handlers.py:73 authentication/models.py:76
msgid "Temporary token"
msgstr "临时 Token"
#: audits/signal_handlers.py:107
msgid "User and Group" msgid "User and Group"
msgstr "用户与用户组" msgstr "用户与用户组"
#: audits/signal_handlers.py:107 #: audits/signal_handlers.py:108
#, python-brace-format #, python-brace-format
msgid "{User} JOINED {UserGroup}" msgid "{User} JOINED {UserGroup}"
msgstr "{User} 加入 {UserGroup}" msgstr "{User} 加入 {UserGroup}"
#: audits/signal_handlers.py:108 #: audits/signal_handlers.py:109
#, python-brace-format #, python-brace-format
msgid "{User} LEFT {UserGroup}" msgid "{User} LEFT {UserGroup}"
msgstr "{User} 离开 {UserGroup}" msgstr "{User} 离开 {UserGroup}"
#: audits/signal_handlers.py:111 #: audits/signal_handlers.py:112
msgid "Asset and SystemUser" msgid "Asset and SystemUser"
msgstr "资产与系统用户" msgstr "资产与系统用户"
#: audits/signal_handlers.py:112 #: audits/signal_handlers.py:113
#, python-brace-format #, python-brace-format
msgid "{Asset} ADD {SystemUser}" msgid "{Asset} ADD {SystemUser}"
msgstr "{Asset} 添加 {SystemUser}" msgstr "{Asset} 添加 {SystemUser}"
#: audits/signal_handlers.py:113 #: audits/signal_handlers.py:114
#, python-brace-format #, python-brace-format
msgid "{Asset} REMOVE {SystemUser}" msgid "{Asset} REMOVE {SystemUser}"
msgstr "{Asset} 移除 {SystemUser}" msgstr "{Asset} 移除 {SystemUser}"
#: audits/signal_handlers.py:116 #: audits/signal_handlers.py:117
msgid "Node and Asset" msgid "Node and Asset"
msgstr "节点与资产" msgstr "节点与资产"
#: audits/signal_handlers.py:117 #: audits/signal_handlers.py:118
#, python-brace-format #, python-brace-format
msgid "{Node} ADD {Asset}" msgid "{Node} ADD {Asset}"
msgstr "{Node} 添加 {Asset}" msgstr "{Node} 添加 {Asset}"
#: audits/signal_handlers.py:118 #: audits/signal_handlers.py:119
#, python-brace-format #, python-brace-format
msgid "{Node} REMOVE {Asset}" msgid "{Node} REMOVE {Asset}"
msgstr "{Node} 移除 {Asset}" msgstr "{Node} 移除 {Asset}"
#: audits/signal_handlers.py:121 #: audits/signal_handlers.py:122
msgid "User asset permissions" msgid "User asset permissions"
msgstr "用户资产授权" msgstr "用户资产授权"
#: audits/signal_handlers.py:122 #: audits/signal_handlers.py:123
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} ADD {User}" msgid "{AssetPermission} ADD {User}"
msgstr "{AssetPermission} 添加 {User}" msgstr "{AssetPermission} 添加 {User}"
#: audits/signal_handlers.py:123 #: audits/signal_handlers.py:124
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} REMOVE {User}" msgid "{AssetPermission} REMOVE {User}"
msgstr "{AssetPermission} 移除 {User}" msgstr "{AssetPermission} 移除 {User}"
#: audits/signal_handlers.py:126 #: audits/signal_handlers.py:127
msgid "User group asset permissions" msgid "User group asset permissions"
msgstr "用户组资产授权" msgstr "用户组资产授权"
#: audits/signal_handlers.py:127 #: audits/signal_handlers.py:128
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} ADD {UserGroup}" msgid "{AssetPermission} ADD {UserGroup}"
msgstr "{AssetPermission} 添加 {UserGroup}" msgstr "{AssetPermission} 添加 {UserGroup}"
#: audits/signal_handlers.py:128 #: audits/signal_handlers.py:129
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} REMOVE {UserGroup}" msgid "{AssetPermission} REMOVE {UserGroup}"
msgstr "{AssetPermission} 移除 {UserGroup}" msgstr "{AssetPermission} 移除 {UserGroup}"
#: audits/signal_handlers.py:131 perms/models/asset_permission.py:29 #: audits/signal_handlers.py:132 perms/models/asset_permission.py:29
msgid "Asset permission" msgid "Asset permission"
msgstr "资产授权" msgstr "资产授权"
#: audits/signal_handlers.py:132 #: audits/signal_handlers.py:133
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} ADD {Asset}" msgid "{AssetPermission} ADD {Asset}"
msgstr "{AssetPermission} 添加 {Asset}" msgstr "{AssetPermission} 添加 {Asset}"
#: audits/signal_handlers.py:133 #: audits/signal_handlers.py:134
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} REMOVE {Asset}" msgid "{AssetPermission} REMOVE {Asset}"
msgstr "{AssetPermission} 移除 {Asset}" msgstr "{AssetPermission} 移除 {Asset}"
#: audits/signal_handlers.py:136 #: audits/signal_handlers.py:137
msgid "Node permission" msgid "Node permission"
msgstr "节点授权" msgstr "节点授权"
#: audits/signal_handlers.py:137 #: audits/signal_handlers.py:138
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} ADD {Node}" msgid "{AssetPermission} ADD {Node}"
msgstr "{AssetPermission} 添加 {Node}" msgstr "{AssetPermission} 添加 {Node}"
#: audits/signal_handlers.py:138 #: audits/signal_handlers.py:139
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} REMOVE {Node}" msgid "{AssetPermission} REMOVE {Node}"
msgstr "{AssetPermission} 移除 {Node}" msgstr "{AssetPermission} 移除 {Node}"
#: audits/signal_handlers.py:141 #: audits/signal_handlers.py:142
msgid "Asset permission and SystemUser" msgid "Asset permission and SystemUser"
msgstr "资产授权与系统用户" msgstr "资产授权与系统用户"
#: audits/signal_handlers.py:142 #: audits/signal_handlers.py:143
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} ADD {SystemUser}" msgid "{AssetPermission} ADD {SystemUser}"
msgstr "{AssetPermission} 添加 {SystemUser}" msgstr "{AssetPermission} 添加 {SystemUser}"
#: audits/signal_handlers.py:143 #: audits/signal_handlers.py:144
#, python-brace-format #, python-brace-format
msgid "{AssetPermission} REMOVE {SystemUser}" msgid "{AssetPermission} REMOVE {SystemUser}"
msgstr "{AssetPermission} 移除 {SystemUser}" msgstr "{AssetPermission} 移除 {SystemUser}"
#: audits/signal_handlers.py:146 #: audits/signal_handlers.py:147
msgid "User application permissions" msgid "User application permissions"
msgstr "用户应用授权" msgstr "用户应用授权"
#: audits/signal_handlers.py:147 #: audits/signal_handlers.py:148
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} ADD {User}" msgid "{ApplicationPermission} ADD {User}"
msgstr "{ApplicationPermission} 添加 {User}" msgstr "{ApplicationPermission} 添加 {User}"
#: audits/signal_handlers.py:148 #: audits/signal_handlers.py:149
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} REMOVE {User}" msgid "{ApplicationPermission} REMOVE {User}"
msgstr "{ApplicationPermission} 移除 {User}" msgstr "{ApplicationPermission} 移除 {User}"
#: audits/signal_handlers.py:151 #: audits/signal_handlers.py:152
msgid "User group application permissions" msgid "User group application permissions"
msgstr "用户组应用授权" msgstr "用户组应用授权"
#: audits/signal_handlers.py:152 #: audits/signal_handlers.py:153
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} ADD {UserGroup}" msgid "{ApplicationPermission} ADD {UserGroup}"
msgstr "{ApplicationPermission} 添加 {UserGroup}" msgstr "{ApplicationPermission} 添加 {UserGroup}"
#: audits/signal_handlers.py:153 #: audits/signal_handlers.py:154
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} REMOVE {UserGroup}" msgid "{ApplicationPermission} REMOVE {UserGroup}"
msgstr "{ApplicationPermission} 移除 {UserGroup}" msgstr "{ApplicationPermission} 移除 {UserGroup}"
#: audits/signal_handlers.py:156 perms/models/application_permission.py:38 #: audits/signal_handlers.py:157 perms/models/application_permission.py:38
msgid "Application permission" msgid "Application permission"
msgstr "应用授权" msgstr "应用授权"
#: audits/signal_handlers.py:157 #: audits/signal_handlers.py:158
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} ADD {Application}" msgid "{ApplicationPermission} ADD {Application}"
msgstr "{ApplicationPermission} 添加 {Application}" msgstr "{ApplicationPermission} 添加 {Application}"
#: audits/signal_handlers.py:158 #: audits/signal_handlers.py:159
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} REMOVE {Application}" msgid "{ApplicationPermission} REMOVE {Application}"
msgstr "{ApplicationPermission} 移除 {Application}" msgstr "{ApplicationPermission} 移除 {Application}"
#: audits/signal_handlers.py:161 #: audits/signal_handlers.py:162
msgid "Application permission and SystemUser" msgid "Application permission and SystemUser"
msgstr "应用授权与系统用户" msgstr "应用授权与系统用户"
#: audits/signal_handlers.py:162 #: audits/signal_handlers.py:163
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} ADD {SystemUser}" msgid "{ApplicationPermission} ADD {SystemUser}"
msgstr "{ApplicationPermission} 添加 {SystemUser}" msgstr "{ApplicationPermission} 添加 {SystemUser}"
#: audits/signal_handlers.py:163 #: audits/signal_handlers.py:164
#, python-brace-format #, python-brace-format
msgid "{ApplicationPermission} REMOVE {SystemUser}" msgid "{ApplicationPermission} REMOVE {SystemUser}"
msgstr "{ApplicationPermission} 移除 {SystemUser}" msgstr "{ApplicationPermission} 移除 {SystemUser}"
@ -2007,31 +2013,48 @@ msgstr "该 MFA ({}) 方式没有启用"
msgid "Please change your password" msgid "Please change your password"
msgstr "请修改密码" msgstr "请修改密码"
#: authentication/models.py:33 terminal/serializers/storage.py:28 #: authentication/models.py:34 terminal/serializers/storage.py:28
msgid "Access key" msgid "Access key"
msgstr "API key" msgstr "API key"
#: authentication/models.py:40 #: authentication/models.py:41
msgid "Private Token" msgid "Private Token"
msgstr "SSH密钥" msgstr "SSH密钥"
#: authentication/models.py:49 #: authentication/models.py:50
msgid "Expired" msgid "Expired"
msgstr "过期时间" msgstr "过期时间"
#: authentication/models.py:53 #: authentication/models.py:54
msgid "SSO token" msgid "SSO token"
msgstr "SSO token" msgstr "SSO token"
#: authentication/models.py:61 #: authentication/models.py:62
msgid "Connection token" msgid "Connection token"
msgstr "连接令牌" msgstr "连接令牌"
#: authentication/models.py:63 #: authentication/models.py:64
msgid "Can view connection token secret" msgid "Can view connection token secret"
msgstr "可以查看连接令牌密文" msgstr "可以查看连接令牌密文"
#: authentication/models.py:70 #: authentication/models.py:70
#: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:17
msgid "Secret"
msgstr "密钥"
#: authentication/models.py:71
msgid "Verified"
msgstr "已校验"
#: authentication/models.py:73 perms/models/base.py:90
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:58
#: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:60
#: users/models/user.py:703
msgid "Date expired"
msgstr "失效日期"
#: authentication/models.py:92
msgid "Super connection token" msgid "Super connection token"
msgstr "超级连接令牌" msgstr "超级连接令牌"
@ -2043,6 +2066,14 @@ msgstr "异地登录提醒"
msgid "binding reminder" msgid "binding reminder"
msgstr "绑定提醒" msgstr "绑定提醒"
#: authentication/serializers/token.py:79
#: perms/serializers/application/permission.py:20
#: perms/serializers/application/permission.py:41
#: perms/serializers/asset/permission.py:19
#: perms/serializers/asset/permission.py:45 users/serializers/user.py:141
msgid "Is valid"
msgstr "账号是否有效"
#: authentication/templates/authentication/_access_key_modal.html:6 #: authentication/templates/authentication/_access_key_modal.html:6
msgid "API key list" msgid "API key list"
msgstr "API Key列表" msgstr "API Key列表"
@ -2060,11 +2091,6 @@ msgstr "文档"
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
#: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:17
msgid "Secret"
msgstr "密钥"
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:93 terminal/notifications.py:141 #: terminal/notifications.py:93 terminal/notifications.py:141
msgid "Date" msgid "Date"
@ -2130,7 +2156,7 @@ msgstr "代码错误"
#: authentication/templates/authentication/_msg_reset_password.html:3 #: authentication/templates/authentication/_msg_reset_password.html:3
#: authentication/templates/authentication/_msg_rest_password_success.html:2 #: authentication/templates/authentication/_msg_rest_password_success.html:2
#: authentication/templates/authentication/_msg_rest_public_key_success.html:2 #: authentication/templates/authentication/_msg_rest_public_key_success.html:2
#: jumpserver/conf.py:296 ops/tasks.py:145 ops/tasks.py:148 #: jumpserver/conf.py:298 ops/tasks.py:145 ops/tasks.py:148
#: perms/templates/perms/_msg_item_permissions_expire.html:3 #: perms/templates/perms/_msg_item_permissions_expire.html:3
#: perms/templates/perms/_msg_permed_items_expire.html:3 #: perms/templates/perms/_msg_permed_items_expire.html:3
#: users/templates/users/_msg_account_expire_reminder.html:4 #: users/templates/users/_msg_account_expire_reminder.html:4
@ -2582,11 +2608,11 @@ msgstr "不能包含特殊字符"
msgid "The mobile phone number format is incorrect" msgid "The mobile phone number format is incorrect"
msgstr "手机号格式不正确" msgstr "手机号格式不正确"
#: jumpserver/conf.py:295 #: jumpserver/conf.py:297
msgid "Create account successfully" msgid "Create account successfully"
msgstr "创建账号成功" msgstr "创建账号成功"
#: jumpserver/conf.py:297 #: jumpserver/conf.py:299
msgid "Your account has been created successfully" msgid "Your account has been created successfully"
msgstr "你的账号已创建成功" msgstr "你的账号已创建成功"
@ -2937,13 +2963,6 @@ msgstr "剪贴板粘贴"
msgid "Clipboard copy paste" msgid "Clipboard copy paste"
msgstr "剪贴板复制粘贴" msgstr "剪贴板复制粘贴"
#: perms/models/base.py:90
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:58
#: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:60
#: users/models/user.py:703
msgid "Date expired"
msgstr "失效日期"
#: perms/models/base.py:94 #: perms/models/base.py:94
msgid "From ticket" msgid "From ticket"
msgstr "来自工单" msgstr "来自工单"
@ -2980,13 +2999,6 @@ msgstr "应用授权规则即将过期"
msgid "application permissions of organization {}" msgid "application permissions of organization {}"
msgstr "组织 ({}) 的应用授权" msgstr "组织 ({}) 的应用授权"
#: perms/serializers/application/permission.py:20
#: perms/serializers/application/permission.py:41
#: perms/serializers/asset/permission.py:19
#: perms/serializers/asset/permission.py:45 users/serializers/user.py:141
msgid "Is valid"
msgstr "账号是否有效"
#: perms/serializers/application/permission.py:21 #: perms/serializers/application/permission.py:21
#: perms/serializers/application/permission.py:40 #: perms/serializers/application/permission.py:40
#: perms/serializers/asset/permission.py:20 #: perms/serializers/asset/permission.py:20
@ -3077,27 +3089,27 @@ msgstr "{} 至少有一个系统角色"
msgid "RBAC" msgid "RBAC"
msgstr "RBAC" msgstr "RBAC"
#: rbac/builtin.py:97 #: rbac/builtin.py:98
msgid "SystemAdmin" msgid "SystemAdmin"
msgstr "系统管理员" msgstr "系统管理员"
#: rbac/builtin.py:100 #: rbac/builtin.py:101
msgid "SystemAuditor" msgid "SystemAuditor"
msgstr "系统审计员" msgstr "系统审计员"
#: rbac/builtin.py:103 #: rbac/builtin.py:104
msgid "SystemComponent" msgid "SystemComponent"
msgstr "系统组件" msgstr "系统组件"
#: rbac/builtin.py:109 #: rbac/builtin.py:110
msgid "OrgAdmin" msgid "OrgAdmin"
msgstr "组织管理员" msgstr "组织管理员"
#: rbac/builtin.py:112 #: rbac/builtin.py:113
msgid "OrgAuditor" msgid "OrgAuditor"
msgstr "组织审计员" msgstr "组织审计员"
#: rbac/builtin.py:115 #: rbac/builtin.py:116
msgid "OrgUser" msgid "OrgUser"
msgstr "组织用户" msgstr "组织用户"
@ -4528,30 +4540,30 @@ msgstr "终端管理"
msgid "Invalid elasticsearch config" msgid "Invalid elasticsearch config"
msgstr "无效的 Elasticsearch 配置" msgstr "无效的 Elasticsearch 配置"
#: terminal/backends/command/models.py:15 #: terminal/backends/command/models.py:16
msgid "Ordinary" msgid "Ordinary"
msgstr "普通" msgstr "普通"
#: terminal/backends/command/models.py:16 #: terminal/backends/command/models.py:17
msgid "Dangerous" msgid "Dangerous"
msgstr "危险" msgstr "危险"
#: terminal/backends/command/models.py:22 #: terminal/backends/command/models.py:23
msgid "Input" msgid "Input"
msgstr "输入" msgstr "输入"
#: terminal/backends/command/models.py:23 #: terminal/backends/command/models.py:24
#: terminal/backends/command/serializers.py:36 #: terminal/backends/command/serializers.py:36
msgid "Output" msgid "Output"
msgstr "输出" msgstr "输出"
#: terminal/backends/command/models.py:24 terminal/models/replay.py:9 #: terminal/backends/command/models.py:25 terminal/models/replay.py:9
#: terminal/models/sharing.py:17 terminal/models/sharing.py:64 #: terminal/models/sharing.py:17 terminal/models/sharing.py:64
#: terminal/templates/terminal/_msg_command_alert.html:10 #: terminal/templates/terminal/_msg_command_alert.html:10
msgid "Session" msgid "Session"
msgstr "会话" msgstr "会话"
#: terminal/backends/command/models.py:25 #: terminal/backends/command/models.py:26
#: terminal/backends/command/serializers.py:17 #: terminal/backends/command/serializers.py:17
msgid "Risk level" msgid "Risk level"
msgstr "风险等级" msgstr "风险等级"
@ -4568,7 +4580,7 @@ msgstr "风险等级名称"
msgid "Timestamp" msgid "Timestamp"
msgstr "时间戳" msgstr "时间戳"
#: terminal/backends/command/serializers.py:39 terminal/models/terminal.py:105 #: terminal/backends/command/serializers.py:40 terminal/models/terminal.py:105
msgid "Remote Address" msgid "Remote Address"
msgstr "远端地址" msgstr "远端地址"
@ -4628,18 +4640,18 @@ msgstr "MariaDB 端口"
msgid "PostgreSQL Port" msgid "PostgreSQL Port"
msgstr "PostgreSQL 端口" msgstr "PostgreSQL 端口"
#: terminal/models/endpoint.py:25 terminal/models/endpoint.py:61 #: terminal/models/endpoint.py:25 terminal/models/endpoint.py:63
#: terminal/serializers/endpoint.py:40 terminal/serializers/storage.py:37 #: terminal/serializers/endpoint.py:40 terminal/serializers/storage.py:37
#: terminal/serializers/storage.py:49 terminal/serializers/storage.py:79 #: terminal/serializers/storage.py:49 terminal/serializers/storage.py:79
#: terminal/serializers/storage.py:89 terminal/serializers/storage.py:97 #: terminal/serializers/storage.py:89 terminal/serializers/storage.py:97
msgid "Endpoint" msgid "Endpoint"
msgstr "端点" msgstr "端点"
#: terminal/models/endpoint.py:54 #: terminal/models/endpoint.py:56
msgid "IP group" msgid "IP group"
msgstr "IP 组" msgstr "IP 组"
#: terminal/models/endpoint.py:66 #: terminal/models/endpoint.py:68
msgid "Endpoint rule" msgid "Endpoint rule"
msgstr "端点规则" msgstr "端点规则"
@ -4860,7 +4872,7 @@ msgstr "桶名称"
msgid "Secret key" msgid "Secret key"
msgstr "密钥" msgstr "密钥"
#: terminal/serializers/storage.py:64 xpack/plugins/cloud/models.py:220 #: terminal/serializers/storage.py:64 xpack/plugins/cloud/models.py:219
msgid "Region" msgid "Region"
msgstr "地域" msgstr "地域"
@ -6174,79 +6186,79 @@ msgstr "已释放"
msgid "Cloud center" msgid "Cloud center"
msgstr "云管中心" msgstr "云管中心"
#: xpack/plugins/cloud/models.py:30 #: xpack/plugins/cloud/models.py:29
msgid "Provider" msgid "Provider"
msgstr "云服务商" msgstr "云服务商"
#: xpack/plugins/cloud/models.py:34 #: xpack/plugins/cloud/models.py:33
msgid "Validity" msgid "Validity"
msgstr "有效" msgstr "有效"
#: xpack/plugins/cloud/models.py:39 #: xpack/plugins/cloud/models.py:38
msgid "Cloud account" msgid "Cloud account"
msgstr "云账号" msgstr "云账号"
#: xpack/plugins/cloud/models.py:41 #: xpack/plugins/cloud/models.py:40
msgid "Test cloud account" msgid "Test cloud account"
msgstr "测试云账号" msgstr "测试云账号"
#: xpack/plugins/cloud/models.py:85 xpack/plugins/cloud/serializers/task.py:66 #: xpack/plugins/cloud/models.py:84 xpack/plugins/cloud/serializers/task.py:66
msgid "Account" msgid "Account"
msgstr "账号" msgstr "账号"
#: xpack/plugins/cloud/models.py:88 xpack/plugins/cloud/serializers/task.py:37 #: xpack/plugins/cloud/models.py:87 xpack/plugins/cloud/serializers/task.py:37
msgid "Regions" msgid "Regions"
msgstr "地域" msgstr "地域"
#: xpack/plugins/cloud/models.py:91 #: xpack/plugins/cloud/models.py:90
msgid "Hostname strategy" msgid "Hostname strategy"
msgstr "主机名策略" msgstr "主机名策略"
#: xpack/plugins/cloud/models.py:100 xpack/plugins/cloud/serializers/task.py:67 #: xpack/plugins/cloud/models.py:99 xpack/plugins/cloud/serializers/task.py:67
msgid "Unix admin user" msgid "Unix admin user"
msgstr "Unix 管理员" msgstr "Unix 管理员"
#: xpack/plugins/cloud/models.py:104 xpack/plugins/cloud/serializers/task.py:68 #: xpack/plugins/cloud/models.py:103 xpack/plugins/cloud/serializers/task.py:68
msgid "Windows admin user" msgid "Windows admin user"
msgstr "Windows 管理员" msgstr "Windows 管理员"
#: xpack/plugins/cloud/models.py:110 xpack/plugins/cloud/serializers/task.py:45 #: xpack/plugins/cloud/models.py:109 xpack/plugins/cloud/serializers/task.py:45
msgid "IP network segment group" msgid "IP network segment group"
msgstr "IP网段组" msgstr "IP网段组"
#: xpack/plugins/cloud/models.py:113 xpack/plugins/cloud/serializers/task.py:71 #: xpack/plugins/cloud/models.py:112 xpack/plugins/cloud/serializers/task.py:71
msgid "Always update" msgid "Always update"
msgstr "总是更新" msgstr "总是更新"
#: xpack/plugins/cloud/models.py:119 #: xpack/plugins/cloud/models.py:118
msgid "Date last sync" msgid "Date last sync"
msgstr "最后同步日期" msgstr "最后同步日期"
#: xpack/plugins/cloud/models.py:130 xpack/plugins/cloud/models.py:171 #: xpack/plugins/cloud/models.py:129 xpack/plugins/cloud/models.py:170
msgid "Sync instance task" msgid "Sync instance task"
msgstr "同步实例任务" msgstr "同步实例任务"
#: xpack/plugins/cloud/models.py:182 xpack/plugins/cloud/models.py:230 #: xpack/plugins/cloud/models.py:181 xpack/plugins/cloud/models.py:229
msgid "Date sync" msgid "Date sync"
msgstr "同步日期" msgstr "同步日期"
#: xpack/plugins/cloud/models.py:186 #: xpack/plugins/cloud/models.py:185
msgid "Sync instance task execution" msgid "Sync instance task execution"
msgstr "同步实例任务执行" msgstr "同步实例任务执行"
#: xpack/plugins/cloud/models.py:210 #: xpack/plugins/cloud/models.py:209
msgid "Sync task" msgid "Sync task"
msgstr "同步任务" msgstr "同步任务"
#: xpack/plugins/cloud/models.py:214 #: xpack/plugins/cloud/models.py:213
msgid "Sync instance task history" msgid "Sync instance task history"
msgstr "同步实例任务历史" msgstr "同步实例任务历史"
#: xpack/plugins/cloud/models.py:217 #: xpack/plugins/cloud/models.py:216
msgid "Instance" msgid "Instance"
msgstr "实例" msgstr "实例"
#: xpack/plugins/cloud/models.py:234 #: xpack/plugins/cloud/models.py:233
msgid "Sync instance detail" msgid "Sync instance detail"
msgstr "同步实例详情" msgstr "同步实例详情"
@ -6599,3 +6611,23 @@ msgstr "旗舰版"
#: xpack/plugins/license/models.py:77 #: xpack/plugins/license/models.py:77
msgid "Community edition" msgid "Community edition"
msgstr "社区版" msgstr "社区版"
#~ msgid "Inherit"
#~ msgstr "继承"
#~ msgid "Include"
#~ msgstr "包含"
#~ msgid "Exclude"
#~ msgstr "不包含"
#~ msgid "DatabaseApp"
#~ msgstr "数据库应用"
#~ msgid "Database proxy MySQL protocol listen port"
#~ msgstr "MySQL 协议监听的端口"
#, fuzzy
#~| msgid "Database proxy PostgreSQL port"
#~ msgid "Database proxy PostgreSQL listen port"
#~ msgstr "数据库组件 PostgreSQL 协议监听的端口"

View File

@ -16,6 +16,7 @@ user_perms = (
('applications', 'application', 'match', 'application'), ('applications', 'application', 'match', 'application'),
('ops', 'commandexecution', 'add', 'commandexecution'), ('ops', 'commandexecution', 'add', 'commandexecution'),
('authentication', 'connectiontoken', 'add', 'connectiontoken'), ('authentication', 'connectiontoken', 'add', 'connectiontoken'),
('authentication', 'temptoken', 'add', 'temptoken'),
('tickets', 'ticket', 'view', 'ticket'), ('tickets', 'ticket', 'view', 'ticket'),
('orgs', 'organization', 'view', 'rootorg'), ('orgs', 'organization', 'view', 'rootorg'),
) )

View File

@ -67,6 +67,7 @@ class PublicSettingApi(generics.RetrieveAPIView):
# Announcement # Announcement
"ANNOUNCEMENT_ENABLED": settings.ANNOUNCEMENT_ENABLED, "ANNOUNCEMENT_ENABLED": settings.ANNOUNCEMENT_ENABLED,
"ANNOUNCEMENT": settings.ANNOUNCEMENT, "ANNOUNCEMENT": settings.ANNOUNCEMENT,
"AUTH_TEMP_TOKEN": settings.AUTH_TEMP_TOKEN,
} }
} }
return instance return instance