Compare commits

...

49 Commits

Author SHA1 Message Date
fit2bot
c8eb7cccb1 perf: Modify error message for desktop client login 2024-07-31 10:58:08 +08:00
wangruidong
001828fb2b fix: stop job failed 2024-07-30 18:49:17 +08:00
feng
d0e355a86d perf: When account push change secret windows only modify the type equal to password 2024-07-30 18:33:19 +08:00
wangruidong
4a5f327498 fix: Arbitrary File Read in Ansible Play 2024-07-30 18:15:37 +08:00
Eric
04761a9373 perf: Check if CORE_HOST should ignore SSL 2024-07-30 16:55:04 +08:00
feng
077731a4b4 perf: Saml2 callback url miss port 2024-07-26 18:14:04 +08:00
feng
75e79efa5f perf: The locked IP shows the username + translate 2024-07-17 18:10:42 +08:00
fit2bot
ca5ffb6278 fix: session viewset api permission validation (#13749)
* fix: session viewset api permission validation

* fix: some api permission validation

---------

Co-authored-by: Bai <baijiangjie@gmail.com>
2024-07-17 15:36:10 +08:00
wangruidong
c7e149f15d fix: 在线同步获取不到资产问题 2024-07-17 15:35:59 +08:00
feng
60ac5ddaf2 perf: Dashboard user login statistics issue 2024-07-17 14:57:30 +08:00
feng
244407b212 perf: Translate 2024-07-17 11:37:42 +08:00
Bai
f08f01fe49 fix: authentication passkey model migrations 2024-07-17 10:41:14 +08:00
fit2bot
b2f11bbbf3 perf: Migrate (#13742)
Co-authored-by: feng <1304903146@qq.com>
2024-07-17 10:24:19 +08:00
Bai
6108a09089 fix: i18n error 2024-07-17 10:00:50 +08:00
Bai
93cf58ca76 fix: i18n error 2024-07-17 09:53:39 +08:00
feng
587c49082f perf: Notification remove kael magnus 2024-07-16 19:33:50 +08:00
fit2bot
50090c5310 perf: Translate (#13732)
Co-authored-by: feng <1304903146@qq.com>
2024-07-16 19:02:49 +08:00
吴小白
b4182a0d1c fix: deploy applet host 2024-07-16 12:49:04 +08:00
wangruidong
8a2d7b69fa perf: 社区版移除magnus 2024-07-16 10:41:45 +08:00
fit2bot
84821e97f4 perf: Community supports custom platforms (#13720)
Co-authored-by: feng <1304903146@qq.com>
2024-07-15 17:32:03 +08:00
fit2bot
e0f20ce047 perf: Translate (#13717)
Co-authored-by: feng <1304903146@qq.com>
2024-07-15 17:06:30 +08:00
ibuler
375f60fef8 perf: community add postgre support 2024-07-15 16:19:03 +08:00
fit2bot
ced79ea6c9 perf: ConnectionTokenSerializer add org_name label (#13714)
Co-authored-by: feng <1304903146@qq.com>
2024-07-15 14:33:40 +08:00
吴小白
2d4b9ff5a8 perf: remove receptor 2024-07-12 18:38:45 +08:00
wangruidong
0a5467886a fix: creat linux asset protocol default value is sftp 2024-07-09 19:04:31 +08:00
吴小白
9809415f78 fix: FromAsCasing keywords 2024-07-09 10:36:18 +08:00
Bryan
02fc045370 Merge pull request #13600 from jumpserver/dev
v4.0.0
2024-07-03 19:04:35 +08:00
Bryan
e4ac73896f Merge pull request #13452 from jumpserver/dev
v3.10.11-lts
2024-06-19 16:01:26 +08:00
Bryan
1518f792d6 Merge pull request #13236 from jumpserver/dev
v3.10.10-lts
2024-05-16 16:04:07 +08:00
Bai
67277dd622 fix: 修复仪表盘会话排序数量都是 1 的问题 2024-04-22 19:42:33 +08:00
Bryan
82e7f020ea Merge pull request #13094 from jumpserver/dev
v3.10.9 (dev to master)
2024-04-22 19:39:53 +08:00
Bryan
f20b9e01ab Merge pull request #13062 from jumpserver/dev
v3.10.8 dev to master
2024-04-18 18:01:20 +08:00
Bryan
8cf8a3701b Merge pull request #13059 from jumpserver/dev
v3.10.8
2024-04-18 17:16:37 +08:00
Bryan
7ba24293d1 Merge pull request #12736 from jumpserver/pr@dev@master_fix
fix: 解决冲突
2024-02-29 16:38:43 +08:00
Bai
f10114c9ed fix: 解决冲突 2024-02-29 16:37:10 +08:00
Bryan
cf31cbfb07 Merge pull request #12729 from jumpserver/dev
v3.10.4
2024-02-29 16:19:59 +08:00
wangruidong
0edad24d5d fix: 资产过期消息提示发送失败 2024-02-04 11:41:48 +08:00
ibuler
1f1c1a9157 fix: 修复定时检测用户是否活跃任务无法执行的问题 2024-01-23 09:28:38 +00:00
feng
6c9d271ae1 fix: redis 密码有特殊字符celery beat启动失败 2024-01-22 06:18:34 +00:00
Bai
6ff852e225 perf: 修复 Count 时没有去重的问题 2024-01-22 06:16:25 +00:00
Bryan
baa75dc735 Merge pull request #12566 from jumpserver/master
v3.10.2
2024-01-17 07:34:28 -04:00
Bryan
8a9f0436b8 Merge pull request #12565 from jumpserver/dev
v3.10.2
2024-01-17 07:23:30 -04:00
Bryan
a9620a3cbe Merge pull request #12461 from jumpserver/master
v3.10.1
2023-12-29 11:33:05 +05:00
Bryan
769e7dc8a0 Merge pull request #12460 from jumpserver/dev
v3.10.1
2023-12-29 11:20:36 +05:00
Bryan
2a70449411 Merge pull request #12458 from jumpserver/dev
v3.10.1
2023-12-29 11:01:13 +05:00
Bryan
8df720f19e Merge pull request #12401 from jumpserver/dev
v3.10
2023-12-21 15:14:19 +05:00
老广
dabbb45f6e Merge pull request #12144 from jumpserver/dev
v3.9.0
2023-11-16 18:23:05 +08:00
Bryan
ce24c1c3fd Merge pull request #11914 from jumpserver/dev
v3.8.0
2023-10-19 03:37:39 -05:00
Bryan
3c54c82ce9 Merge pull request #11636 from jumpserver/dev
v3.7.0
2023-09-21 17:02:48 +08:00
46 changed files with 503 additions and 391 deletions

View File

@@ -1,4 +1,4 @@
FROM debian:bullseye-slim as stage-1
FROM debian:bullseye-slim AS stage-1
ARG TARGETARCH
ARG DEPENDENCIES=" \
@@ -27,14 +27,6 @@ RUN set -ex \
&& chmod 755 /usr/local/bin/check \
&& rm -f check-${CHECK_VERSION}-linux-${TARGETARCH}.tar.gz
ARG RECEPTOR_VERSION=v1.4.5
RUN set -ex \
&& wget -O /opt/receptor.tar.gz https://github.com/ansible/receptor/releases/download/${RECEPTOR_VERSION}/receptor_${RECEPTOR_VERSION/v/}_linux_${TARGETARCH}.tar.gz \
&& tar -xf /opt/receptor.tar.gz -C /usr/local/bin/ \
&& chown root:root /usr/local/bin/receptor \
&& chmod 755 /usr/local/bin/receptor \
&& rm -f /opt/receptor.tar.gz
ARG VERSION
WORKDIR /opt/jumpserver
@@ -45,7 +37,7 @@ RUN echo > /opt/jumpserver/config.yml \
sed -i "s@VERSION = .*@VERSION = '${VERSION}'@g" apps/jumpserver/const.py; \
fi
FROM python:3.11-slim-bullseye as stage-2
FROM python:3.11-slim-bullseye AS stage-2
ARG TARGETARCH
ARG BUILD_DEPENDENCIES=" \

View File

@@ -1,7 +1,7 @@
ARG VERSION
FROM registry.fit2cloud.com/jumpserver/xpack:${VERSION} as build-xpack
FROM python:3.11-slim-bullseye as build-core
FROM registry.fit2cloud.com/jumpserver/xpack:${VERSION} AS build-xpack
FROM python:3.11-slim-bullseye AS build-core
ARG BUILD_DEPENDENCIES=" \
g++"

View File

@@ -8,7 +8,7 @@ from django.utils.translation import gettext_lazy as _
from xlsxwriter import Workbook
from accounts.const import AutomationTypes, SecretType, SSHKeyStrategy, SecretStrategy, ChangeSecretRecordStatusChoice
from accounts.models import ChangeSecretRecord
from accounts.models import ChangeSecretRecord, BaseAccountQuerySet
from accounts.notifications import ChangeSecretExecutionTaskMsg, ChangeSecretFailedMsg
from accounts.serializers import ChangeSecretRecordBackUpSerializer
from assets.const import HostTypes
@@ -68,10 +68,10 @@ class ChangeSecretManager(AccountBasePlaybookManager):
else:
return self.secret_generator(secret_type).get_secret()
def get_accounts(self, privilege_account):
def get_accounts(self, privilege_account) -> BaseAccountQuerySet | None:
if not privilege_account:
print(f'not privilege account')
return []
print('Not privilege account')
return
asset = privilege_account.asset
accounts = asset.accounts.all()
@@ -108,6 +108,9 @@ class ChangeSecretManager(AccountBasePlaybookManager):
print(f'Windows {asset} does not support ssh key push')
return inventory_hosts
if asset.type == HostTypes.WINDOWS:
accounts = accounts.filter(secret_type=SecretType.PASSWORD)
host['ssh_params'] = {}
for account in accounts:
h = deepcopy(host)
@@ -226,6 +229,9 @@ class ChangeSecretManager(AccountBasePlaybookManager):
def run(self, *args, **kwargs):
if self.secret_type and not self.check_secret():
self.execution.status = 'success'
self.execution.date_finished = timezone.now()
self.execution.save()
return
super().run(*args, **kwargs)
recorders = list(self.name_recorder_mapper.values())

View File

@@ -185,5 +185,6 @@ class Migration(migrations.Migration):
('alias', models.CharField(choices=[('@INPUT', 'Manual input'), ('@USER', 'Dynamic user'), ('@ANON', 'Anonymous account'), ('@SPEC', 'Specified account')], max_length=128, verbose_name='Alias')),
('secret_from_login', models.BooleanField(default=None, null=True, verbose_name='Secret from login')),
],
options={'verbose_name': 'Virtual account'},
),
]

View File

@@ -117,5 +117,6 @@ class DatabaseTypes(BaseType):
@classmethod
def get_community_types(cls):
return [
cls.MYSQL, cls.MARIADB, cls.MONGODB, cls.REDIS
cls.MYSQL, cls.MARIADB, cls.POSTGRESQL,
cls.MONGODB, cls.REDIS,
]

View File

@@ -171,12 +171,9 @@ class AllTypes(ChoicesMixin):
(Category.DEVICE, DeviceTypes),
(Category.DATABASE, DatabaseTypes),
(Category.WEB, WebTypes),
(Category.CLOUD, CloudTypes),
(Category.CUSTOM, CustomTypes),
]
if settings.XPACK_ENABLED:
types.extend([
(Category.CLOUD, CloudTypes),
(Category.CUSTOM, CustomTypes),
])
return types
@classmethod

View File

@@ -0,0 +1,28 @@
# Generated by Django 4.1.13 on 2024-07-09 10:19
from django.db import migrations
def migrate_platform_protocol_primary(apps, schema_editor):
platform_model = apps.get_model('assets', 'Platform')
platforms = platform_model.objects.all()
for platform in platforms:
p = platform.protocols.filter(primary=True).first()
if p:
continue
p = platform.protocols.first()
if not p:
continue
p.primary = True
p.save()
class Migration(migrations.Migration):
dependencies = [
('assets', '0003_auto_20180109_2331'),
]
operations = [
migrations.RunPython(migrate_platform_protocol_primary)
]

View File

@@ -36,6 +36,7 @@ class BaseAutomationSerializer(PeriodTaskSerializerMixin, BulkOrgResourceModelSe
class AutomationExecutionSerializer(serializers.ModelSerializer):
snapshot = serializers.SerializerMethodField(label=_('Automation snapshot'))
status = serializers.SerializerMethodField(label=_("Status"))
trigger = LabeledChoiceField(choices=Trigger.choices, read_only=True, label=_("Trigger mode"))
class Meta:
@@ -45,6 +46,14 @@ class AutomationExecutionSerializer(serializers.ModelSerializer):
]
fields = ['id', 'automation'] + read_only_fields
@staticmethod
def get_status(obj):
if obj.status == 'success':
return _("Success")
elif obj.status == 'pending':
return _("Pending")
return obj.status
@staticmethod
def get_snapshot(obj):
from assets.const import AutomationTypes as AssetTypes

View File

@@ -55,14 +55,14 @@ class UserSessionApi(generics.RetrieveDestroyAPIView):
def retrieve(self, request, *args, **kwargs):
if isinstance(request.user, AnonymousUser):
return Response(status=status.HTTP_200_OK)
return Response(status=status.HTTP_403_FORBIDDEN)
UserSessionManager(request).connect()
return Response(status=status.HTTP_200_OK)
return Response(status=status.HTTP_200_OK, data={'ok': True})
def destroy(self, request, *args, **kwargs):
if isinstance(request.user, AnonymousUser):
return Response(status=status.HTTP_200_OK)
return Response(status=status.HTTP_403_FORBIDDEN)
UserSessionManager(request).disconnect()
return Response(status=status.HTTP_204_NO_CONTENT)
return Response(status=status.HTTP_200_OK, data={'ok': True})

View File

@@ -1,14 +1,12 @@
import copy
from urllib import parse
from django.views import View
from django.contrib import auth
from django.urls import reverse
from django.conf import settings
from django.views.decorators.csrf import csrf_exempt
from django.contrib import auth
from django.http import HttpResponseRedirect, HttpResponse, HttpResponseServerError
from django.urls import reverse
from django.views import View
from django.views.decorators.csrf import csrf_exempt
from onelogin.saml2.auth import OneLogin_Saml2_Auth
from onelogin.saml2.errors import OneLogin_Saml2_Error
from onelogin.saml2.idp_metadata_parser import (
@@ -16,23 +14,29 @@ from onelogin.saml2.idp_metadata_parser import (
dict_deep_merge
)
from .settings import JmsSaml2Settings
from common.utils import get_logger
from .settings import JmsSaml2Settings
logger = get_logger(__file__)
class PrepareRequestMixin:
@staticmethod
def is_secure():
url_result = parse.urlparse(settings.SITE_URL)
return 'on' if url_result.scheme == 'https' else 'off'
@property
def parsed_url(self):
return parse.urlparse(settings.SITE_URL)
def is_secure(self):
return 'on' if self.parsed_url.scheme == 'https' else 'off'
def http_host(self):
return f"{self.parsed_url.hostname}:{self.parsed_url.port}" \
if self.parsed_url.port else self.parsed_url.hostname
def prepare_django_request(self, request):
result = {
'https': self.is_secure(),
'http_host': request.META['HTTP_HOST'],
'http_host': self.http_host(),
'script_name': request.META['PATH_INFO'],
'get_data': request.GET.copy(),
'post_data': request.POST.copy()
@@ -275,7 +279,7 @@ class Saml2AuthCallbackView(View, PrepareRequestMixin):
logger.debug(log_prompt.format('Redirect'))
redir = post_data.get('RelayState')
if not redir or len(redir) == 0:
redir = "/"
redir = "/"
next_url = saml_instance.redirect_to(redir)
return HttpResponseRedirect(next_url)

View File

@@ -3,3 +3,4 @@ from .connection_token import *
from .private_token import *
from .sso_token import *
from .temp_token import *
from ..backends.passkey.models import *

View File

@@ -37,6 +37,7 @@ class ConnectionTokenSerializer(CommonModelSerializer):
]
fields = fields_small + read_only_fields
extra_kwargs = {
'org_name': {'label': _('Org name')},
'from_ticket': {'read_only': True},
'value': {'read_only': True},
'is_expired': {'read_only': True, 'label': _('Is expired')},

View File

@@ -151,11 +151,9 @@ class BaseBindCallbackView(FlashMessageMixin, IMClientMixin, View):
setattr(user, f'{self.auth_type}_id', auth_user_id)
user.save()
except IntegrityError as e:
if e.args[0] == 1062:
msg = _('The %s is already bound to another user') % self.auth_type_label
response = self.get_failed_response(redirect_url, msg, msg)
return response
raise e
msg = _('The %s is already bound to another user') % self.auth_type_label
response = self.get_failed_response(redirect_url, msg, msg)
return response
ip = get_request_ip(request)
OAuthBindMessage(user, ip, self.auth_type_label, auth_user_id).publish_async()

View File

@@ -47,15 +47,7 @@ class DingTalkBaseMixin(UserConfirmRequiredExceptionMixin, PermissionsMixin, Fla
)
def verify_state(self):
state = self.request.GET.get('state')
session_state = self.request.session.get(DINGTALK_STATE_SESSION_KEY)
if state != session_state:
return False
return True
def get_verify_state_failed_response(self, redirect_uri):
msg = _("The system configuration is incorrect. Please contact your administrator")
return self.get_failed_response(redirect_uri, msg, msg)
return self.verify_state_with_session_key(DINGTALK_STATE_SESSION_KEY)
def get_already_bound_response(self, redirect_url):
msg = _('DingTalk is already bound')

View File

@@ -58,15 +58,7 @@ class FeiShuQRMixin(UserConfirmRequiredExceptionMixin, PermissionsMixin, FlashMe
)
def verify_state(self):
state = self.request.GET.get('state')
session_state = self.request.session.get(self.state_session_key)
if state != session_state:
return False
return True
def get_verify_state_failed_response(self, redirect_uri):
msg = _("The system configuration is incorrect. Please contact your administrator")
return self.get_failed_response(redirect_uri, msg, msg)
return self.verify_state_with_session_key(self.state_session_key)
def get_qr_url(self, redirect_uri):
state = random_string(16)

View File

@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
#
from django.utils.translation import gettext_lazy as _
from common.utils import FlashMessageUtil
@@ -32,3 +33,12 @@ class FlashMessageMixin:
def get_failed_response(self, redirect_url, title, msg, interval=10):
return self.get_response(redirect_url, title, msg, 'error', interval)
def get_verify_state_failed_response(self, redirect_uri):
msg = _(
"For your safety, automatic redirection login is not supported on the client."
" If you need to open it in the client, please log in again")
return self.get_failed_response(redirect_uri, msg, msg)
def verify_state_with_session_key(self, session_key):
return self.request.GET.get('state') == self.request.session.get(session_key)

View File

@@ -37,15 +37,7 @@ class SlackMixin(UserConfirmRequiredExceptionMixin, PermissionsMixin, FlashMessa
)
def verify_state(self):
state = self.request.GET.get('state')
session_state = self.request.session.get(SLACK_STATE_SESSION_KEY)
if state != session_state:
return False
return True
def get_verify_state_failed_response(self, redirect_uri):
msg = _("The system configuration is incorrect. Please contact your administrator")
return self.get_failed_response(redirect_uri, msg, msg)
return self.verify_state_with_session_key(SLACK_STATE_SESSION_KEY)
def get_qr_url(self, redirect_uri):
state = random_string(16)

View File

@@ -45,15 +45,7 @@ class WeComBaseMixin(UserConfirmRequiredExceptionMixin, PermissionsMixin, FlashM
)
def verify_state(self):
state = self.request.GET.get('state')
session_state = self.request.session.get(WECOM_STATE_SESSION_KEY)
if state != session_state:
return False
return True
def get_verify_state_failed_response(self, redirect_uri):
msg = _("The system configuration is incorrect. Please contact your administrator")
return self.get_failed_response(redirect_uri, msg, msg)
return self.verify_state_with_session_key(WECOM_STATE_SESSION_KEY)
def get_already_bound_response(self, redirect_url):
msg = _('WeCom is already bound')

View File

@@ -34,6 +34,10 @@ def parse_to_url(url):
url = url.replace('(?P<format>[a-z0-9]+)', '')
url = url.replace('((?P<terminal>[/.]{36})/)?', uid + '/')
url = url.replace('(?P<pk>[/.]+)', uid)
url = url.replace('(?P<label>.*)', uid)
url = url.replace('(?P<res_type>.*)', '1')
url = url.replace('(?P<name>[\\w.@]+)', '')
url = url.replace('<str:name>', 'zh-hans')
url = url.replace('\.', '')
url = url.replace('//', '/')
url = url.strip('$')
@@ -70,7 +74,9 @@ known_unauth_urls = [
"/api/v1/authentication/login-confirm-ticket/status/",
"/api/v1/authentication/mfa/select/",
"/api/v1/authentication/mfa/send-code/",
"/api/v1/authentication/sso/login/"
"/api/v1/authentication/sso/login/",
"/api/v1/authentication/user-session/",
"/api/v1/settings/i18n/zh-hans/"
]
known_error_urls = [

View File

@@ -53,7 +53,7 @@
"SaveSucceed": "保存成功",
"SelectSQL": "选择 SQL",
"SessionClosedBy": "会话被 %s 关闭",
"SessionFinished": "会已结束",
"SessionFinished": "会已结束",
"SessionLockedError": "当前会话已被锁定,无法继续执行命令",
"SessionLockedMessage": "此会话已被 %s 锁定,无法继续执行命令",
"SessionUnlockedMessage": "此会话已被 %s 解锁,可以继续执行命令",

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-03 16:39+0800\n"
"POT-Creation-Date: 2024-07-16 18:58+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"
@@ -64,7 +64,8 @@ msgstr ""
#: accounts/automations/backup_account/handlers.py:219
#: accounts/const/automation.py:110
#: accounts/serializers/automations/change_secret.py:166 audits/const.py:64
#: accounts/serializers/automations/change_secret.py:166
#: assets/serializers/automations/base.py:52 audits/const.py:64
#: audits/models.py:64 audits/signal_handlers/activity_log.py:33
#: common/const/choices.py:18 ops/const.py:74 ops/serializers/celery.py:48
#: terminal/const.py:78 terminal/models/session/sharing.py:121
@@ -303,8 +304,9 @@ msgstr ""
msgid "SFTP"
msgstr ""
#: accounts/const/automation.py:111 common/const/choices.py:16
#: terminal/const.py:77 tickets/const.py:29 tickets/const.py:38
#: accounts/const/automation.py:111 assets/serializers/automations/base.py:54
#: common/const/choices.py:16 terminal/const.py:77 tickets/const.py:29
#: tickets/const.py:38
msgid "Pending"
msgstr ""
@@ -393,7 +395,7 @@ msgstr ""
#: terminal/templates/terminal/_msg_command_warning.html:8
#: terminal/templates/terminal/_msg_session_sharing.html:8
#: tickets/models/ticket/command_confirm.py:13
#: xpack/plugins/cloud/models.py:100 xpack/plugins/cloud/ws.py:38
#: xpack/plugins/cloud/models.py:100 xpack/plugins/cloud/ws.py:37
msgid "Account"
msgstr ""
@@ -482,7 +484,7 @@ msgstr ""
#: accounts/serializers/account/backup.py:48
#: accounts/serializers/automations/base.py:56
#: assets/models/automations/base.py:122
#: assets/serializers/automations/base.py:39
#: assets/serializers/automations/base.py:40
msgid "Trigger mode"
msgstr ""
@@ -575,7 +577,8 @@ msgid "Date finished"
msgstr ""
#: accounts/models/automations/change_secret.py:44
#: assets/models/automations/base.py:113 audits/models.py:208
#: assets/models/automations/base.py:113
#: assets/serializers/automations/base.py:39 audits/models.py:208
#: audits/serializers.py:54 ops/models/base.py:49 ops/models/job.py:234
#: terminal/models/applet/applet.py:320 terminal/models/applet/host.py:140
#: terminal/models/component/status.py:30
@@ -707,9 +710,9 @@ msgstr ""
#: ops/models/celery.py:80 ops/models/job.py:142 ops/models/playbook.py:28
#: ops/serializers/job.py:18 orgs/models.py:82
#: perms/models/asset_permission.py:61 rbac/models/role.py:29
#: settings/models.py:34 settings/models.py:183 settings/serializers/msg.py:86
#: settings/serializers/terminal.py:9 terminal/models/applet/applet.py:33
#: terminal/models/component/endpoint.py:12
#: rbac/serializers/role.py:28 settings/models.py:34 settings/models.py:183
#: settings/serializers/msg.py:86 settings/serializers/terminal.py:9
#: terminal/models/applet/applet.py:33 terminal/models/component/endpoint.py:12
#: terminal/models/component/endpoint.py:109
#: terminal/models/component/storage.py:26 terminal/models/component/task.py:13
#: terminal/models/component/terminal.py:85
@@ -1232,7 +1235,8 @@ msgstr ""
#: authentication/templates/authentication/_access_key_modal.html:32
#: perms/models/asset_permission.py:82
#: terminal/models/component/endpoint.py:120
#: terminal/models/session/sharing.py:29 tickets/const.py:36
#: terminal/models/session/sharing.py:29 terminal/serializers/terminal.py:44
#: tickets/const.py:36
msgid "Active"
msgstr "Active"
@@ -1755,7 +1759,7 @@ msgstr ""
msgid "API mode"
msgstr ""
#: assets/const/types.py:251
#: assets/const/types.py:248
msgid "All types"
msgstr ""
@@ -3350,7 +3354,12 @@ msgstr ""
msgid "Actions"
msgstr ""
#: authentication/serializers/connection_token.py:42
#: authentication/serializers/connection_token.py:40
#: orgs/mixins/serializers.py:26 rbac/serializers/rolebinding.py:27
msgid "Org name"
msgstr "Organization"
#: authentication/serializers/connection_token.py:43
#: perms/serializers/permission.py:44 perms/serializers/permission.py:65
#: users/serializers/user.py:127 users/serializers/user.py:273
msgid "Is expired"
@@ -3621,10 +3630,10 @@ msgstr ""
msgid "DingTalk Error"
msgstr ""
#: authentication/views/dingtalk.py:57 authentication/views/feishu.py:68
#: authentication/views/slack.py:47 authentication/views/wecom.py:55
#: authentication/views/mixins.py:39
msgid ""
"The system configuration is incorrect. Please contact your administrator"
"For your safety, automatic redirection login is not supported on the client. "
"If you need to open it in the client, please log in again"
msgstr ""
#: authentication/views/dingtalk.py:61
@@ -3769,7 +3778,7 @@ msgstr ""
msgid "Canceled"
msgstr ""
#: common/const/common.py:5 xpack/plugins/cloud/manager.py:409
#: common/const/common.py:5 xpack/plugins/cloud/manager.py:412
#, python-format
msgid "%(name)s was created successfully"
msgstr ""
@@ -3884,7 +3893,7 @@ msgid ""
"information -> file encryption password to set the encryption password"
msgstr ""
#: common/exceptions.py:15 xpack/plugins/cloud/ws.py:38
#: common/exceptions.py:15 xpack/plugins/cloud/ws.py:37
#, python-format
msgid "%s object does not exist."
msgstr ""
@@ -4231,27 +4240,27 @@ msgstr ""
msgid "Currently playbook is being used in a job"
msgstr ""
#: ops/api/playbook.py:96
#: ops/api/playbook.py:97
msgid "Unsupported file content"
msgstr ""
#: ops/api/playbook.py:98 ops/api/playbook.py:144 ops/api/playbook.py:192
#: ops/api/playbook.py:99 ops/api/playbook.py:145 ops/api/playbook.py:193
msgid "Invalid file path"
msgstr ""
#: ops/api/playbook.py:170
#: ops/api/playbook.py:171
msgid "This file can not be rename"
msgstr ""
#: ops/api/playbook.py:189
#: ops/api/playbook.py:190
msgid "File already exists"
msgstr ""
#: ops/api/playbook.py:207
#: ops/api/playbook.py:208
msgid "File key is required"
msgstr ""
#: ops/api/playbook.py:210
#: ops/api/playbook.py:211
msgid "This file can not be delete"
msgstr ""
@@ -4472,7 +4481,8 @@ msgstr ""
msgid "Run as policy"
msgstr ""
#: ops/models/job.py:222 terminal/notifications.py:174
#: ops/models/job.py:222 ops/serializers/job.py:92
#: terminal/notifications.py:174
msgid "Job"
msgstr ""
@@ -4484,7 +4494,7 @@ msgstr ""
msgid "Material Type"
msgstr ""
#: ops/models/job.py:545
#: ops/models/job.py:548
msgid "Job Execution"
msgstr ""
@@ -4548,7 +4558,11 @@ msgstr ""
msgid "Is finished"
msgstr "Finished"
#: ops/serializers/job.py:90
#: ops/serializers/job.py:89
msgid "Task id"
msgstr ""
#: ops/serializers/job.py:98
msgid "You do not have permission for the current job."
msgstr ""
@@ -4651,10 +4665,6 @@ msgstr "請選擇一個組織後再保存"
msgid "Organization"
msgstr ""
#: orgs/mixins/serializers.py:26 rbac/serializers/rolebinding.py:27
msgid "Org name"
msgstr "Organization"
#: orgs/models.py:14
msgid "GLOBAL"
msgstr ""
@@ -4959,11 +4969,6 @@ msgstr ""
msgid "Perms"
msgstr ""
#: rbac/serializers/role.py:28 terminal/models/applet/applet.py:34
#: terminal/models/virtualapp/virtualapp.py:20
msgid "Display name"
msgstr ""
#: rbac/serializers/rolebinding.py:60
msgid "Has bound this role"
msgstr ""
@@ -5240,7 +5245,7 @@ msgid ""
msgstr ""
#: settings/serializers/auth/base.py:35
msgid "Forgot Password"
msgid "Forgot Password URL"
msgstr ""
#: settings/serializers/auth/base.py:36
@@ -5829,7 +5834,7 @@ msgid "Chat AI"
msgstr ""
#: settings/serializers/feature.py:80
msgid "Base URL"
msgid "GPT Base URL"
msgstr ""
#: settings/serializers/feature.py:81
@@ -6846,6 +6851,11 @@ msgstr ""
msgid "Enterprise"
msgstr ""
#: terminal/models/applet/applet.py:34
#: terminal/models/virtualapp/virtualapp.py:20
msgid "Display name"
msgstr ""
#: terminal/models/applet/applet.py:36
#: terminal/models/virtualapp/virtualapp.py:22
msgid "Author"
@@ -8935,49 +8945,49 @@ msgstr ""
msgid "Failed to synchronize the instance \"%s\""
msgstr ""
#: xpack/plugins/cloud/manager.py:334
#: xpack/plugins/cloud/manager.py:337
#, python-format
msgid ""
"The updated platform of asset \"%s\" is inconsistent with the original "
"platform type. Skip platform and protocol updates"
msgstr ""
#: xpack/plugins/cloud/manager.py:390
#: xpack/plugins/cloud/manager.py:393
#, python-format
msgid "The asset \"%s\" already exists"
msgstr ""
#: xpack/plugins/cloud/manager.py:392
#: xpack/plugins/cloud/manager.py:395
#, python-format
msgid "Update asset \"%s\""
msgstr ""
#: xpack/plugins/cloud/manager.py:395
#: xpack/plugins/cloud/manager.py:398
#, python-format
msgid "Asset \"%s\" has been updated"
msgstr ""
#: xpack/plugins/cloud/manager.py:405
#: xpack/plugins/cloud/manager.py:408
#, python-format
msgid "Prepare to create asset \"%s\""
msgstr ""
#: xpack/plugins/cloud/manager.py:426
#: xpack/plugins/cloud/manager.py:429
#, python-format
msgid "Set nodes \"%s\""
msgstr ""
#: xpack/plugins/cloud/manager.py:452
#: xpack/plugins/cloud/manager.py:455
#, python-format
msgid "Set accounts \"%s\""
msgstr ""
#: xpack/plugins/cloud/manager.py:468
#: xpack/plugins/cloud/manager.py:471
#, python-format
msgid "Set protocols \"%s\""
msgstr ""
#: xpack/plugins/cloud/manager.py:482 xpack/plugins/cloud/tasks.py:27
#: xpack/plugins/cloud/manager.py:485 xpack/plugins/cloud/tasks.py:27
msgid "Run sync instance task"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-03 16:39+0800\n"
"POT-Creation-Date: 2024-07-16 18:58+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"
@@ -64,7 +64,8 @@ msgstr "仕上げ"
#: accounts/automations/backup_account/handlers.py:219
#: accounts/const/automation.py:110
#: accounts/serializers/automations/change_secret.py:166 audits/const.py:64
#: accounts/serializers/automations/change_secret.py:166
#: assets/serializers/automations/base.py:52 audits/const.py:64
#: audits/models.py:64 audits/signal_handlers/activity_log.py:33
#: common/const/choices.py:18 ops/const.py:74 ops/serializers/celery.py:48
#: terminal/const.py:78 terminal/models/session/sharing.py:121
@@ -303,8 +304,9 @@ msgstr "メール"
msgid "SFTP"
msgstr "SFTP"
#: accounts/const/automation.py:111 common/const/choices.py:16
#: terminal/const.py:77 tickets/const.py:29 tickets/const.py:38
#: accounts/const/automation.py:111 assets/serializers/automations/base.py:54
#: common/const/choices.py:16 terminal/const.py:77 tickets/const.py:29
#: tickets/const.py:38
msgid "Pending"
msgstr "未定"
@@ -393,7 +395,7 @@ msgstr "ソース ID"
#: terminal/templates/terminal/_msg_command_warning.html:8
#: terminal/templates/terminal/_msg_session_sharing.html:8
#: tickets/models/ticket/command_confirm.py:13
#: xpack/plugins/cloud/models.py:100 xpack/plugins/cloud/ws.py:38
#: xpack/plugins/cloud/models.py:100 xpack/plugins/cloud/ws.py:37
msgid "Account"
msgstr "アカウント"
@@ -482,7 +484,7 @@ msgstr "アカウントのバックアップスナップショット"
#: accounts/serializers/account/backup.py:48
#: accounts/serializers/automations/base.py:56
#: assets/models/automations/base.py:122
#: assets/serializers/automations/base.py:39
#: assets/serializers/automations/base.py:40
msgid "Trigger mode"
msgstr "トリガーモード"
@@ -575,7 +577,8 @@ msgid "Date finished"
msgstr "終了日"
#: accounts/models/automations/change_secret.py:44
#: assets/models/automations/base.py:113 audits/models.py:208
#: assets/models/automations/base.py:113
#: assets/serializers/automations/base.py:39 audits/models.py:208
#: audits/serializers.py:54 ops/models/base.py:49 ops/models/job.py:234
#: terminal/models/applet/applet.py:320 terminal/models/applet/host.py:140
#: terminal/models/component/status.py:30
@@ -680,7 +683,7 @@ msgstr "鍵の種類"
#: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:19
msgid "Secret"
msgstr "ひみつ"
msgstr "秘文"
#: accounts/models/base.py:42
#: accounts/serializers/automations/change_secret.py:41
@@ -707,9 +710,9 @@ msgstr "パスワードルール"
#: ops/models/celery.py:80 ops/models/job.py:142 ops/models/playbook.py:28
#: ops/serializers/job.py:18 orgs/models.py:82
#: perms/models/asset_permission.py:61 rbac/models/role.py:29
#: settings/models.py:34 settings/models.py:183 settings/serializers/msg.py:86
#: settings/serializers/terminal.py:9 terminal/models/applet/applet.py:33
#: terminal/models/component/endpoint.py:12
#: rbac/serializers/role.py:28 settings/models.py:34 settings/models.py:183
#: settings/serializers/msg.py:86 settings/serializers/terminal.py:9
#: terminal/models/applet/applet.py:33 terminal/models/component/endpoint.py:12
#: terminal/models/component/endpoint.py:109
#: terminal/models/component/storage.py:26 terminal/models/component/task.py:13
#: terminal/models/component/terminal.py:85
@@ -982,7 +985,7 @@ msgstr "資産タイプ"
#: accounts/serializers/account/base.py:33 terminal/serializers/storage.py:149
msgid "Passphrase"
msgstr "パスワード"
msgstr "キーパスワード"
#: accounts/serializers/account/base.py:96
msgid ""
@@ -1083,13 +1086,14 @@ msgstr "SSHキー戦略"
#: accounts/serializers/automations/change_secret.py:57
msgid "Please enter your account username"
msgstr "MFAコードを入力してください"
msgstr "アカウントのユーザー名を入力してください"
#: accounts/serializers/automations/change_secret.py:62
msgid ""
"Secret parameter settings, currently only effective for assets of the host "
"type."
msgstr "暗号化パラメータの設定は現在、ホストタイプのリソースにのみ有効です。"
msgstr ""
"パラメータ設定は現在、AIX LINUX UNIX タイプの資産に対してのみ有効です。"
#: accounts/serializers/automations/change_secret.py:84
msgid "* Please enter the correct password length"
@@ -1249,7 +1253,8 @@ msgstr "レビュー担当者"
#: authentication/templates/authentication/_access_key_modal.html:32
#: perms/models/asset_permission.py:82
#: terminal/models/component/endpoint.py:120
#: terminal/models/session/sharing.py:29 tickets/const.py:36
#: terminal/models/session/sharing.py:29 terminal/serializers/terminal.py:44
#: tickets/const.py:36
msgid "Active"
msgstr "アクティブ"
@@ -1787,7 +1792,7 @@ msgstr "ボタンセレクターを確認する"
msgid "API mode"
msgstr "APIモード"
#: assets/const/types.py:251
#: assets/const/types.py:248
msgid "All types"
msgstr "いろんなタイプ"
@@ -3416,7 +3421,12 @@ msgstr "作業指示情報"
msgid "Actions"
msgstr "アクション"
#: authentication/serializers/connection_token.py:42
#: authentication/serializers/connection_token.py:40
#: orgs/mixins/serializers.py:26 rbac/serializers/rolebinding.py:27
msgid "Org name"
msgstr "組織名"
#: authentication/serializers/connection_token.py:43
#: perms/serializers/permission.py:44 perms/serializers/permission.py:65
#: users/serializers/user.py:127 users/serializers/user.py:273
msgid "Is expired"
@@ -3699,11 +3709,14 @@ msgstr "DingTalkエラー、システム管理者に連絡してください"
msgid "DingTalk Error"
msgstr "DingTalkエラー"
#: authentication/views/dingtalk.py:57 authentication/views/feishu.py:68
#: authentication/views/slack.py:47 authentication/views/wecom.py:55
#: authentication/views/mixins.py:39
msgid ""
"The system configuration is incorrect. Please contact your administrator"
msgstr "システム設定が正しくありません。管理者に連絡してください"
"For your safety, automatic redirection login is not supported on the client. "
"If you need to open it in the client, please log in again"
msgstr ""
"安全のため、クライアントでの自動リダイレクトログインはサポートされていませ"
"ん。クライアントで開く必要がある場合は、再度ログインしてください"
#: authentication/views/dingtalk.py:61
msgid "DingTalk is already bound"
@@ -3849,7 +3862,7 @@ msgstr "ランニング"
msgid "Canceled"
msgstr "キャンセル"
#: common/const/common.py:5 xpack/plugins/cloud/manager.py:409
#: common/const/common.py:5 xpack/plugins/cloud/manager.py:412
#, python-format
msgid "%(name)s was created successfully"
msgstr "%(name)s が正常に作成されました"
@@ -3969,7 +3982,7 @@ msgstr ""
"{} - 暗号化パスワードが設定されていません-個人情報->ファイル暗号化パスワード"
"に暗号化パスワードを設定してください"
#: common/exceptions.py:15 xpack/plugins/cloud/ws.py:38
#: common/exceptions.py:15 xpack/plugins/cloud/ws.py:37
#, python-format
msgid "%s object does not exist."
msgstr "%s オブジェクトは存在しません。"
@@ -4333,27 +4346,27 @@ msgstr "タスクを作成中で、中断できません。後でもう一度お
msgid "Currently playbook is being used in a job"
msgstr "現在プレイブックは1つのジョブで使用されています"
#: ops/api/playbook.py:96
#: ops/api/playbook.py:97
msgid "Unsupported file content"
msgstr "サポートされていないファイルの内容"
#: ops/api/playbook.py:98 ops/api/playbook.py:144 ops/api/playbook.py:192
#: ops/api/playbook.py:99 ops/api/playbook.py:145 ops/api/playbook.py:193
msgid "Invalid file path"
msgstr "無効なファイルパス"
#: ops/api/playbook.py:170
#: ops/api/playbook.py:171
msgid "This file can not be rename"
msgstr "ファイル名を変更することはできません"
#: ops/api/playbook.py:189
#: ops/api/playbook.py:190
msgid "File already exists"
msgstr "ファイルは既に存在します。"
#: ops/api/playbook.py:207
#: ops/api/playbook.py:208
msgid "File key is required"
msgstr "ファイルキーこのフィールドは必須です"
#: ops/api/playbook.py:210
#: ops/api/playbook.py:211
msgid "This file can not be delete"
msgstr "このファイルを削除できません"
@@ -4574,7 +4587,8 @@ msgstr "ユーザーとして実行"
msgid "Run as policy"
msgstr "ユーザー ポリシー"
#: ops/models/job.py:222 terminal/notifications.py:174
#: ops/models/job.py:222 ops/serializers/job.py:92
#: terminal/notifications.py:174
msgid "Job"
msgstr "ジョブ#ジョブ#"
@@ -4586,7 +4600,7 @@ msgstr "Material"
msgid "Material Type"
msgstr "Material を選択してオプションを設定します。"
#: ops/models/job.py:545
#: ops/models/job.py:548
msgid "Job Execution"
msgstr "ジョブ実行"
@@ -4650,7 +4664,11 @@ msgstr "タスクの種類"
msgid "Is finished"
msgstr "終了しました"
#: ops/serializers/job.py:90
#: ops/serializers/job.py:89
msgid "Task id"
msgstr "タスク ID"
#: ops/serializers/job.py:98
msgid "You do not have permission for the current job."
msgstr "あなたは現在のジョブの権限を持っていません。"
@@ -4754,10 +4772,6 @@ msgstr "組織を選択してから保存してください"
msgid "Organization"
msgstr "組織"
#: orgs/mixins/serializers.py:26 rbac/serializers/rolebinding.py:27
msgid "Org name"
msgstr "組織名"
#: orgs/models.py:14
msgid "GLOBAL"
msgstr "グローバル組織"
@@ -5066,11 +5080,6 @@ msgstr "システムロールバインディング"
msgid "Perms"
msgstr "パーマ"
#: rbac/serializers/role.py:28 terminal/models/applet/applet.py:34
#: terminal/models/virtualapp/virtualapp.py:20
msgid "Display name"
msgstr "表示名"
#: rbac/serializers/rolebinding.py:60
msgid "Has bound this role"
msgstr "この役割をバインドしました"
@@ -5352,8 +5361,8 @@ msgstr ""
"スでユーザーを作成します"
#: settings/serializers/auth/base.py:35
msgid "Forgot Password"
msgstr "パスワードを忘れた"
msgid "Forgot Password URL"
msgstr "パスワードを忘れた場合のURL"
#: settings/serializers/auth/base.py:36
msgid "The URL for Forgotten Password on the user login page"
@@ -5450,15 +5459,15 @@ msgstr "DN のバインド"
#: settings/serializers/auth/ldap.py:47
msgid "Binding Distinguished Name"
msgstr "専有名のバインド"
msgstr "バインドディレクトリ管理者"
#: settings/serializers/auth/ldap.py:51
msgid "Binding password"
msgstr "古いパスワード"
msgstr "バインドパスワード"
#: settings/serializers/auth/ldap.py:54
msgid "Search OU"
msgstr "システムアーキテクチャ"
msgstr "ユーザーOU"
#: settings/serializers/auth/ldap.py:56
msgid ""
@@ -5626,7 +5635,7 @@ msgstr "レルム名"
#: settings/serializers/auth/oidc.py:70
msgid "OpenID Connect"
msgstr "接続"
msgstr "OpenID 接続する"
#: settings/serializers/auth/oidc.py:73
msgid "Provider endpoint"
@@ -5754,7 +5763,7 @@ msgstr "認証コード長"
#: settings/serializers/auth/sms.py:26
msgid "Length of the sent verification code"
msgstr "確認コードを送信"
msgstr "送信された認証コードの長さ"
#: settings/serializers/auth/sms.py:31 settings/serializers/auth/sms.py:54
#: settings/serializers/auth/sms.py:62 settings/serializers/auth/sms.py:71
@@ -5980,8 +5989,8 @@ msgid "Chat AI"
msgstr "チャットAI"
#: settings/serializers/feature.py:80
msgid "Base URL"
msgstr "ベースサイトのアドレス"
msgid "GPT Base URL"
msgstr "GPTアドレス"
#: settings/serializers/feature.py:81
msgid "The base URL of the GPT service. For example: https://api.openai.com/v1"
@@ -6074,15 +6083,15 @@ msgstr ""
#: settings/serializers/msg.py:33
msgid "The user to be used for email server authentication"
msgstr "これは、SSO認証中にメールが返されない場合にデフォルトで使用されます。"
msgstr ""
"メールサーバーにログインするためのユーザー名。通常、これはあなたのメールアド"
"レスです"
#: settings/serializers/msg.py:37
msgid ""
"Password to use for the email server. It is used in conjunction with `User` "
"when authenticating to the email server"
msgstr ""
"メールサーバーに対するパスワード。メールサーバーに対する認証時に、これがユー"
"ザーとともに使用されます"
msgstr "メールサーバーにログインするためのパスワード"
#: settings/serializers/msg.py:40
msgid "Sender"
@@ -7090,6 +7099,11 @@ msgstr "コミュニティ版"
msgid "Enterprise"
msgstr "エンタープライズ版"
#: terminal/models/applet/applet.py:34
#: terminal/models/virtualapp/virtualapp.py:20
msgid "Display name"
msgstr "表示名"
#: terminal/models/applet/applet.py:36
#: terminal/models/virtualapp/virtualapp.py:22
msgid "Author"
@@ -9247,7 +9261,7 @@ msgstr "タスク実行完了"
#: xpack/plugins/cloud/manager.py:97
msgid "Synchronization regions"
msgstr "同期地域"
msgstr "地域を同期する"
#: xpack/plugins/cloud/manager.py:115
#, python-format
@@ -9259,7 +9273,7 @@ msgstr "地域 \"%s\" のインスタンスを取得できませんでした、
msgid "Failed to synchronize the instance \"%s\""
msgstr "インスタンス \"%s\" の同期に失敗しました"
#: xpack/plugins/cloud/manager.py:334
#: xpack/plugins/cloud/manager.py:337
#, python-format
msgid ""
"The updated platform of asset \"%s\" is inconsistent with the original "
@@ -9268,42 +9282,42 @@ msgstr ""
"更新された資産 \"%s\" のプラットフォームタイプと元のタイプは一致しません。プ"
"ラットフォームとプロトコルの更新をスキップ"
#: xpack/plugins/cloud/manager.py:390
#: xpack/plugins/cloud/manager.py:393
#, python-format
msgid "The asset \"%s\" already exists"
msgstr "資産 \"%s\" はすでに存在します"
#: xpack/plugins/cloud/manager.py:392
#: xpack/plugins/cloud/manager.py:395
#, python-format
msgid "Update asset \"%s\""
msgstr "資産の更新 \"%s\""
#: xpack/plugins/cloud/manager.py:395
#: xpack/plugins/cloud/manager.py:398
#, python-format
msgid "Asset \"%s\" has been updated"
msgstr "資産 \"%s\" が更新されました"
#: xpack/plugins/cloud/manager.py:405
#: xpack/plugins/cloud/manager.py:408
#, python-format
msgid "Prepare to create asset \"%s\""
msgstr "資産 \"%s\" の作成準備"
#: xpack/plugins/cloud/manager.py:426
#: xpack/plugins/cloud/manager.py:429
#, python-format
msgid "Set nodes \"%s\""
msgstr "ノード \"%s\" の設定"
#: xpack/plugins/cloud/manager.py:452
#: xpack/plugins/cloud/manager.py:455
#, python-format
msgid "Set accounts \"%s\""
msgstr "アカウント \"%s\" の設定"
#: xpack/plugins/cloud/manager.py:468
#: xpack/plugins/cloud/manager.py:471
#, python-format
msgid "Set protocols \"%s\""
msgstr "プロトコル \"%s\" の設定"
#: xpack/plugins/cloud/manager.py:482 xpack/plugins/cloud/tasks.py:27
#: xpack/plugins/cloud/manager.py:485 xpack/plugins/cloud/tasks.py:27
msgid "Run sync instance task"
msgstr "同期インスタンス タスクを実行する"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: JumpServer 0.3.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-03 16:39+0800\n"
"POT-Creation-Date: 2024-07-16 18:58+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"
@@ -63,7 +63,8 @@ msgstr "完成"
#: accounts/automations/backup_account/handlers.py:219
#: accounts/const/automation.py:110
#: accounts/serializers/automations/change_secret.py:166 audits/const.py:64
#: accounts/serializers/automations/change_secret.py:166
#: assets/serializers/automations/base.py:52 audits/const.py:64
#: audits/models.py:64 audits/signal_handlers/activity_log.py:33
#: common/const/choices.py:18 ops/const.py:74 ops/serializers/celery.py:48
#: terminal/const.py:78 terminal/models/session/sharing.py:121
@@ -302,8 +303,9 @@ msgstr "邮箱"
msgid "SFTP"
msgstr "SFTP"
#: accounts/const/automation.py:111 common/const/choices.py:16
#: terminal/const.py:77 tickets/const.py:29 tickets/const.py:38
#: accounts/const/automation.py:111 assets/serializers/automations/base.py:54
#: common/const/choices.py:16 terminal/const.py:77 tickets/const.py:29
#: tickets/const.py:38
msgid "Pending"
msgstr "待定的"
@@ -392,7 +394,7 @@ msgstr "来源 ID"
#: terminal/templates/terminal/_msg_command_warning.html:8
#: terminal/templates/terminal/_msg_session_sharing.html:8
#: tickets/models/ticket/command_confirm.py:13
#: xpack/plugins/cloud/models.py:100 xpack/plugins/cloud/ws.py:38
#: xpack/plugins/cloud/models.py:100 xpack/plugins/cloud/ws.py:37
msgid "Account"
msgstr "账号"
@@ -481,7 +483,7 @@ msgstr "账号备份快照"
#: accounts/serializers/account/backup.py:48
#: accounts/serializers/automations/base.py:56
#: assets/models/automations/base.py:122
#: assets/serializers/automations/base.py:39
#: assets/serializers/automations/base.py:40
msgid "Trigger mode"
msgstr "触发模式"
@@ -574,7 +576,8 @@ msgid "Date finished"
msgstr "结束日期"
#: accounts/models/automations/change_secret.py:44
#: assets/models/automations/base.py:113 audits/models.py:208
#: assets/models/automations/base.py:113
#: assets/serializers/automations/base.py:39 audits/models.py:208
#: audits/serializers.py:54 ops/models/base.py:49 ops/models/job.py:234
#: terminal/models/applet/applet.py:320 terminal/models/applet/host.py:140
#: terminal/models/component/status.py:30
@@ -679,7 +682,7 @@ msgstr "密文类型"
#: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:19
msgid "Secret"
msgstr "密"
msgstr "密"
#: accounts/models/base.py:42
#: accounts/serializers/automations/change_secret.py:41
@@ -706,9 +709,9 @@ msgstr "密码规则"
#: ops/models/celery.py:80 ops/models/job.py:142 ops/models/playbook.py:28
#: ops/serializers/job.py:18 orgs/models.py:82
#: perms/models/asset_permission.py:61 rbac/models/role.py:29
#: settings/models.py:34 settings/models.py:183 settings/serializers/msg.py:86
#: settings/serializers/terminal.py:9 terminal/models/applet/applet.py:33
#: terminal/models/component/endpoint.py:12
#: rbac/serializers/role.py:28 settings/models.py:34 settings/models.py:183
#: settings/serializers/msg.py:86 settings/serializers/terminal.py:9
#: terminal/models/applet/applet.py:33 terminal/models/component/endpoint.py:12
#: terminal/models/component/endpoint.py:109
#: terminal/models/component/storage.py:26 terminal/models/component/task.py:13
#: terminal/models/component/terminal.py:85
@@ -980,7 +983,7 @@ msgstr "资产类型"
#: accounts/serializers/account/base.py:33 terminal/serializers/storage.py:149
msgid "Passphrase"
msgstr "密码"
msgstr "密钥密码"
#: accounts/serializers/account/base.py:96
msgid ""
@@ -1080,13 +1083,13 @@ msgstr "SSH 密钥更改方式"
#: accounts/serializers/automations/change_secret.py:57
msgid "Please enter your account username"
msgstr "请输入 MFA 验证码"
msgstr "请输入您的账户用户名"
#: accounts/serializers/automations/change_secret.py:62
msgid ""
"Secret parameter settings, currently only effective for assets of the host "
"type."
msgstr "秘文参数设置,目前只对宿主类型资产有效"
msgstr "参数设置当前仅对 AIX LINUX UNIX 类型资产有效"
#: accounts/serializers/automations/change_secret.py:84
msgid "* Please enter the correct password length"
@@ -1243,7 +1246,8 @@ msgstr "审批人"
#: authentication/templates/authentication/_access_key_modal.html:32
#: perms/models/asset_permission.py:82
#: terminal/models/component/endpoint.py:120
#: terminal/models/session/sharing.py:29 tickets/const.py:36
#: terminal/models/session/sharing.py:29 terminal/serializers/terminal.py:44
#: tickets/const.py:36
msgid "Active"
msgstr "激活中"
@@ -1775,7 +1779,7 @@ msgstr "确认按钮选择器"
msgid "API mode"
msgstr "API 模式"
#: assets/const/types.py:251
#: assets/const/types.py:248
msgid "All types"
msgstr "所有类型"
@@ -2715,7 +2719,7 @@ msgstr "原因描述"
#: audits/serializers.py:70 audits/serializers.py:184
msgid "Auth backend display"
msgstr "没有匹配到认证后端"
msgstr "认证方式"
#: audits/serializers.py:134
#, python-format
@@ -3379,7 +3383,12 @@ msgstr "工单信息"
msgid "Actions"
msgstr "动作"
#: authentication/serializers/connection_token.py:42
#: authentication/serializers/connection_token.py:40
#: orgs/mixins/serializers.py:26 rbac/serializers/rolebinding.py:27
msgid "Org name"
msgstr "组织名称"
#: authentication/serializers/connection_token.py:43
#: perms/serializers/permission.py:44 perms/serializers/permission.py:65
#: users/serializers/user.py:127 users/serializers/user.py:273
msgid "Is expired"
@@ -3650,11 +3659,12 @@ msgstr "钉钉错误,请联系系统管理员"
msgid "DingTalk Error"
msgstr "钉钉错误"
#: authentication/views/dingtalk.py:57 authentication/views/feishu.py:68
#: authentication/views/slack.py:47 authentication/views/wecom.py:55
#: authentication/views/mixins.py:39
msgid ""
"The system configuration is incorrect. Please contact your administrator"
msgstr "企业配置错误,请联系系统管理员"
"For your safety, automatic redirection login is not supported on the client. "
"If you need to open it in the client, please log in again"
msgstr ""
"为了您的安全,客户端不支持自动跳转登录。如果需要在客户端中打开,请重新登录"
#: authentication/views/dingtalk.py:61
msgid "DingTalk is already bound"
@@ -3800,7 +3810,7 @@ msgstr "运行中"
msgid "Canceled"
msgstr "取消"
#: common/const/common.py:5 xpack/plugins/cloud/manager.py:409
#: common/const/common.py:5 xpack/plugins/cloud/manager.py:412
#, python-format
msgid "%(name)s was created successfully"
msgstr "%(name)s 创建成功"
@@ -3918,7 +3928,7 @@ msgid ""
"information -> file encryption password to set the encryption password"
msgstr "{} - 未设置加密密码 - 请前往个人信息 -> 文件加密密码中设置加密密码"
#: common/exceptions.py:15 xpack/plugins/cloud/ws.py:38
#: common/exceptions.py:15 xpack/plugins/cloud/ws.py:37
#, python-format
msgid "%s object does not exist."
msgstr "%s对象不存在"
@@ -4272,27 +4282,27 @@ msgstr "正在创建任务,无法中断,请稍后重试。"
msgid "Currently playbook is being used in a job"
msgstr "当前 playbook 正在作业中使用"
#: ops/api/playbook.py:96
#: ops/api/playbook.py:97
msgid "Unsupported file content"
msgstr "不支持的文件内容"
#: ops/api/playbook.py:98 ops/api/playbook.py:144 ops/api/playbook.py:192
#: ops/api/playbook.py:99 ops/api/playbook.py:145 ops/api/playbook.py:193
msgid "Invalid file path"
msgstr "无效的文件路径"
#: ops/api/playbook.py:170
#: ops/api/playbook.py:171
msgid "This file can not be rename"
msgstr "该文件不能重命名"
#: ops/api/playbook.py:189
#: ops/api/playbook.py:190
msgid "File already exists"
msgstr "文件已存在"
#: ops/api/playbook.py:207
#: ops/api/playbook.py:208
msgid "File key is required"
msgstr "文件密钥该字段是必填项。"
#: ops/api/playbook.py:210
#: ops/api/playbook.py:211
msgid "This file can not be delete"
msgstr "无法删除此文件"
@@ -4513,7 +4523,8 @@ msgstr "运行用户"
msgid "Run as policy"
msgstr "用户策略"
#: ops/models/job.py:222 terminal/notifications.py:174
#: ops/models/job.py:222 ops/serializers/job.py:92
#: terminal/notifications.py:174
msgid "Job"
msgstr "作业"
@@ -4525,7 +4536,7 @@ msgstr "Material"
msgid "Material Type"
msgstr "Material 类型"
#: ops/models/job.py:545
#: ops/models/job.py:548
msgid "Job Execution"
msgstr "作业执行"
@@ -4589,7 +4600,11 @@ msgstr "任务类型"
msgid "Is finished"
msgstr "是否完成"
#: ops/serializers/job.py:90
#: ops/serializers/job.py:89
msgid "Task id"
msgstr "任务 ID"
#: ops/serializers/job.py:98
msgid "You do not have permission for the current job."
msgstr "你没有当前作业的权限。"
@@ -4692,10 +4707,6 @@ msgstr "请选择一个组织后再保存"
msgid "Organization"
msgstr "组织"
#: orgs/mixins/serializers.py:26 rbac/serializers/rolebinding.py:27
msgid "Org name"
msgstr "组织名称"
#: orgs/models.py:14
msgid "GLOBAL"
msgstr "全局组织"
@@ -5003,11 +5014,6 @@ msgstr "系统角色绑定"
msgid "Perms"
msgstr "权限"
#: rbac/serializers/role.py:28 terminal/models/applet/applet.py:34
#: terminal/models/virtualapp/virtualapp.py:20
msgid "Display name"
msgstr "显示名称"
#: rbac/serializers/rolebinding.py:60
msgid "Has bound this role"
msgstr "已经绑定"
@@ -5286,8 +5292,8 @@ msgstr ""
"以此邮箱后缀创建用户"
#: settings/serializers/auth/base.py:35
msgid "Forgot Password"
msgstr "忘记密码"
msgid "Forgot Password URL"
msgstr "忘记密码的 URL"
#: settings/serializers/auth/base.py:36
msgid "The URL for Forgotten Password on the user login page"
@@ -5382,15 +5388,15 @@ msgstr "绑定 DN"
#: settings/serializers/auth/ldap.py:47
msgid "Binding Distinguished Name"
msgstr "绑定专有名称"
msgstr "绑定目录管理员"
#: settings/serializers/auth/ldap.py:51
msgid "Binding password"
msgstr "原来密码"
msgstr "绑定密码"
#: settings/serializers/auth/ldap.py:54
msgid "Search OU"
msgstr "系统架构"
msgstr "用户 OU"
#: settings/serializers/auth/ldap.py:56
msgid ""
@@ -5555,7 +5561,7 @@ msgstr "域"
#: settings/serializers/auth/oidc.py:70
msgid "OpenID Connect"
msgstr "连接"
msgstr "OpenID 连接"
#: settings/serializers/auth/oidc.py:73
msgid "Provider endpoint"
@@ -5680,7 +5686,7 @@ msgstr "验证码长度"
#: settings/serializers/auth/sms.py:26
msgid "Length of the sent verification code"
msgstr "发送验证码"
msgstr "发送验证码的长度"
#: settings/serializers/auth/sms.py:31 settings/serializers/auth/sms.py:54
#: settings/serializers/auth/sms.py:62 settings/serializers/auth/sms.py:71
@@ -5897,8 +5903,8 @@ msgid "Chat AI"
msgstr "聊天 AI"
#: settings/serializers/feature.py:80
msgid "Base URL"
msgstr "JumpServer 地址"
msgid "GPT Base URL"
msgstr "GPT 地址"
#: settings/serializers/feature.py:81
msgid "The base URL of the GPT service. For example: https://api.openai.com/v1"
@@ -5987,7 +5993,7 @@ msgstr ""
#: settings/serializers/msg.py:33
msgid "The user to be used for email server authentication"
msgstr "SSO认证时如果没有返回邮件地址将使用该后缀"
msgstr "登录到邮件服务器的用户名。这通常是你的邮件地址"
#: settings/serializers/msg.py:37
msgid ""
@@ -6960,6 +6966,11 @@ msgstr "社区版"
msgid "Enterprise"
msgstr "企业版"
#: terminal/models/applet/applet.py:34
#: terminal/models/virtualapp/virtualapp.py:20
msgid "Display name"
msgstr "显示名称"
#: terminal/models/applet/applet.py:36
#: terminal/models/virtualapp/virtualapp.py:22
msgid "Author"
@@ -8553,7 +8564,7 @@ msgstr "组织管理员"
#: users/serializers/user.py:140
msgid "Can public key authentication"
msgstr "可以公钥认证"
msgstr "可以使用公钥认证"
#: users/serializers/user.py:242
msgid "Full name"
@@ -9076,7 +9087,7 @@ msgstr "任务执行 ID"
#: xpack/plugins/cloud/manager.py:97
msgid "Synchronization regions"
msgstr "没有用户需要同步"
msgstr "同步地区"
#: xpack/plugins/cloud/manager.py:115
#, python-format
@@ -9088,49 +9099,49 @@ msgstr "获取区域 \"%s\" 的实例错误,错误:%s"
msgid "Failed to synchronize the instance \"%s\""
msgstr "无法同步实例 %s"
#: xpack/plugins/cloud/manager.py:334
#: xpack/plugins/cloud/manager.py:337
#, python-format
msgid ""
"The updated platform of asset \"%s\" is inconsistent with the original "
"platform type. Skip platform and protocol updates"
msgstr "资产“%s”的更新平台与原平台类型不一致。跳过平台和协议更新"
#: xpack/plugins/cloud/manager.py:390
#: xpack/plugins/cloud/manager.py:393
#, python-format
msgid "The asset \"%s\" already exists"
msgstr "资产 \"%s\" 已存在"
#: xpack/plugins/cloud/manager.py:392
#: xpack/plugins/cloud/manager.py:395
#, python-format
msgid "Update asset \"%s\""
msgstr "更新资产 \"%s\""
#: xpack/plugins/cloud/manager.py:395
#: xpack/plugins/cloud/manager.py:398
#, python-format
msgid "Asset \"%s\" has been updated"
msgstr "资产 \"%s\" 已更新"
#: xpack/plugins/cloud/manager.py:405
#: xpack/plugins/cloud/manager.py:408
#, python-format
msgid "Prepare to create asset \"%s\""
msgstr "准备创建资产 %s"
#: xpack/plugins/cloud/manager.py:426
#: xpack/plugins/cloud/manager.py:429
#, python-format
msgid "Set nodes \"%s\""
msgstr "删除节点: \"%s\""
#: xpack/plugins/cloud/manager.py:452
#: xpack/plugins/cloud/manager.py:455
#, python-format
msgid "Set accounts \"%s\""
msgstr "删除账号: %s"
#: xpack/plugins/cloud/manager.py:468
#: xpack/plugins/cloud/manager.py:471
#, python-format
msgid "Set protocols \"%s\""
msgstr "设置协议 \"%s\""
#: xpack/plugins/cloud/manager.py:482 xpack/plugins/cloud/tasks.py:27
#: xpack/plugins/cloud/manager.py:485 xpack/plugins/cloud/tasks.py:27
msgid "Run sync instance task"
msgstr "执行同步实例任务"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: JumpServer 0.3.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-03 16:39+0800\n"
"POT-Creation-Date: 2024-07-16 18:58+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"
@@ -65,7 +65,8 @@ msgstr "完成"
#: accounts/automations/backup_account/handlers.py:219
#: accounts/const/automation.py:110
#: accounts/serializers/automations/change_secret.py:166 audits/const.py:64
#: accounts/serializers/automations/change_secret.py:166
#: assets/serializers/automations/base.py:52 audits/const.py:64
#: audits/models.py:64 audits/signal_handlers/activity_log.py:33
#: common/const/choices.py:18 ops/const.py:74 ops/serializers/celery.py:48
#: terminal/const.py:78 terminal/models/session/sharing.py:121
@@ -304,8 +305,9 @@ msgstr "信箱"
msgid "SFTP"
msgstr "SFTP"
#: accounts/const/automation.py:111 common/const/choices.py:16
#: terminal/const.py:77 tickets/const.py:29 tickets/const.py:38
#: accounts/const/automation.py:111 assets/serializers/automations/base.py:54
#: common/const/choices.py:16 terminal/const.py:77 tickets/const.py:29
#: tickets/const.py:38
msgid "Pending"
msgstr "待定的"
@@ -394,7 +396,7 @@ msgstr "來源 ID"
#: terminal/templates/terminal/_msg_command_warning.html:8
#: terminal/templates/terminal/_msg_session_sharing.html:8
#: tickets/models/ticket/command_confirm.py:13
#: xpack/plugins/cloud/models.py:100 xpack/plugins/cloud/ws.py:38
#: xpack/plugins/cloud/models.py:100 xpack/plugins/cloud/ws.py:37
msgid "Account"
msgstr "帳號"
@@ -483,7 +485,7 @@ msgstr "帳號備份快照"
#: accounts/serializers/account/backup.py:48
#: accounts/serializers/automations/base.py:56
#: assets/models/automations/base.py:122
#: assets/serializers/automations/base.py:39
#: assets/serializers/automations/base.py:40
msgid "Trigger mode"
msgstr "觸發模式"
@@ -576,7 +578,8 @@ msgid "Date finished"
msgstr "結束日期"
#: accounts/models/automations/change_secret.py:44
#: assets/models/automations/base.py:113 audits/models.py:208
#: assets/models/automations/base.py:113
#: assets/serializers/automations/base.py:39 audits/models.py:208
#: audits/serializers.py:54 ops/models/base.py:49 ops/models/job.py:234
#: terminal/models/applet/applet.py:320 terminal/models/applet/host.py:140
#: terminal/models/component/status.py:30
@@ -681,7 +684,7 @@ msgstr "密文類型"
#: authentication/templates/authentication/_access_key_modal.html:31
#: settings/serializers/auth/radius.py:19
msgid "Secret"
msgstr "金鑰"
msgstr "飛文"
#: accounts/models/base.py:42
#: accounts/serializers/automations/change_secret.py:41
@@ -708,9 +711,9 @@ msgstr "密碼規則"
#: ops/models/celery.py:80 ops/models/job.py:142 ops/models/playbook.py:28
#: ops/serializers/job.py:18 orgs/models.py:82
#: perms/models/asset_permission.py:61 rbac/models/role.py:29
#: settings/models.py:34 settings/models.py:183 settings/serializers/msg.py:86
#: settings/serializers/terminal.py:9 terminal/models/applet/applet.py:33
#: terminal/models/component/endpoint.py:12
#: rbac/serializers/role.py:28 settings/models.py:34 settings/models.py:183
#: settings/serializers/msg.py:86 settings/serializers/terminal.py:9
#: terminal/models/applet/applet.py:33 terminal/models/component/endpoint.py:12
#: terminal/models/component/endpoint.py:109
#: terminal/models/component/storage.py:26 terminal/models/component/task.py:13
#: terminal/models/component/terminal.py:85
@@ -768,10 +771,8 @@ msgid "Secret from login"
msgstr "與用戶登錄時相同"
#: accounts/models/virtual.py:18
#, fuzzy
#| msgid "Email account"
msgid "Virtual account"
msgstr "信箱帳號"
msgstr "虛擬帳號"
#: accounts/models/virtual.py:28
msgid "Same with user"
@@ -984,7 +985,7 @@ msgstr "資產類型"
#: accounts/serializers/account/base.py:33 terminal/serializers/storage.py:149
msgid "Passphrase"
msgstr "密碼"
msgstr "密鑰密碼"
#: accounts/serializers/account/base.py:96
msgid ""
@@ -1084,13 +1085,13 @@ msgstr "SSH 金鑰更改方式"
#: accounts/serializers/automations/change_secret.py:57
msgid "Please enter your account username"
msgstr "請輸入 MFA 驗證碼"
msgstr "請輸入您的帳戶使用者名稱"
#: accounts/serializers/automations/change_secret.py:62
msgid ""
"Secret parameter settings, currently only effective for assets of the host "
"type."
msgstr "密文參數設定, 目前只對宿主型的資產有效。"
msgstr "參數設置,目前只對 AIX LINUX UNIX 類型的資產有效。"
#: accounts/serializers/automations/change_secret.py:84
msgid "* Please enter the correct password length"
@@ -1247,7 +1248,8 @@ msgstr "審批人"
#: authentication/templates/authentication/_access_key_modal.html:32
#: perms/models/asset_permission.py:82
#: terminal/models/component/endpoint.py:120
#: terminal/models/session/sharing.py:29 tickets/const.py:36
#: terminal/models/session/sharing.py:29 terminal/serializers/terminal.py:44
#: tickets/const.py:36
msgid "Active"
msgstr "啟用中"
@@ -1779,7 +1781,7 @@ msgstr "確認按鈕選擇器"
msgid "API mode"
msgstr "API 模式"
#: assets/const/types.py:251
#: assets/const/types.py:248
msgid "All types"
msgstr "所有類型"
@@ -2719,7 +2721,7 @@ msgstr "原因描述"
#: audits/serializers.py:70 audits/serializers.py:184
msgid "Auth backend display"
msgstr "没有匹配到认证后端"
msgstr "認證方式"
#: audits/serializers.py:134
#, python-format
@@ -3383,7 +3385,12 @@ msgstr "工單資訊"
msgid "Actions"
msgstr "動作"
#: authentication/serializers/connection_token.py:42
#: authentication/serializers/connection_token.py:40
#: orgs/mixins/serializers.py:26 rbac/serializers/rolebinding.py:27
msgid "Org name"
msgstr "組織名稱"
#: authentication/serializers/connection_token.py:43
#: perms/serializers/permission.py:44 perms/serializers/permission.py:65
#: users/serializers/user.py:127 users/serializers/user.py:273
msgid "Is expired"
@@ -3654,11 +3661,12 @@ msgstr "釘釘錯誤,請聯絡系統管理員"
msgid "DingTalk Error"
msgstr "釘釘錯誤"
#: authentication/views/dingtalk.py:57 authentication/views/feishu.py:68
#: authentication/views/slack.py:47 authentication/views/wecom.py:55
#: authentication/views/mixins.py:39
msgid ""
"The system configuration is incorrect. Please contact your administrator"
msgstr "企業配置錯誤,請聯絡系統管理員"
"For your safety, automatic redirection login is not supported on the client. "
"If you need to open it in the client, please log in again"
msgstr ""
"為了您的安全,客戶端不支持自動跳轉登錄。如果需要在客戶端中打開,請重新登錄"
#: authentication/views/dingtalk.py:61
msgid "DingTalk is already bound"
@@ -3804,7 +3812,7 @@ msgstr "運行中"
msgid "Canceled"
msgstr "取消"
#: common/const/common.py:5 xpack/plugins/cloud/manager.py:409
#: common/const/common.py:5 xpack/plugins/cloud/manager.py:412
#, python-format
msgid "%(name)s was created successfully"
msgstr "%(name)s 創建成功"
@@ -3922,7 +3930,7 @@ msgid ""
"information -> file encryption password to set the encryption password"
msgstr "{} - 未設置加密密碼 - 請前往個人資訊 -> 文件加密密碼中設置加密密碼"
#: common/exceptions.py:15 xpack/plugins/cloud/ws.py:38
#: common/exceptions.py:15 xpack/plugins/cloud/ws.py:37
#, python-format
msgid "%s object does not exist."
msgstr "%s對象不存在"
@@ -4275,27 +4283,27 @@ msgstr "正在創建任務,無法中斷,請稍後重試。"
msgid "Currently playbook is being used in a job"
msgstr "當前 playbook 正在作業中使用"
#: ops/api/playbook.py:96
#: ops/api/playbook.py:97
msgid "Unsupported file content"
msgstr "不支持的文件內容"
#: ops/api/playbook.py:98 ops/api/playbook.py:144 ops/api/playbook.py:192
#: ops/api/playbook.py:99 ops/api/playbook.py:145 ops/api/playbook.py:193
msgid "Invalid file path"
msgstr "無效的文件路徑"
#: ops/api/playbook.py:170
#: ops/api/playbook.py:171
msgid "This file can not be rename"
msgstr "該文件不能重命名"
#: ops/api/playbook.py:189
#: ops/api/playbook.py:190
msgid "File already exists"
msgstr "文件已存在"
#: ops/api/playbook.py:207
#: ops/api/playbook.py:208
msgid "File key is required"
msgstr "文件金鑰該欄位是必填項。"
#: ops/api/playbook.py:210
#: ops/api/playbook.py:211
msgid "This file can not be delete"
msgstr "無法刪除此文件"
@@ -4518,7 +4526,8 @@ msgstr "執行使用者"
msgid "Run as policy"
msgstr "使用者策略"
#: ops/models/job.py:222 terminal/notifications.py:174
#: ops/models/job.py:222 ops/serializers/job.py:92
#: terminal/notifications.py:174
msgid "Job"
msgstr "作業"
@@ -4530,7 +4539,7 @@ msgstr "Material"
msgid "Material Type"
msgstr "Material 類型"
#: ops/models/job.py:545
#: ops/models/job.py:548
msgid "Job Execution"
msgstr "作業執行"
@@ -4594,7 +4603,11 @@ msgstr "任務類型"
msgid "Is finished"
msgstr "是否完成"
#: ops/serializers/job.py:90
#: ops/serializers/job.py:89
msgid "Task id"
msgstr "任務 ID"
#: ops/serializers/job.py:98
msgid "You do not have permission for the current job."
msgstr "你沒有當前作業的權限。"
@@ -4697,10 +4710,6 @@ msgstr "請選擇一個組織後再保存"
msgid "Organization"
msgstr "組織"
#: orgs/mixins/serializers.py:26 rbac/serializers/rolebinding.py:27
msgid "Org name"
msgstr "組織名稱"
#: orgs/models.py:14
msgid "GLOBAL"
msgstr "全局組織"
@@ -5010,11 +5019,6 @@ msgstr "系統角色綁定"
msgid "Perms"
msgstr "權限"
#: rbac/serializers/role.py:28 terminal/models/applet/applet.py:34
#: terminal/models/virtualapp/virtualapp.py:20
msgid "Display name"
msgstr "顯示名稱"
#: rbac/serializers/rolebinding.py:60
msgid "Has bound this role"
msgstr "已經綁定"
@@ -5293,8 +5297,8 @@ msgstr ""
"統將自動以此電子信箱後綴建立使用者"
#: settings/serializers/auth/base.py:35
msgid "Forgot Password"
msgstr "忘記密碼"
msgid "Forgot Password URL"
msgstr "忘記密碼連結"
#: settings/serializers/auth/base.py:36
msgid "The URL for Forgotten Password on the user login page"
@@ -5389,15 +5393,15 @@ msgstr "綁定 DN"
#: settings/serializers/auth/ldap.py:47
msgid "Binding Distinguished Name"
msgstr "綁定專有名稱"
msgstr "綁定目錄管理員"
#: settings/serializers/auth/ldap.py:51
msgid "Binding password"
msgstr "原來的密碼"
msgstr "綁定密碼"
#: settings/serializers/auth/ldap.py:54
msgid "Search OU"
msgstr "系統架構"
msgstr "使用者 OU"
#: settings/serializers/auth/ldap.py:56
msgid ""
@@ -5562,7 +5566,7 @@ msgstr "域"
#: settings/serializers/auth/oidc.py:70
msgid "OpenID Connect"
msgstr "Connect"
msgstr "OpenID 連接"
#: settings/serializers/auth/oidc.py:73
msgid "Provider endpoint"
@@ -5687,7 +5691,7 @@ msgstr "驗證碼長度"
#: settings/serializers/auth/sms.py:26
msgid "Length of the sent verification code"
msgstr "發送驗證碼"
msgstr "發送驗證碼長度"
#: settings/serializers/auth/sms.py:31 settings/serializers/auth/sms.py:54
#: settings/serializers/auth/sms.py:62 settings/serializers/auth/sms.py:71
@@ -5904,8 +5908,8 @@ msgid "Chat AI"
msgstr "聊天 AI"
#: settings/serializers/feature.py:80
msgid "Base URL"
msgstr "JumpServer 地址"
msgid "GPT Base URL"
msgstr "GPT 地址"
#: settings/serializers/feature.py:81
msgid "The base URL of the GPT service. For example: https://api.openai.com/v1"
@@ -5994,15 +5998,13 @@ msgstr ""
#: settings/serializers/msg.py:33
msgid "The user to be used for email server authentication"
msgstr "SSO認證時如果沒有返回郵件地址將使用該後綴"
msgstr "登入郵件伺服器的使用者名稱。這通常是你的郵件地址"
#: settings/serializers/msg.py:37
msgid ""
"Password to use for the email server. It is used in conjunction with `User` "
"when authenticating to the email server"
msgstr ""
"用於電子郵件伺服器的密碼。在向電子郵件伺服器進行身份驗證時,它與使用者一起使"
"用"
msgstr "登入郵件伺服器的密碼"
#: settings/serializers/msg.py:40
msgid "Sender"
@@ -6968,6 +6970,11 @@ msgstr "社區版"
msgid "Enterprise"
msgstr "企業版"
#: terminal/models/applet/applet.py:34
#: terminal/models/virtualapp/virtualapp.py:20
msgid "Display name"
msgstr "顯示名稱"
#: terminal/models/applet/applet.py:36
#: terminal/models/virtualapp/virtualapp.py:22
msgid "Author"
@@ -9094,7 +9101,7 @@ msgstr "Action 執行 ID"
#: xpack/plugins/cloud/manager.py:97
msgid "Synchronization regions"
msgstr "沒有需要同步的使用者"
msgstr "同步地區"
#: xpack/plugins/cloud/manager.py:115
#, python-format
@@ -9107,7 +9114,7 @@ msgstr ""
msgid "Failed to synchronize the instance \"%s\""
msgstr "Unable to synchronize instance %s"
#: xpack/plugins/cloud/manager.py:334
#: xpack/plugins/cloud/manager.py:337
#, python-format
msgid ""
"The updated platform of asset \"%s\" is inconsistent with the original "
@@ -9116,42 +9123,42 @@ msgstr ""
"The update platform of asset \"%s\" is not consistent with the original "
"platform type. Skip platform and protocol updates"
#: xpack/plugins/cloud/manager.py:390
#: xpack/plugins/cloud/manager.py:393
#, python-format
msgid "The asset \"%s\" already exists"
msgstr "\"資產 \"%s\" 已存在"
#: xpack/plugins/cloud/manager.py:392
#: xpack/plugins/cloud/manager.py:395
#, python-format
msgid "Update asset \"%s\""
msgstr "更新資產 \"%s\""
#: xpack/plugins/cloud/manager.py:395
#: xpack/plugins/cloud/manager.py:398
#, python-format
msgid "Asset \"%s\" has been updated"
msgstr "資產 \"%s\" 已更新"
#: xpack/plugins/cloud/manager.py:405
#: xpack/plugins/cloud/manager.py:408
#, python-format
msgid "Prepare to create asset \"%s\""
msgstr "Preparing to create asset %s"
#: xpack/plugins/cloud/manager.py:426
#: xpack/plugins/cloud/manager.py:429
#, python-format
msgid "Set nodes \"%s\""
msgstr "Delete Node: \"%s\""
#: xpack/plugins/cloud/manager.py:452
#: xpack/plugins/cloud/manager.py:455
#, python-format
msgid "Set accounts \"%s\""
msgstr "刪除帳號: %s"
#: xpack/plugins/cloud/manager.py:468
#: xpack/plugins/cloud/manager.py:471
#, python-format
msgid "Set protocols \"%s\""
msgstr "設定協議 \"%s\""
#: xpack/plugins/cloud/manager.py:482 xpack/plugins/cloud/tasks.py:27
#: xpack/plugins/cloud/manager.py:485 xpack/plugins/cloud/tasks.py:27
msgid "Run sync instance task"
msgstr "執行同步實例任務"

View File

@@ -924,7 +924,7 @@
"RecentSession": "Recent sessions",
"RecentlyUsed": "Recently",
"Recipient": "Recipient",
"RecipientHelpText": "If both recipient a and b are set, the account's key will be split into two parts",
"RecipientHelpText": "If both recipients A and B are set, the account's ciphertext will be split into two parts; if only one recipient is set, the key will not be split.",
"RecipientServer": "Receiving server",
"Reconnect": "Reconnect",
"Refresh": "Refresh",
@@ -963,7 +963,7 @@
"RequiredAssetOrNode": "Please select at least one asset or node",
"RequiredContent": "Please input command",
"RequiredEntryFile": "This file acts as the entry point for running and must be present",
"RequiredRunas": "Please enter the execution user",
"RequiredRunas": "Enter exec user",
"RequiredSystemUserErrMsg": "Please select account",
"RequiredUploadFile": "Please upload the file!",
"Reset": "Reset",
@@ -1101,7 +1101,6 @@
"Setting": "Setting",
"SettingInEndpointHelpText": "Configure service address and port in system settings / component settings / server endpoints",
"Settings": "System settings",
"Settings...": "Settings...",
"Show": "Display",
"ShowAssetAllChildrenNode": "Show all sub-nodes assets",
"ShowAssetOnlyCurrentNode": "Only show current node assets",
@@ -1384,5 +1383,10 @@
"ZoneList": "Zones",
"ZoneUpdate": "Update the zone",
"forceEnableMFAHelpText": "If force enable, user can not disable by themselves",
"removeWarningMsg": "Are you sure you want to remove"
"removeWarningMsg": "Are you sure you want to remove",
"RetrySelected": "Retry selected",
"ApproveSelected": "Approve selected",
"Running": "Running",
"AdhocCreate": "Create the command",
"UploadHelpText": "Please upload a .zip file containing the following sample directory structure"
}

View File

@@ -699,7 +699,7 @@
"LoginAssetToday": "本日のアクティブな資産数",
"LoginAssets": "アクティブな資産",
"LoginConfirm": "ログインレビュー",
"LoginConfirmUser": "確認方法",
"LoginConfirmUser": "ログインレビュー担当者",
"LoginCount": "ログイン回数",
"LoginDate": "ログイン日",
"LoginFailed": "ログイン失敗",
@@ -957,7 +957,7 @@
"RecentSession": "最近の会話",
"RecentlyUsed": "最近使用",
"Recipient": "受取人",
"RecipientHelpText": "A B受信者が設定されている場合、アカウントの鍵は前後二つに分割されます",
"RecipientHelpText": "受信者 A と B が同時に設定されている場合、アカウントの暗号文は 2 つの部分に分割されます。受信者が 1 つだけ設定されている場合、キーは分割されません。",
"RecipientServer": "受信サーバー",
"Reconnect": "再接続",
"Refresh": "更新",
@@ -996,7 +996,7 @@
"RequiredAssetOrNode": "少なくとも一つの資産またはノードを選択してください",
"RequiredContent": "コマンドを入力してください",
"RequiredEntryFile": "このファイルは実行のエントリポイントとして存在する必要があります",
"RequiredRunas": "実行ユーザーを入力してください",
"RequiredRunas": "実行ユーザーを入力",
"RequiredSystemUserErrMsg": "アカウントを選択してください",
"RequiredUploadFile": "ファイルをアップロードしてください!",
"Reset": "復元",
@@ -1135,7 +1135,6 @@
"Setting": "設定",
"SettingInEndpointHelpText": "システム設定/コンポーネント設定/サーバーエンドポイントでサービスのアドレスとポートを設定してください",
"Settings": "システム設定",
"Settings...": "設定...",
"Show": "表示",
"ShowAssetAllChildrenNode": "すべての子ノードの資産を表示",
"ShowAssetOnlyCurrentNode": "現在のノードアセットのみを表示",
@@ -1423,5 +1422,7 @@
"ZoneList": "地域リスト",
"ZoneUpdate": "更新エリア",
"forceEnableMFAHelpText": "強制的に有効化すると、ユーザーは自分で無効化することができません。",
"removeWarningMsg": "削除してもよろしいですか"
"removeWarningMsg": "削除してもよろしいですか",
"AdhocCreate": "アドホックコマンドを作成",
"UploadHelpText": "次のサンプル構造ディレクトリを含む .zip ファイルをアップロードしてください。"
}

View File

@@ -246,7 +246,7 @@
"CeleryTaskLog": "Celery任务日志",
"Certificate": "证书",
"CertificateKey": "客户端密钥",
"ChangeCredentials": "改密",
"ChangeCredentials": "账号改密",
"ChangeCredentialsHelpText": "定时修改账号密钥密码。账号随机生成密码,并同步到目标资产,如果同步成功,更新该账号的密码",
"ChangeField": "变更字段",
"ChangeOrganization": "更改组织",
@@ -508,7 +508,7 @@
"FeiShuOAuth": "飞书认证",
"FeiShuTest": "测试",
"FieldRequiredError": "此字段是必填项",
"FileExplorer": "文件浏览",
"FileExplorer": "文件管理",
"FileManagement": "文件管理",
"FileNameTooLong": "文件名太长",
"FileSizeExceedsLimit": "文件大小超出限制",
@@ -676,7 +676,7 @@
"LoginAssetToday": "今日活跃资产数",
"LoginAssets": "活跃资产",
"LoginConfirm": "登录复核",
"LoginConfirmUser": "确认方式",
"LoginConfirmUser": "登录复核 受理人",
"LoginCount": "登录次数",
"LoginDate": "登录日期",
"LoginFailed": "登录失败",
@@ -926,7 +926,7 @@
"RecentSession": "最近会话",
"RecentlyUsed": "最近使用",
"Recipient": "接收人",
"RecipientHelpText": "若收件人 A B 都设置,账号的密将被拆分成前后两部分",
"RecipientHelpText": "如果同时设置了收件人A和B,账号的密将被拆分为两部分;如果只设置了一个收件人,密钥则不会被拆分。",
"RecipientServer": "接收服务器",
"Reconnect": "重新连接",
"Refresh": "刷新",
@@ -1103,7 +1103,6 @@
"Setting": "设置",
"SettingInEndpointHelpText": "在 系统设置 / 组件设置 / 服务端点 中配置服务地址和端口",
"Settings": "系统设置",
"Settings...": "设置...",
"Show": "显示",
"ShowAssetAllChildrenNode": "显示所有子节点资产",
"ShowAssetOnlyCurrentNode": "仅显示当前节点资产",
@@ -1385,5 +1384,11 @@
"ZoneList": "网域列表",
"ZoneUpdate": "更新网域",
"forceEnableMFAHelpText": "如果强制启用,用户无法自行禁用",
"removeWarningMsg": "你确定要移除"
"removeWarningMsg": "你确定要移除",
"VaultHCPMountPoint": "Vault 服务器的挂载点,默认为 jumpserver",
"RetrySelected": "重试所选",
"ApproveSelected": "审批所选",
"Running": "运行中",
"AdhocCreate": "创建命令",
"UploadHelpText": "请上传包含以下示例结构目录的 .zip 压缩文件"
}

View File

@@ -903,7 +903,7 @@
"LoginCity": "登入城市",
"LoginConfig": "登入配置",
"LoginConfirm": "登入覆核",
"LoginConfirmUser": "確認方式",
"LoginConfirmUser": "登錄複核 受理人",
"LoginCount": "登入次數",
"LoginDate": "登入日期",
"LoginFailed": "登入失敗",
@@ -1239,7 +1239,7 @@
"RecentSession": "最近會話",
"RecentlyUsed": "最近使用",
"Recipient": "接收人",
"RecipientHelpText": "若收件人 A B 都設置,帳號的金鑰將被拆分成前後兩部分。如用戶未設置加密密碼 - 請前往個人資訊 -> 偏好設置中設置加密密碼",
"RecipientHelpText": "如果同時設定了收件人A和B,帳號的密文將被拆分為兩部分;如果只設定了一個收件人,密鑰則不會被拆分。",
"RecipientServer": "接收伺服器",
"Reconnect": "重新連接",
"Refresh": "刷新",
@@ -1459,7 +1459,6 @@
"Setting": "設置",
"SettingInEndpointHelpText": "在 系統設置 / 組件設置 / 服務端點 中配置服務地址和埠",
"Settings": "系統設置",
"Settings...": " Settings...",
"Show": "顯示",
"ShowAssetAllChildrenNode": "顯示所有子節點資產",
"ShowAssetOnlyCurrentNode": "僅顯示當前節點資產",
@@ -1909,7 +1908,7 @@
"consult": "諮詢",
"containerName": "容器名稱",
"contents": "內容",
"createAdhoc": "創建命令",
"AdhocCreate": "創建命令",
"createBy": "創建者",
"createErrorMsg": "創建失敗",
"createSuccessMsg": "導入創建成功,總共:{count}",
@@ -2268,5 +2267,6 @@
"weComTest": "測試",
"week": "周",
"weekOf": "周的星期",
"wildcardsAllowed": "允許的通配符"
"wildcardsAllowed": "允許的通配符",
"UploadHelpText": "請上傳包含以下範例結構目錄的 .zip 壓縮文件"
}

View File

@@ -209,6 +209,9 @@
"asset": "asset",
"cols": "cols",
"confirm": "confirm",
"connectDisabledTipsNoAccount": "Tips: No valid authorization account found, current resource cannot be connected. Please contact the administrator for assistance",
"connectDisabledTipsNoConnectMethod": "Tips: No valid connection method found, current resource cannot be connected. Please contact the administrator for assistance",
"connectDisabledTipsMethodDisabled": "Tips: No valid remote application deployment machine found, current resource cannot be connected. Please contact the administrator for assistance",
"connect info": "connect info",
"download": "download",
"rows": "rows",

View File

@@ -207,6 +207,9 @@
"asset": "资产",
"cols": "列数",
"confirm": "确认",
"connectDisabledTipsNoAccount": "提示:未找到有效的授权账号,当前资源无法连接,请联系管理员进行处理",
"connectDisabledTipsNoConnectMethod": "提示:未找到有效的连接方式,当前资源无法连接,请联系管理员进行处理",
"connectDisabledTipsMethodDisabled": "提示:未找到有效的远程应用发布机,当前资源无法连接,请联系管理员进行处理",
"connect info": "连接信息",
"download": "下载",
"rows": "行数",

View File

@@ -106,7 +106,7 @@ class DateTimeMixin:
@lazyproperty
def user_login_logs_on_the_system_queryset(self):
qs = UserLoginLog.objects.all()
qs = UserLoginLog.objects.filter(status=LoginStatusChoices.success)
qs = self.get_logs_queryset_filter(qs, 'datetime')
queryset = qs.filter(username__in=construct_userlogin_usernames(self.users))
return queryset

View File

@@ -19,7 +19,7 @@ def kill_ansible_ssh_process(pid):
for child in process.children(recursive=True):
if not _should_kill(child):
return
continue
try:
child.kill()
except Exception as e:

View File

@@ -105,7 +105,7 @@ class PlaybookRunner:
shutil.rmtree(private_env)
kwargs = dict(kwargs)
if self.isolate and not is_macos:
if self.isolate and not is_macos():
kwargs['process_isolation'] = True
kwargs['process_isolation_executable'] = 'bwrap'

View File

@@ -270,7 +270,10 @@ class JobExecutionTaskDetail(APIView):
execution = get_object_or_404(JobExecution, pk=task_id, creator=request.user)
return Response(data={
'status': execution.status,
'status': {
'value': execution.status,
'label': execution.get_status_display()
},
'is_finished': execution.is_finished,
'is_success': execution.is_success,
'time_cost': execution.time_cost,

View File

@@ -248,6 +248,9 @@ class JobExecution(JMSOrgBaseModel):
# clean up zombie execution
def get_status_display(self):
return dict(JobStatus.choices).get(self.status, self.status)
@classmethod
def clean_unexpected_execution(cls):
for execution in cls.objects.filter(status__in=[JobStatus.running]).all():
@@ -420,6 +423,7 @@ class JobExecution(JMSOrgBaseModel):
this.result.update(cb.result)
else:
this.result = cb.result
this.result = json.loads(json.dumps(this.result).replace('\\u0000', ''))
this.finish_task()
def finish_task(self):

View File

@@ -1,3 +1,4 @@
from django.conf import settings
from django.template.loader import render_to_string
from django.utils.translation import gettext
from django.utils.translation import gettext_lazy as _
@@ -134,9 +135,10 @@ class ServerPerformanceCheckUtil(object):
def initial_terminals(self):
terminals = []
for terminal in Terminal.objects.filter(is_deleted=False).exclude(
type__in=[TerminalType.core, TerminalType.celery]
):
exclude_types = [TerminalType.core, TerminalType.celery, TerminalType.kael]
if not settings.XPACK_LICENSE_IS_VALID:
exclude_types.append(TerminalType.magnus)
for terminal in Terminal.objects.filter(is_deleted=False).exclude(type__in=exclude_types):
if not terminal.is_active:
continue
terminal.stat = Status.get_terminal_latest_stat(terminal)

View File

@@ -84,6 +84,14 @@ class JobExecutionSerializer(BulkOrgResourceModelSerializer):
fields = read_only_fields + [
"job", "parameters", "creator"
]
extra_kwargs = {
"task_id": {
"label": _("Task id"),
},
"job": {
"label": _("Job"),
}
}
def validate_job(self, job_obj):
if job_obj.creator != self.context['request'].user:

View File

@@ -1,10 +1,11 @@
# Generated by Django 4.1.13 on 2024-05-09 03:16
import uuid
import django.contrib.auth.models
import django.contrib.contenttypes.models
from django.db import migrations, models
import django.db.models.deletion
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
@@ -54,6 +55,7 @@ class Migration(migrations.Migration):
'proxy': True,
'indexes': [],
'constraints': [],
'verbose_name': 'ContentType'
},
bases=('contenttypes.contenttype',),
managers=[

View File

@@ -25,7 +25,7 @@ class RoleSerializer(serializers.ModelSerializer):
extra_kwargs = {
'permissions': {'write_only': True},
'users_amount': {'label': _('Users amount')},
'display_name': {'label': _('Display name')}
'display_name': {'label': _('Name')}
}

View File

@@ -32,7 +32,7 @@ class AuthSettingSerializer(serializers.Serializer):
)
FORGOT_PASSWORD_URL = serializers.CharField(
required=False, allow_blank=True, max_length=1024,
label=_("Forgot Password"),
label=_("Forgot Password URL"),
help_text=_("The URL for Forgotten Password on the user login page")
)
LOGIN_REDIRECT_MSG_ENABLED = serializers.BooleanField(

View File

@@ -77,7 +77,7 @@ class ChatAISettingSerializer(serializers.Serializer):
required=False, label=_('Chat AI')
)
GPT_BASE_URL = serializers.CharField(
allow_blank=True, required=False, label=_('Base URL'),
allow_blank=True, required=False, label=_('GPT Base URL'),
help_text=_('The base URL of the GPT service. For example: https://api.openai.com/v1')
)
GPT_API_KEY = EncryptedField(

View File

@@ -14,8 +14,11 @@
RDS_fSingleSessionPerUser: 1
RDS_MaxDisconnectionTime: 60000
RDS_RemoteAppLogoffTimeLimit: 0
TinkerInstaller: Tinker_Installer.exe
INSTALL_APPLETS: true
PYTHON_VERSION: 3.11.6
CHROME_VERSION: 118.0.5993.118
CHROME_DRIVER_VERSION: 118.0.5993.70
TINKER_VERSION: v0.1.6
tasks:
- block:
@@ -25,9 +28,11 @@
method: GET
follow_redirects: none
status_code: [200, 301, 302, 303, 307, 308]
validate_certs: "{{ not IGNORE_VERIFY_CERTS }}"
register: core_host_redirects
- fail:
- name: Check failed
fail:
msg: "CORE_HOST {{ CORE_HOST }} is redirecting to {{ core_host_redirects.location }}, please use the final url"
when: core_host_redirects.status_code >= 300 and core_host_redirects.status_code < 400
@@ -38,7 +43,7 @@
include_management_tools: yes
register: rds_install
- name: Stop Tinker before install (jumpserver)
- name: Stop Tinker before install
ansible.windows.win_powershell:
script: |
if (Get-Process -Name 'tinker' -ErrorAction SilentlyContinue) {
@@ -48,36 +53,36 @@
$Ansible.Changed = $false
}
- name: Download JumpServer Tinker installer (jumpserver)
- name: Download JumpServer Tinker installer
ansible.windows.win_get_url:
url: "{{ APPLET_DOWNLOAD_HOST }}/download/applets/{{ TinkerInstaller }}"
dest: "{{ ansible_env.TEMP }}\\{{ TinkerInstaller }}"
url: "{{ APPLET_DOWNLOAD_HOST }}/download/applets/Tinker_Installer_{{ TINKER_VERSION }}.exe"
dest: "{{ ansible_env.TEMP }}\\Tinker_Installer_{{ TINKER_VERSION }}.exe"
validate_certs: "{{ not IGNORE_VERIFY_CERTS }}"
- name: Install JumpServer Tinker (jumpserver)
- name: Install JumpServer Tinker
ansible.windows.win_package:
path: "{{ ansible_env.TEMP }}\\{{ TinkerInstaller }}"
path: "{{ ansible_env.TEMP }}\\Tinker_Installer_{{ TINKER_VERSION }}.exe"
arguments:
- /VERYSILENT
- /SUPPRESSMSGBOXES
- /NORESTART
state: present
- name: Set Tinkerd on the global system path (jumpserver)
- name: Set Tinkerd on the global system path
ansible.windows.win_path:
elements:
- '%USERPROFILE%\AppData\Local\Programs\Tinker\'
scope: user
- name: Download python-3.11.6
- name: Download python-{{ PYTHON_VERSION }}
ansible.windows.win_get_url:
url: "{{ APPLET_DOWNLOAD_HOST }}/download/applets/python-3.11.6-amd64.exe"
dest: "{{ ansible_env.TEMP }}\\python-3.11.6-amd64.exe"
url: "{{ APPLET_DOWNLOAD_HOST }}/download/applets/python-{{ PYTHON_VERSION }}-amd64.exe"
dest: "{{ ansible_env.TEMP }}\\python-{{ PYTHON_VERSION }}-amd64.exe"
validate_certs: "{{ not IGNORE_VERIFY_CERTS }}"
- name: Install the python-3.11.6
- name: Install the python-{{ PYTHON_VERSION }}
ansible.windows.win_package:
path: "{{ ansible_env.TEMP }}\\python-3.11.6-amd64.exe"
path: "{{ ansible_env.TEMP }}\\python-{{ PYTHON_VERSION }}-amd64.exe"
arguments:
- /quiet
- InstallAllUsers=1
@@ -160,7 +165,7 @@
script: |
pip install -r '{{ ansible_env.TEMP }}\pip_packages\pip_packages\requirements.txt' --no-index --find-links='{{ ansible_env.TEMP }}\pip_packages\pip_packages'
- name: Stop chromedriver before install (jumpserver)
- name: Stop chromedriver before install
ansible.windows.win_powershell:
script: |
if (Get-Process -Name 'chromedriver' -ErrorAction SilentlyContinue) {
@@ -170,12 +175,6 @@
$Ansible.Changed = $false
}
- name: Download chromedriver (Chrome)
ansible.windows.win_get_url:
url: "{{ APPLET_DOWNLOAD_HOST }}/download/applets/chromedriver-win64.zip"
dest: "{{ ansible_env.TEMP }}\\chromedriver-win64.zip"
validate_certs: "{{ not IGNORE_VERIFY_CERTS }}"
- name: Remove old chromedriver (Chrome)
ansible.windows.win_file:
path: "{{ item }}"
@@ -186,12 +185,24 @@
- C:\Program Files\JumpServer\drivers\chromedriver-win64
- C:\Program Files\JumpServer\drivers\chromedriver_win64
- name: Download chromedriver (Chrome)
ansible.windows.win_get_url:
url: "{{ APPLET_DOWNLOAD_HOST }}/download/applets/chromedriver-{{ CHROME_DRIVER_VERSION }}-win64.zip"
dest: "{{ ansible_env.TEMP }}\\chromedriver-{{ CHROME_DRIVER_VERSION }}-win64.zip"
validate_certs: "{{ not IGNORE_VERIFY_CERTS }}"
- name: Unzip chromedriver (Chrome)
community.windows.win_unzip:
src: "{{ ansible_env.TEMP }}\\chromedriver-win64.zip"
src: "{{ ansible_env.TEMP }}\\chromedriver-{{ CHROME_DRIVER_VERSION }}-win64.zip"
dest: C:\Program Files\JumpServer\drivers
- name: Stop Chrome before install (jumpserver)
- name: Download Chrome zip package (Chrome)
ansible.windows.win_get_url:
url: "{{ APPLET_DOWNLOAD_HOST }}/download/applets/chrome-{{ CHROME_VERSION }}-win.zip"
dest: "{{ ansible_env.TEMP }}\\chrome-{{ CHROME_VERSION }}-win.zip"
validate_certs: "{{ not IGNORE_VERIFY_CERTS }}"
- name: Stop Chrome before install
ansible.windows.win_powershell:
script: |
if (Get-Process -Name 'chrome' -ErrorAction SilentlyContinue) {
@@ -201,12 +212,6 @@
$Ansible.Changed = $false
}
- name: Download Chrome zip package (Chrome)
ansible.windows.win_get_url:
url: "{{ APPLET_DOWNLOAD_HOST }}/download/applets/chrome-win.zip"
dest: "{{ ansible_env.TEMP }}\\chrome-win.zip"
validate_certs: "{{ not IGNORE_VERIFY_CERTS }}"
- name: Remove old Chrome (Chrome)
ansible.windows.win_file:
path: "{{ item }}"
@@ -219,7 +224,7 @@
- name: Unzip Chrome (Chrome)
community.windows.win_unzip:
src: "{{ ansible_env.TEMP }}\\chrome-win.zip"
src: "{{ ansible_env.TEMP }}\\chrome-{{ CHROME_VERSION }}-win.zip"
dest: C:\Program Files\JumpServer\applications
- name: Check and Clean global system path (Chrome)

View File

@@ -242,7 +242,8 @@ class ConnectMethodUtil:
'razor': 'TERMINAL_RAZOR_ENABLED',
'magnus': 'TERMINAL_MAGNUS_ENABLED',
}
disabled_component = [comp for comp, attr in component_setting.items() if not getattr(settings, attr)]
disabled_component = [comp for comp, attr in component_setting.items() if
not (getattr(settings, attr) and settings.XPACK_LICENSE_IS_VALID)]
if not disabled_component:
return methods

View File

@@ -9,7 +9,14 @@ __all__ = ['IsSessionAssignee']
class IsSessionAssignee(permissions.IsAuthenticated):
def has_permission(self, request, view):
return True
if not request.user:
return False
if request.user.is_anonymous:
return False
if view.action == 'retrieve':
# Why return True? please refer to the issue: #11678
return True
return False
def has_object_permission(self, request, view, obj):
try:

View File

@@ -41,7 +41,7 @@ class TerminalSmallSerializer(serializers.ModelSerializer):
class TerminalSerializer(BulkModelSerializer):
session_online = serializers.ReadOnlyField(source='get_online_session_count', label=_('Online sessions'))
is_alive = serializers.BooleanField(read_only=True, label=_('Is alive'))
is_active = serializers.BooleanField(read_only=True, label='Is active')
is_active = serializers.BooleanField(read_only=True, label=_('Active'))
load = LabeledChoiceField(
read_only=True, choices=const.ComponentLoad.choices,
label=_('Load status')

View File

@@ -227,7 +227,7 @@ class MFABlockUtils(BlockUtilBase):
class LoginIpBlockUtil(BlockGlobalIpUtilBase):
LIMIT_KEY_TMPL = "_LOGIN_LIMIT_{}"
BLOCK_KEY_TMPL = "_LOGIN_BLOCK_{}"
BLOCK_KEY_TMPL = "_LOGIN_BLOCK_IP_{}"
def validate_emails(emails):