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_WECOM] = _('WeCom')
backend_label_mapping[settings.AUTH_BACKEND_DINGTALK] = _('DingTalk')
backend_label_mapping[settings.AUTH_BACKEND_TEMP_TOKEN] = _('Temporary token')
return backend_label_mapping
def _setup(self):

View File

@ -11,3 +11,4 @@ from .wecom import *
from .dingtalk import *
from .feishu 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 -*-
#
from django.shortcuts import redirect
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
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 import get_user_model
from users.models import User
from common.utils import get_logger
UserModel = get_user_model()
logger = get_logger(__file__)

View File

@ -53,7 +53,7 @@ class LDAPAuthorizationBackend(JMSBaseAuthBackend, LDAPBackend):
else:
built = False
return (user, built)
return user, built
def pre_check(self, username, password):
if not settings.AUTH_LDAP:
@ -75,6 +75,9 @@ class LDAPAuthorizationBackend(JMSBaseAuthBackend, LDAPBackend):
def authenticate(self, request=None, username=None, password=None, **kwargs):
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)
if not match:
logger.info('Authenticate failed: {}'.format(msg))

View File

@ -13,20 +13,23 @@ User = get_user_model()
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):
username = username.decode()
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
if '@' in username:
email = username
else:
email_suffix = settings.EMAIL_SUFFIX
email = '{}@{}'.format(username, email_suffix)
user = User(username=username, name=username, email=email)
user.source = user.Source.radius.value
user.save()
user = User.objects.filter(username=username).first()
if user:
return user
if '@' in username:
email = username
else:
email_suffix = settings.EMAIL_SUFFIX
email = '{}@{}'.format(username, email_suffix)
user = User(username=username, name=username, email=email)
user.source = user.Source.radius.value
user.save()
return user
def _perform_radius_auth(self, client, packet):

View File

@ -14,7 +14,7 @@ from ..base import JMSModelBackend
__all__ = ['SAML2Backend']
logger = get_logger(__file__)
logger = get_logger(__name__)
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
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from rest_framework.authtoken.models import Token
from django.conf import settings
from rest_framework.authtoken.models import Token
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 Meta:
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 -*-
#
from django.utils import timezone
from rest_framework import serializers
from common.utils import get_object_or_none
from users.models import User
from assets.models import Asset, SystemUser, Gateway, Domain, CommandFilterRule
from applications.models import Application
from users.serializers import UserProfileSerializer
from assets.serializers import ProtocolsField
from perms.serializers.base import ActionsField
from .models import AccessKey
__all__ = [
'AccessKeySerializer', 'OtpVerifySerializer', 'BearerTokenSerializer',
'MFAChallengeSerializer', 'SSOTokenSerializer',
'ConnectionTokenSerializer', 'ConnectionTokenSecretSerializer',
'PasswordVerifySerializer', 'MFASelectTypeSerializer',
'ConnectionTokenSerializer', 'ConnectionTokenApplicationSerializer',
'ConnectionTokenUserSerializer', 'ConnectionTokenFilterRuleSerializer',
'ConnectionTokenAssetSerializer', 'ConnectionTokenSystemUserSerializer',
'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):
user = serializers.CharField(max_length=128, required=False, allow_blank=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.register('access-keys', api.AccessKeyViewSet, 'access-key')
router.register('sso', api.SSOViewSet, 'sso')
router.register('temp-tokens', api.TempTokenViewSet, 'temp-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=''):
if '/' in name:
name = os.path.basename(name).replace('.py', '')
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)
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_AUTHENTICATION_FAILURE_REDIRECT_URI': '/',
'AUTH_TEMP_TOKEN': False,
# 企业微信
'AUTH_WECOM': False,
'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_CREATE_USER = CONFIG.CAS_CREATE_USER
# SSO Auth
# SSO auth
AUTH_SSO = CONFIG.AUTH_SSO
AUTH_SSO_AUTHKEY_TTL = CONFIG.AUTH_SSO_AUTHKEY_TTL
# WECOM Auth
# WECOM auth
AUTH_WECOM = CONFIG.AUTH_WECOM
WECOM_CORPID = CONFIG.WECOM_CORPID
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_LOGOUT_URL_NAME = "authentication:saml2:saml2-logout"
# 临时 token
AUTH_TEMP_TOKEN = CONFIG.AUTH_TEMP_TOKEN
# Other setting
TOKEN_EXPIRATION = CONFIG.TOKEN_EXPIRATION
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_AUTH_TOKEN = 'authentication.backends.sso.AuthorizationTokenAuthentication'
AUTH_BACKEND_SAML2 = 'authentication.backends.saml2.SAML2Backend'
AUTH_BACKEND_TEMP_TOKEN = 'authentication.backends.token.TempTokenAuthBackend'
AUTHENTICATION_BACKENDS = [
@ -172,7 +176,7 @@ AUTHENTICATION_BACKENDS = [
# 扫码模式
AUTH_BACKEND_WECOM, AUTH_BACKEND_DINGTALK, AUTH_BACKEND_FEISHU,
# 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

View File

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

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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
#: orgs/models.py:65 perms/models/base.py:83 rbac/models/role.py:29
#: 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/terminal.py:100 users/forms/profile.py:32
#: users/models/group.py:15 users/models/user.py:661
#: xpack/plugins/cloud/models.py:28
#: xpack/plugins/cloud/models.py:27
msgid "Name"
msgstr "名前"
#: 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"
msgstr "優先順位"
#: 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"
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
#: perms/models/base.py:88 terminal/models/sharing.py:26
msgid "Active"
@ -61,12 +61,12 @@ msgstr "アクティブ"
#: assets/models/domain.py:64 assets/models/group.py:23
#: 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
#: 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
#: tickets/models/comment.py:24 tickets/models/ticket.py:154
#: users/models/group.py:16 users/models/user.py:698
#: 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
msgid "Comment"
msgstr "コメント"
@ -87,9 +87,9 @@ msgstr "ログイン確認"
#: 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
#: 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
#: rbac/builtin.py:106 rbac/models/rolebinding.py:40
#: terminal/backends/command/models.py:19
#: authentication/models.py:51 orgs/models.py:214 perms/models/base.py:84
#: rbac/builtin.py:107 rbac/models/rolebinding.py:40
#: terminal/backends/command/models.py:20
#: terminal/backends/command/serializers.py:12 terminal/models/session.py:44
#: terminal/notifications.py:91 terminal/notifications.py:139
#: 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/gathered_user.py:14 assets/serializers/label.py:30
#: 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/notifications.py:90
#: xpack/plugins/change_auth_plan/models/asset.py:199
#: xpack/plugins/change_auth_plan/serializers/asset.py:180
#: xpack/plugins/cloud/models.py:223
#: xpack/plugins/cloud/models.py:222
msgid "Asset"
msgstr "資産"
@ -154,6 +154,7 @@ msgstr "コンマ区切り文字列の形式。* はすべて一致すること
#: acls/serializers/login_asset_acl.py:51 assets/models/base.py:176
#: assets/models/gathered_user.py:15 audits/models.py:119
#: authentication/forms.py:15 authentication/forms.py:17
#: authentication/models.py:69
#: authentication/templates/authentication/_msg_different_city.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
@ -265,7 +266,7 @@ msgstr "アプリケーション"
#: 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
#: 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
#: xpack/plugins/change_auth_plan/models/app.py:36
#: xpack/plugins/change_auth_plan/models/app.py:147
@ -317,7 +318,7 @@ msgstr "タイプ"
msgid "Domain"
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
msgid "Attrs"
msgstr "ツールバーの"
@ -356,7 +357,7 @@ msgstr "タイプ表示"
#: 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
#: 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"
msgstr "作成された日付"
@ -571,7 +572,7 @@ msgstr "ホスト名生"
#: assets/models/asset.py:215 assets/serializers/account.py:16
#: 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"
msgstr "プロトコル"
@ -611,7 +612,7 @@ msgstr "ラベル"
#: orgs/models.py:219 perms/models/base.py:91 users/models/user.py:706
#: users/serializers/group.py:33
#: 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"
msgstr "によって作成された"
@ -715,7 +716,7 @@ msgstr "トリガーモード"
#: xpack/plugins/change_auth_plan/models/base.py:201
#: xpack/plugins/change_auth_plan/serializers/app.py:66
#: xpack/plugins/change_auth_plan/serializers/asset.py:179
#: xpack/plugins/cloud/models.py:179
#: xpack/plugins/cloud/models.py:178
msgid "Reason"
msgstr "理由"
@ -751,7 +752,7 @@ msgstr "失敗しました"
msgid "Connectivity"
msgstr "接続性"
#: assets/models/base.py:40
#: assets/models/base.py:40 authentication/models.py:72
msgid "Date verified"
msgstr "確認済みの日付"
@ -953,7 +954,7 @@ msgid "Parent key"
msgstr "親キー"
#: 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"
msgstr "ノード"
@ -1011,7 +1012,7 @@ msgstr "ログインモード"
msgid "SFTP Root"
msgstr "SFTPルート"
#: assets/models/user.py:254 authentication/models.py:48
#: assets/models/user.py:254 authentication/models.py:49
msgid "Token"
msgstr "トークン"
@ -1426,6 +1427,7 @@ msgid "Resource"
msgstr "リソース"
#: audits/models.py:65 audits/models.py:88
#: terminal/backends/command/serializers.py:39
msgid "Datetime"
msgstr "時間"
@ -1480,8 +1482,8 @@ msgid "MFA"
msgstr "MFA"
#: audits/models.py:126 terminal/models/status.py:33
#: tickets/models/ticket.py:140 xpack/plugins/cloud/models.py:175
#: xpack/plugins/cloud/models.py:227
#: tickets/models/ticket.py:140 xpack/plugins/cloud/models.py:174
#: xpack/plugins/cloud/models.py:226
msgid "Status"
msgstr "ステータス"
@ -1518,7 +1520,7 @@ msgid "Hosts display"
msgstr "ホスト表示"
#: audits/serializers.py:96 ops/models/command.py:27
#: xpack/plugins/cloud/models.py:173
#: xpack/plugins/cloud/models.py:172
msgid "Result"
msgstr "結果"
@ -1562,170 +1564,174 @@ msgstr "企業微信"
msgid "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"
msgstr "ユーザーとグループ"
#: audits/signal_handlers.py:107
#: audits/signal_handlers.py:108
#, python-brace-format
msgid "{User} JOINED {UserGroup}"
msgstr "{User} に参加 {UserGroup}"
#: audits/signal_handlers.py:108
#: audits/signal_handlers.py:109
#, python-brace-format
msgid "{User} LEFT {UserGroup}"
msgstr "{User} のそばを通る {UserGroup}"
#: audits/signal_handlers.py:111
#: audits/signal_handlers.py:112
msgid "Asset and SystemUser"
msgstr "資産およびシステム・ユーザー"
#: audits/signal_handlers.py:112
#: audits/signal_handlers.py:113
#, python-brace-format
msgid "{Asset} ADD {SystemUser}"
msgstr "{Asset} 追加 {SystemUser}"
#: audits/signal_handlers.py:113
#: audits/signal_handlers.py:114
#, python-brace-format
msgid "{Asset} REMOVE {SystemUser}"
msgstr "{Asset} 削除 {SystemUser}"
#: audits/signal_handlers.py:116
#: audits/signal_handlers.py:117
msgid "Node and Asset"
msgstr "ノードと資産"
#: audits/signal_handlers.py:117
#: audits/signal_handlers.py:118
#, python-brace-format
msgid "{Node} ADD {Asset}"
msgstr "{Node} 追加 {Asset}"
#: audits/signal_handlers.py:118
#: audits/signal_handlers.py:119
#, python-brace-format
msgid "{Node} REMOVE {Asset}"
msgstr "{Node} 削除 {Asset}"
#: audits/signal_handlers.py:121
#: audits/signal_handlers.py:122
msgid "User asset permissions"
msgstr "ユーザー資産の権限"
#: audits/signal_handlers.py:122
#: audits/signal_handlers.py:123
#, python-brace-format
msgid "{AssetPermission} ADD {User}"
msgstr "{AssetPermission} 追加 {User}"
#: audits/signal_handlers.py:123
#: audits/signal_handlers.py:124
#, python-brace-format
msgid "{AssetPermission} REMOVE {User}"
msgstr "{AssetPermission} 削除 {User}"
#: audits/signal_handlers.py:126
#: audits/signal_handlers.py:127
msgid "User group asset permissions"
msgstr "ユーザーグループの資産権限"
#: audits/signal_handlers.py:127
#: audits/signal_handlers.py:128
#, python-brace-format
msgid "{AssetPermission} ADD {UserGroup}"
msgstr "{AssetPermission} 追加 {UserGroup}"
#: audits/signal_handlers.py:128
#: audits/signal_handlers.py:129
#, python-brace-format
msgid "{AssetPermission} REMOVE {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"
msgstr "資産権限"
#: audits/signal_handlers.py:132
#: audits/signal_handlers.py:133
#, python-brace-format
msgid "{AssetPermission} ADD {Asset}"
msgstr "{AssetPermission} 追加 {Asset}"
#: audits/signal_handlers.py:133
#: audits/signal_handlers.py:134
#, python-brace-format
msgid "{AssetPermission} REMOVE {Asset}"
msgstr "{AssetPermission} 削除 {Asset}"
#: audits/signal_handlers.py:136
#: audits/signal_handlers.py:137
msgid "Node permission"
msgstr "ノード権限"
#: audits/signal_handlers.py:137
#: audits/signal_handlers.py:138
#, python-brace-format
msgid "{AssetPermission} ADD {Node}"
msgstr "{AssetPermission} 追加 {Node}"
#: audits/signal_handlers.py:138
#: audits/signal_handlers.py:139
#, python-brace-format
msgid "{AssetPermission} REMOVE {Node}"
msgstr "{AssetPermission} 削除 {Node}"
#: audits/signal_handlers.py:141
#: audits/signal_handlers.py:142
msgid "Asset permission and SystemUser"
msgstr "資産権限とSystemUser"
#: audits/signal_handlers.py:142
#: audits/signal_handlers.py:143
#, python-brace-format
msgid "{AssetPermission} ADD {SystemUser}"
msgstr "{AssetPermission} 追加 {SystemUser}"
#: audits/signal_handlers.py:143
#: audits/signal_handlers.py:144
#, python-brace-format
msgid "{AssetPermission} REMOVE {SystemUser}"
msgstr "{AssetPermission} 削除 {SystemUser}"
#: audits/signal_handlers.py:146
#: audits/signal_handlers.py:147
msgid "User application permissions"
msgstr "ユーザーアプリケーションの権限"
#: audits/signal_handlers.py:147
#: audits/signal_handlers.py:148
#, python-brace-format
msgid "{ApplicationPermission} ADD {User}"
msgstr "{ApplicationPermission} 追加 {User}"
#: audits/signal_handlers.py:148
#: audits/signal_handlers.py:149
#, python-brace-format
msgid "{ApplicationPermission} REMOVE {User}"
msgstr "{ApplicationPermission} 削除 {User}"
#: audits/signal_handlers.py:151
#: audits/signal_handlers.py:152
msgid "User group application permissions"
msgstr "ユーザーグループアプリケーションの権限"
#: audits/signal_handlers.py:152
#: audits/signal_handlers.py:153
#, python-brace-format
msgid "{ApplicationPermission} ADD {UserGroup}"
msgstr "{ApplicationPermission} 追加 {UserGroup}"
#: audits/signal_handlers.py:153
#: audits/signal_handlers.py:154
#, python-brace-format
msgid "{ApplicationPermission} REMOVE {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"
msgstr "申請許可"
#: audits/signal_handlers.py:157
#: audits/signal_handlers.py:158
#, python-brace-format
msgid "{ApplicationPermission} ADD {Application}"
msgstr "{ApplicationPermission} 追加 {Application}"
#: audits/signal_handlers.py:158
#: audits/signal_handlers.py:159
#, python-brace-format
msgid "{ApplicationPermission} REMOVE {Application}"
msgstr "{ApplicationPermission} 削除 {Application}"
#: audits/signal_handlers.py:161
#: audits/signal_handlers.py:162
msgid "Application permission and SystemUser"
msgstr "アプリケーション権限とSystemUser"
#: audits/signal_handlers.py:162
#: audits/signal_handlers.py:163
#, python-brace-format
msgid "{ApplicationPermission} ADD {SystemUser}"
msgstr "{ApplicationPermission} 追加 {SystemUser}"
#: audits/signal_handlers.py:163
#: audits/signal_handlers.py:164
#, python-brace-format
msgid "{ApplicationPermission} REMOVE {SystemUser}"
msgstr "{ApplicationPermission} 削除 {SystemUser}"
@ -2028,31 +2034,48 @@ msgstr "MFAタイプ ({}) が有効になっていない"
msgid "Please change your password"
msgstr "パスワードを変更してください"
#: authentication/models.py:33 terminal/serializers/storage.py:28
#: authentication/models.py:34 terminal/serializers/storage.py:28
msgid "Access key"
msgstr "アクセスキー"
#: authentication/models.py:40
#: authentication/models.py:41
msgid "Private Token"
msgstr "プライベートトークン"
#: authentication/models.py:49
#: authentication/models.py:50
msgid "Expired"
msgstr "期限切れ"
#: authentication/models.py:53
#: authentication/models.py:54
msgid "SSO token"
msgstr "SSO token"
#: authentication/models.py:61
#: authentication/models.py:62
msgid "Connection token"
msgstr "接続トークン"
#: authentication/models.py:63
#: authentication/models.py:64
msgid "Can view connection token secret"
msgstr "接続トークンの秘密を表示できます"
#: 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"
msgstr "スーパー接続トークン"
@ -2064,6 +2087,14 @@ msgstr "異なる都市ログインのリマインダー"
msgid "binding reminder"
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
msgid "API key list"
msgstr "APIキーリスト"
@ -2081,11 +2112,6 @@ msgstr "ドキュメント"
msgid "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
#: terminal/notifications.py:93 terminal/notifications.py:141
msgid "Date"
@ -2151,7 +2177,7 @@ msgstr "コードエラー"
#: authentication/templates/authentication/_msg_reset_password.html:3
#: authentication/templates/authentication/_msg_rest_password_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_permed_items_expire.html:3
#: users/templates/users/_msg_account_expire_reminder.html:4
@ -2612,11 +2638,11 @@ msgstr "特殊文字を含むべきではない"
msgid "The mobile phone number format is incorrect"
msgstr "携帯電話番号の形式が正しくありません"
#: jumpserver/conf.py:295
#: jumpserver/conf.py:297
msgid "Create account successfully"
msgstr "アカウントを正常に作成"
#: jumpserver/conf.py:297
#: jumpserver/conf.py:299
msgid "Your account has been created successfully"
msgstr "アカウントが正常に作成されました"
@ -2972,13 +2998,6 @@ msgstr "クリップボードペースト"
msgid "Clipboard copy paste"
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
msgid "From ticket"
msgstr "チケットから"
@ -3015,13 +3034,6 @@ msgstr "アプリケーション権限の有効期限が近づいています"
msgid "application permissions of 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:40
#: perms/serializers/asset/permission.py:20
@ -3114,27 +3126,27 @@ msgstr "{} 少なくとも1つのシステムロール"
msgid "RBAC"
msgstr "RBAC"
#: rbac/builtin.py:97
#: rbac/builtin.py:98
msgid "SystemAdmin"
msgstr "システム管理者"
#: rbac/builtin.py:100
#: rbac/builtin.py:101
msgid "SystemAuditor"
msgstr "システム監査人"
#: rbac/builtin.py:103
#: rbac/builtin.py:104
msgid "SystemComponent"
msgstr "システムコンポーネント"
#: rbac/builtin.py:109
#: rbac/builtin.py:110
msgid "OrgAdmin"
msgstr "組織管理者"
#: rbac/builtin.py:112
#: rbac/builtin.py:113
msgid "OrgAuditor"
msgstr "監査員を組織する"
#: rbac/builtin.py:115
#: rbac/builtin.py:116
msgid "OrgUser"
msgstr "組織ユーザー"
@ -4599,30 +4611,30 @@ msgstr "ターミナル管理"
msgid "Invalid elasticsearch config"
msgstr "無効なElasticsearch構成"
#: terminal/backends/command/models.py:15
#: terminal/backends/command/models.py:16
msgid "Ordinary"
msgstr "普通"
#: terminal/backends/command/models.py:16
#: terminal/backends/command/models.py:17
msgid "Dangerous"
msgstr "危険"
#: terminal/backends/command/models.py:22
#: terminal/backends/command/models.py:23
msgid "Input"
msgstr "入力"
#: terminal/backends/command/models.py:23
#: terminal/backends/command/models.py:24
#: terminal/backends/command/serializers.py:36
msgid "Output"
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/templates/terminal/_msg_command_alert.html:10
msgid "Session"
msgstr "セッション"
#: terminal/backends/command/models.py:25
#: terminal/backends/command/models.py:26
#: terminal/backends/command/serializers.py:17
msgid "Risk level"
msgstr "リスクレベル"
@ -4639,7 +4651,7 @@ msgstr "リスクレベル表示"
msgid "Timestamp"
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"
msgstr "リモートアドレス"
@ -4699,18 +4711,18 @@ msgstr "MariaDB ポート"
msgid "PostgreSQL Port"
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/storage.py:49 terminal/serializers/storage.py:79
#: terminal/serializers/storage.py:89 terminal/serializers/storage.py:97
msgid "Endpoint"
msgstr "エンドポイント"
#: terminal/models/endpoint.py:54
#: terminal/models/endpoint.py:56
msgid "IP group"
msgstr "IP グループ"
#: terminal/models/endpoint.py:66
#: terminal/models/endpoint.py:68
msgid "Endpoint rule"
msgstr "エンドポイントルール"
@ -4931,7 +4943,7 @@ msgstr "バケット"
msgid "Secret key"
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"
msgstr "リージョン"
@ -6262,79 +6274,79 @@ msgstr "リリース済み"
msgid "Cloud center"
msgstr "クラウドセンター"
#: xpack/plugins/cloud/models.py:30
#: xpack/plugins/cloud/models.py:29
msgid "Provider"
msgstr "プロバイダー"
#: xpack/plugins/cloud/models.py:34
#: xpack/plugins/cloud/models.py:33
msgid "Validity"
msgstr "有効性"
#: xpack/plugins/cloud/models.py:39
#: xpack/plugins/cloud/models.py:38
msgid "Cloud account"
msgstr "クラウドアカウント"
#: xpack/plugins/cloud/models.py:41
#: xpack/plugins/cloud/models.py:40
msgid "Test cloud account"
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"
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"
msgstr "リージョン"
#: xpack/plugins/cloud/models.py:91
#: xpack/plugins/cloud/models.py:90
msgid "Hostname strategy"
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"
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"
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"
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"
msgstr "常に更新"
#: xpack/plugins/cloud/models.py:119
#: xpack/plugins/cloud/models.py:118
msgid "Date last sync"
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"
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"
msgstr "日付の同期"
#: xpack/plugins/cloud/models.py:186
#: xpack/plugins/cloud/models.py:185
msgid "Sync instance task execution"
msgstr "インスタンスタスクの同期実行"
#: xpack/plugins/cloud/models.py:210
#: xpack/plugins/cloud/models.py:209
msgid "Sync task"
msgstr "同期タスク"
#: xpack/plugins/cloud/models.py:214
#: xpack/plugins/cloud/models.py:213
msgid "Sync instance task history"
msgstr "インスタンスタスク履歴の同期"
#: xpack/plugins/cloud/models.py:217
#: xpack/plugins/cloud/models.py:216
msgid "Instance"
msgstr "インスタンス"
#: xpack/plugins/cloud/models.py:234
#: xpack/plugins/cloud/models.py:233
msgid "Sync instance detail"
msgstr "同期インスタンスの詳細"
@ -6688,3 +6700,26 @@ msgstr "究極のエディション"
#: xpack/plugins/license/models.py:77
msgid "Community edition"
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
oid sha256:9c13775875a335e3c8dbc7f666af622c5aa12050100b15e616c210e8e3043e38
size 103490
oid sha256:c5e41035cf1525f01fb773511041f0f8a3a25cdfb1fa4f1e681c6d7eec85f6b9
size 103570

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: JumpServer 0.3.3\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"
"Last-Translator: ibuler <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
#: orgs/models.py:65 perms/models/base.py:83 rbac/models/role.py:29
#: 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/terminal.py:100 users/forms/profile.py:32
#: users/models/group.py:15 users/models/user.py:661
#: xpack/plugins/cloud/models.py:28
#: xpack/plugins/cloud/models.py:27
msgid "Name"
msgstr "名称"
#: 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"
msgstr "优先级"
#: 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"
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
#: perms/models/base.py:88 terminal/models/sharing.py:26
msgid "Active"
@ -60,12 +60,12 @@ msgstr "激活中"
#: assets/models/domain.py:64 assets/models/group.py:23
#: 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
#: 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
#: tickets/models/comment.py:24 tickets/models/ticket.py:154
#: users/models/group.py:16 users/models/user.py:698
#: 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
msgid "Comment"
msgstr "备注"
@ -86,9 +86,9 @@ msgstr "登录复核"
#: 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
#: 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
#: rbac/builtin.py:106 rbac/models/rolebinding.py:40
#: terminal/backends/command/models.py:19
#: authentication/models.py:51 orgs/models.py:214 perms/models/base.py:84
#: rbac/builtin.py:107 rbac/models/rolebinding.py:40
#: terminal/backends/command/models.py:20
#: terminal/backends/command/serializers.py:12 terminal/models/session.py:44
#: terminal/notifications.py:91 terminal/notifications.py:139
#: 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/gathered_user.py:14 assets/serializers/label.py:30
#: 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/notifications.py:90
#: xpack/plugins/change_auth_plan/models/asset.py:199
#: xpack/plugins/change_auth_plan/serializers/asset.py:180
#: xpack/plugins/cloud/models.py:223
#: xpack/plugins/cloud/models.py:222
msgid "Asset"
msgstr "资产"
@ -153,6 +153,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. "
#: acls/serializers/login_asset_acl.py:51 assets/models/base.py:176
#: assets/models/gathered_user.py:15 audits/models.py:119
#: authentication/forms.py:15 authentication/forms.py:17
#: authentication/models.py:69
#: authentication/templates/authentication/_msg_different_city.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
@ -260,7 +261,7 @@ msgstr "应用程序"
#: 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
#: 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
#: xpack/plugins/change_auth_plan/models/app.py:36
#: xpack/plugins/change_auth_plan/models/app.py:147
@ -312,7 +313,7 @@ msgstr "类型"
msgid "Domain"
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
msgid "Attrs"
msgstr "属性"
@ -351,7 +352,7 @@ msgstr "类型名称"
#: 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
#: 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"
msgstr "创建日期"
@ -566,7 +567,7 @@ msgstr "主机名原始"
#: assets/models/asset.py:215 assets/serializers/account.py:16
#: 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"
msgstr "协议组"
@ -606,7 +607,7 @@ msgstr "标签管理"
#: orgs/models.py:219 perms/models/base.py:91 users/models/user.py:706
#: users/serializers/group.py:33
#: 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"
msgstr "创建者"
@ -710,7 +711,7 @@ msgstr "触发模式"
#: xpack/plugins/change_auth_plan/models/base.py:201
#: xpack/plugins/change_auth_plan/serializers/app.py:66
#: xpack/plugins/change_auth_plan/serializers/asset.py:179
#: xpack/plugins/cloud/models.py:179
#: xpack/plugins/cloud/models.py:178
msgid "Reason"
msgstr "原因"
@ -746,7 +747,7 @@ msgstr "失败"
msgid "Connectivity"
msgstr "可连接性"
#: assets/models/base.py:40
#: assets/models/base.py:40 authentication/models.py:72
msgid "Date verified"
msgstr "校验日期"
@ -948,7 +949,7 @@ msgid "Parent key"
msgstr "ssh私钥"
#: 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"
msgstr "节点"
@ -1006,7 +1007,7 @@ msgstr "认证方式"
msgid "SFTP Root"
msgstr "SFTP根路径"
#: assets/models/user.py:254 authentication/models.py:48
#: assets/models/user.py:254 authentication/models.py:49
msgid "Token"
msgstr "Token"
@ -1414,6 +1415,7 @@ msgid "Resource"
msgstr "资源"
#: audits/models.py:65 audits/models.py:88
#: terminal/backends/command/serializers.py:39
msgid "Datetime"
msgstr "日期"
@ -1468,8 +1470,8 @@ msgid "MFA"
msgstr "MFA"
#: audits/models.py:126 terminal/models/status.py:33
#: tickets/models/ticket.py:140 xpack/plugins/cloud/models.py:175
#: xpack/plugins/cloud/models.py:227
#: tickets/models/ticket.py:140 xpack/plugins/cloud/models.py:174
#: xpack/plugins/cloud/models.py:226
msgid "Status"
msgstr "状态"
@ -1506,7 +1508,7 @@ msgid "Hosts display"
msgstr "主机名称"
#: audits/serializers.py:96 ops/models/command.py:27
#: xpack/plugins/cloud/models.py:173
#: xpack/plugins/cloud/models.py:172
msgid "Result"
msgstr "结果"
@ -1550,170 +1552,174 @@ msgstr "企业微信"
msgid "DingTalk"
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"
msgstr "用户与用户组"
#: audits/signal_handlers.py:107
#: audits/signal_handlers.py:108
#, python-brace-format
msgid "{User} JOINED {UserGroup}"
msgstr "{User} 加入 {UserGroup}"
#: audits/signal_handlers.py:108
#: audits/signal_handlers.py:109
#, python-brace-format
msgid "{User} LEFT {UserGroup}"
msgstr "{User} 离开 {UserGroup}"
#: audits/signal_handlers.py:111
#: audits/signal_handlers.py:112
msgid "Asset and SystemUser"
msgstr "资产与系统用户"
#: audits/signal_handlers.py:112
#: audits/signal_handlers.py:113
#, python-brace-format
msgid "{Asset} ADD {SystemUser}"
msgstr "{Asset} 添加 {SystemUser}"
#: audits/signal_handlers.py:113
#: audits/signal_handlers.py:114
#, python-brace-format
msgid "{Asset} REMOVE {SystemUser}"
msgstr "{Asset} 移除 {SystemUser}"
#: audits/signal_handlers.py:116
#: audits/signal_handlers.py:117
msgid "Node and Asset"
msgstr "节点与资产"
#: audits/signal_handlers.py:117
#: audits/signal_handlers.py:118
#, python-brace-format
msgid "{Node} ADD {Asset}"
msgstr "{Node} 添加 {Asset}"
#: audits/signal_handlers.py:118
#: audits/signal_handlers.py:119
#, python-brace-format
msgid "{Node} REMOVE {Asset}"
msgstr "{Node} 移除 {Asset}"
#: audits/signal_handlers.py:121
#: audits/signal_handlers.py:122
msgid "User asset permissions"
msgstr "用户资产授权"
#: audits/signal_handlers.py:122
#: audits/signal_handlers.py:123
#, python-brace-format
msgid "{AssetPermission} ADD {User}"
msgstr "{AssetPermission} 添加 {User}"
#: audits/signal_handlers.py:123
#: audits/signal_handlers.py:124
#, python-brace-format
msgid "{AssetPermission} REMOVE {User}"
msgstr "{AssetPermission} 移除 {User}"
#: audits/signal_handlers.py:126
#: audits/signal_handlers.py:127
msgid "User group asset permissions"
msgstr "用户组资产授权"
#: audits/signal_handlers.py:127
#: audits/signal_handlers.py:128
#, python-brace-format
msgid "{AssetPermission} ADD {UserGroup}"
msgstr "{AssetPermission} 添加 {UserGroup}"
#: audits/signal_handlers.py:128
#: audits/signal_handlers.py:129
#, python-brace-format
msgid "{AssetPermission} REMOVE {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"
msgstr "资产授权"
#: audits/signal_handlers.py:132
#: audits/signal_handlers.py:133
#, python-brace-format
msgid "{AssetPermission} ADD {Asset}"
msgstr "{AssetPermission} 添加 {Asset}"
#: audits/signal_handlers.py:133
#: audits/signal_handlers.py:134
#, python-brace-format
msgid "{AssetPermission} REMOVE {Asset}"
msgstr "{AssetPermission} 移除 {Asset}"
#: audits/signal_handlers.py:136
#: audits/signal_handlers.py:137
msgid "Node permission"
msgstr "节点授权"
#: audits/signal_handlers.py:137
#: audits/signal_handlers.py:138
#, python-brace-format
msgid "{AssetPermission} ADD {Node}"
msgstr "{AssetPermission} 添加 {Node}"
#: audits/signal_handlers.py:138
#: audits/signal_handlers.py:139
#, python-brace-format
msgid "{AssetPermission} REMOVE {Node}"
msgstr "{AssetPermission} 移除 {Node}"
#: audits/signal_handlers.py:141
#: audits/signal_handlers.py:142
msgid "Asset permission and SystemUser"
msgstr "资产授权与系统用户"
#: audits/signal_handlers.py:142
#: audits/signal_handlers.py:143
#, python-brace-format
msgid "{AssetPermission} ADD {SystemUser}"
msgstr "{AssetPermission} 添加 {SystemUser}"
#: audits/signal_handlers.py:143
#: audits/signal_handlers.py:144
#, python-brace-format
msgid "{AssetPermission} REMOVE {SystemUser}"
msgstr "{AssetPermission} 移除 {SystemUser}"
#: audits/signal_handlers.py:146
#: audits/signal_handlers.py:147
msgid "User application permissions"
msgstr "用户应用授权"
#: audits/signal_handlers.py:147
#: audits/signal_handlers.py:148
#, python-brace-format
msgid "{ApplicationPermission} ADD {User}"
msgstr "{ApplicationPermission} 添加 {User}"
#: audits/signal_handlers.py:148
#: audits/signal_handlers.py:149
#, python-brace-format
msgid "{ApplicationPermission} REMOVE {User}"
msgstr "{ApplicationPermission} 移除 {User}"
#: audits/signal_handlers.py:151
#: audits/signal_handlers.py:152
msgid "User group application permissions"
msgstr "用户组应用授权"
#: audits/signal_handlers.py:152
#: audits/signal_handlers.py:153
#, python-brace-format
msgid "{ApplicationPermission} ADD {UserGroup}"
msgstr "{ApplicationPermission} 添加 {UserGroup}"
#: audits/signal_handlers.py:153
#: audits/signal_handlers.py:154
#, python-brace-format
msgid "{ApplicationPermission} REMOVE {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"
msgstr "应用授权"
#: audits/signal_handlers.py:157
#: audits/signal_handlers.py:158
#, python-brace-format
msgid "{ApplicationPermission} ADD {Application}"
msgstr "{ApplicationPermission} 添加 {Application}"
#: audits/signal_handlers.py:158
#: audits/signal_handlers.py:159
#, python-brace-format
msgid "{ApplicationPermission} REMOVE {Application}"
msgstr "{ApplicationPermission} 移除 {Application}"
#: audits/signal_handlers.py:161
#: audits/signal_handlers.py:162
msgid "Application permission and SystemUser"
msgstr "应用授权与系统用户"
#: audits/signal_handlers.py:162
#: audits/signal_handlers.py:163
#, python-brace-format
msgid "{ApplicationPermission} ADD {SystemUser}"
msgstr "{ApplicationPermission} 添加 {SystemUser}"
#: audits/signal_handlers.py:163
#: audits/signal_handlers.py:164
#, python-brace-format
msgid "{ApplicationPermission} REMOVE {SystemUser}"
msgstr "{ApplicationPermission} 移除 {SystemUser}"
@ -2007,31 +2013,48 @@ msgstr "该 MFA ({}) 方式没有启用"
msgid "Please change your password"
msgstr "请修改密码"
#: authentication/models.py:33 terminal/serializers/storage.py:28
#: authentication/models.py:34 terminal/serializers/storage.py:28
msgid "Access key"
msgstr "API key"
#: authentication/models.py:40
#: authentication/models.py:41
msgid "Private Token"
msgstr "SSH密钥"
#: authentication/models.py:49
#: authentication/models.py:50
msgid "Expired"
msgstr "过期时间"
#: authentication/models.py:53
#: authentication/models.py:54
msgid "SSO token"
msgstr "SSO token"
#: authentication/models.py:61
#: authentication/models.py:62
msgid "Connection token"
msgstr "连接令牌"
#: authentication/models.py:63
#: authentication/models.py:64
msgid "Can view connection token secret"
msgstr "可以查看连接令牌密文"
#: 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"
msgstr "超级连接令牌"
@ -2043,6 +2066,14 @@ msgstr "异地登录提醒"
msgid "binding reminder"
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
msgid "API key list"
msgstr "API Key列表"
@ -2060,11 +2091,6 @@ msgstr "文档"
msgid "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
#: terminal/notifications.py:93 terminal/notifications.py:141
msgid "Date"
@ -2130,7 +2156,7 @@ msgstr "代码错误"
#: authentication/templates/authentication/_msg_reset_password.html:3
#: authentication/templates/authentication/_msg_rest_password_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_permed_items_expire.html:3
#: users/templates/users/_msg_account_expire_reminder.html:4
@ -2582,11 +2608,11 @@ msgstr "不能包含特殊字符"
msgid "The mobile phone number format is incorrect"
msgstr "手机号格式不正确"
#: jumpserver/conf.py:295
#: jumpserver/conf.py:297
msgid "Create account successfully"
msgstr "创建账号成功"
#: jumpserver/conf.py:297
#: jumpserver/conf.py:299
msgid "Your account has been created successfully"
msgstr "你的账号已创建成功"
@ -2937,13 +2963,6 @@ msgstr "剪贴板粘贴"
msgid "Clipboard copy paste"
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
msgid "From ticket"
msgstr "来自工单"
@ -2980,13 +2999,6 @@ msgstr "应用授权规则即将过期"
msgid "application permissions of organization {}"
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:40
#: perms/serializers/asset/permission.py:20
@ -3077,27 +3089,27 @@ msgstr "{} 至少有一个系统角色"
msgid "RBAC"
msgstr "RBAC"
#: rbac/builtin.py:97
#: rbac/builtin.py:98
msgid "SystemAdmin"
msgstr "系统管理员"
#: rbac/builtin.py:100
#: rbac/builtin.py:101
msgid "SystemAuditor"
msgstr "系统审计员"
#: rbac/builtin.py:103
#: rbac/builtin.py:104
msgid "SystemComponent"
msgstr "系统组件"
#: rbac/builtin.py:109
#: rbac/builtin.py:110
msgid "OrgAdmin"
msgstr "组织管理员"
#: rbac/builtin.py:112
#: rbac/builtin.py:113
msgid "OrgAuditor"
msgstr "组织审计员"
#: rbac/builtin.py:115
#: rbac/builtin.py:116
msgid "OrgUser"
msgstr "组织用户"
@ -4528,30 +4540,30 @@ msgstr "终端管理"
msgid "Invalid elasticsearch config"
msgstr "无效的 Elasticsearch 配置"
#: terminal/backends/command/models.py:15
#: terminal/backends/command/models.py:16
msgid "Ordinary"
msgstr "普通"
#: terminal/backends/command/models.py:16
#: terminal/backends/command/models.py:17
msgid "Dangerous"
msgstr "危险"
#: terminal/backends/command/models.py:22
#: terminal/backends/command/models.py:23
msgid "Input"
msgstr "输入"
#: terminal/backends/command/models.py:23
#: terminal/backends/command/models.py:24
#: terminal/backends/command/serializers.py:36
msgid "Output"
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/templates/terminal/_msg_command_alert.html:10
msgid "Session"
msgstr "会话"
#: terminal/backends/command/models.py:25
#: terminal/backends/command/models.py:26
#: terminal/backends/command/serializers.py:17
msgid "Risk level"
msgstr "风险等级"
@ -4568,7 +4580,7 @@ msgstr "风险等级名称"
msgid "Timestamp"
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"
msgstr "远端地址"
@ -4628,18 +4640,18 @@ msgstr "MariaDB 端口"
msgid "PostgreSQL Port"
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/storage.py:49 terminal/serializers/storage.py:79
#: terminal/serializers/storage.py:89 terminal/serializers/storage.py:97
msgid "Endpoint"
msgstr "端点"
#: terminal/models/endpoint.py:54
#: terminal/models/endpoint.py:56
msgid "IP group"
msgstr "IP 组"
#: terminal/models/endpoint.py:66
#: terminal/models/endpoint.py:68
msgid "Endpoint rule"
msgstr "端点规则"
@ -4860,7 +4872,7 @@ msgstr "桶名称"
msgid "Secret key"
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"
msgstr "地域"
@ -6174,79 +6186,79 @@ msgstr "已释放"
msgid "Cloud center"
msgstr "云管中心"
#: xpack/plugins/cloud/models.py:30
#: xpack/plugins/cloud/models.py:29
msgid "Provider"
msgstr "云服务商"
#: xpack/plugins/cloud/models.py:34
#: xpack/plugins/cloud/models.py:33
msgid "Validity"
msgstr "有效"
#: xpack/plugins/cloud/models.py:39
#: xpack/plugins/cloud/models.py:38
msgid "Cloud account"
msgstr "云账号"
#: xpack/plugins/cloud/models.py:41
#: xpack/plugins/cloud/models.py:40
msgid "Test cloud account"
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"
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"
msgstr "地域"
#: xpack/plugins/cloud/models.py:91
#: xpack/plugins/cloud/models.py:90
msgid "Hostname strategy"
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"
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"
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"
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"
msgstr "总是更新"
#: xpack/plugins/cloud/models.py:119
#: xpack/plugins/cloud/models.py:118
msgid "Date last sync"
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"
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"
msgstr "同步日期"
#: xpack/plugins/cloud/models.py:186
#: xpack/plugins/cloud/models.py:185
msgid "Sync instance task execution"
msgstr "同步实例任务执行"
#: xpack/plugins/cloud/models.py:210
#: xpack/plugins/cloud/models.py:209
msgid "Sync task"
msgstr "同步任务"
#: xpack/plugins/cloud/models.py:214
#: xpack/plugins/cloud/models.py:213
msgid "Sync instance task history"
msgstr "同步实例任务历史"
#: xpack/plugins/cloud/models.py:217
#: xpack/plugins/cloud/models.py:216
msgid "Instance"
msgstr "实例"
#: xpack/plugins/cloud/models.py:234
#: xpack/plugins/cloud/models.py:233
msgid "Sync instance detail"
msgstr "同步实例详情"
@ -6599,3 +6611,23 @@ msgstr "旗舰版"
#: xpack/plugins/license/models.py:77
msgid "Community edition"
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'),
('ops', 'commandexecution', 'add', 'commandexecution'),
('authentication', 'connectiontoken', 'add', 'connectiontoken'),
('authentication', 'temptoken', 'add', 'temptoken'),
('tickets', 'ticket', 'view', 'ticket'),
('orgs', 'organization', 'view', 'rootorg'),
)

View File

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