Compare commits

...

25 Commits

Author SHA1 Message Date
fit2bot
6892523df7 feat: Update v3.10.6 2024-03-19 14:59:06 +08:00
wangruidong
eb9f261459 fix: 作业命令用户隔离执行 2024-03-19 11:26:20 +08:00
wangruidong
c4d99ed8e2 fix: Another user can use this job id to spoof both the file name and
its contents
2024-03-18 14:21:46 +08:00
Bai
8d01c189f0 fix: 修复 Playbook 脚本文件问题 2024-03-14 11:40:42 +08:00
Bryan
a2701090de fix: 修复连接 Token 时报错的问题((1139, "Got error empty (sub)expression from regexp")) (#12769) 2024-03-07 12:37:12 +08:00
wangruidong
4582aa0a09 fix: 个别页面搜索不生效的问题 2024-03-05 11:19:58 +08:00
wangruidong
c7c379479f fix: 个别页面搜索不生效的问题 2024-03-05 11:19:58 +08:00
wangruidong
ce4479c23e fix: 控制台-仪表盘会话用户,资产排名不对 2024-03-04 11:13:46 +08:00
Bryan
eedc2f1b41 Merge pull request #12734 from jumpserver/master
v3.10.4 (branch-v3.10)
2024-02-29 16:39:55 +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
16 changed files with 77 additions and 55 deletions

1
GITSHA Normal file
View File

@@ -0,0 +1 @@
eb9f261459982d52c0e8844203ba95b7dd1741ee

View File

@@ -18,8 +18,8 @@ __all__ = [
class AccountBackupPlanViewSet(OrgBulkModelViewSet):
model = AccountBackupAutomation
filter_fields = ('name',)
search_fields = filter_fields
filterset_fields = ('name',)
search_fields = filterset_fields
ordering = ('name',)
serializer_class = serializers.AccountBackupSerializer

View File

@@ -20,8 +20,8 @@ __all__ = [
class AutomationAssetsListApi(generics.ListAPIView):
model = BaseAutomation
serializer_class = serializers.AutomationAssetsSerializer
filter_fields = ("name", "address")
search_fields = filter_fields
filterset_fields = ("name", "address")
search_fields = filterset_fields
def get_object(self):
pk = self.kwargs.get('pk')

View File

@@ -24,8 +24,8 @@ __all__ = [
class ChangeSecretAutomationViewSet(OrgBulkModelViewSet):
model = ChangeSecretAutomation
filter_fields = ('name', 'secret_type', 'secret_strategy')
search_fields = filter_fields
filterset_fields = ('name', 'secret_type', 'secret_strategy')
search_fields = filterset_fields
serializer_class = serializers.ChangeSecretAutomationSerializer

View File

@@ -20,8 +20,8 @@ __all__ = [
class GatherAccountsAutomationViewSet(OrgBulkModelViewSet):
model = GatherAccountsAutomation
filter_fields = ('name',)
search_fields = filter_fields
filterset_fields = ('name',)
search_fields = filterset_fields
serializer_class = serializers.GatherAccountAutomationSerializer

View File

@@ -20,8 +20,8 @@ __all__ = [
class PushAccountAutomationViewSet(OrgBulkModelViewSet):
model = PushAccountAutomation
filter_fields = ('name', 'secret_type', 'secret_strategy')
search_fields = filter_fields
filterset_fields = ('name', 'secret_type', 'secret_strategy')
search_fields = filterset_fields
serializer_class = serializers.PushAccountAutomationSerializer

View File

@@ -73,6 +73,10 @@ class FamilyMixin:
@classmethod
def get_nodes_all_children(cls, nodes, with_self=True):
pattern = cls.get_nodes_children_key_pattern(nodes, with_self=with_self)
if not pattern:
# 如果 pattern = ''
# key__iregex 报错 (1139, "Got error 'empty (sub)expression' from regexp")
return cls.objects.none()
return Node.objects.filter(key__iregex=pattern)
@classmethod

View File

@@ -8,7 +8,7 @@ __all__ = ['BASE_DIR', 'PROJECT_DIR', 'VERSION', 'CONFIG']
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_DIR = os.path.dirname(BASE_DIR)
VERSION = '2.0.0'
VERSION = 'v3.10.6'
CONFIG = ConfigManager.load_user_config()

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d04781f4f0b0de3ac5f707febb222e239553d6103bca0cec41ab2fd5ab044571
size 173799
oid sha256:1e0d36c8c54579103b6b550971fa4282581eb503c9499df55e37b0164391b607
size 173954

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-27 16:09+0800\n"
"POT-Creation-Date: 2024-03-19 11:12+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"
@@ -1749,7 +1749,7 @@ msgid "Domain"
msgstr "ドメイン"
#: assets/models/asset/common.py:165 assets/models/automations/base.py:18
#: assets/models/cmd_filter.py:32 assets/models/node.py:549
#: assets/models/cmd_filter.py:32 assets/models/node.py:553
#: perms/models/asset_permission.py:72 perms/serializers/permission.py:37
#: tickets/models/ticket/apply_asset.py:14 xpack/plugins/cloud/models.py:330
msgid "Node"
@@ -1889,7 +1889,7 @@ msgstr "デフォルトアセットグループ"
msgid "System"
msgstr "システム"
#: assets/models/label.py:19 assets/models/node.py:535
#: assets/models/label.py:19 assets/models/node.py:539
#: assets/serializers/cagegory.py:11 assets/serializers/cagegory.py:18
#: assets/serializers/cagegory.py:24
#: authentication/models/connection_token.py:29
@@ -1908,27 +1908,27 @@ msgstr "値"
msgid "Label"
msgstr "ラベル"
#: assets/models/node.py:165
#: assets/models/node.py:169
msgid "New node"
msgstr "新しいノード"
#: assets/models/node.py:463 audits/backends/db.py:65 audits/backends/db.py:66
#: assets/models/node.py:467 audits/backends/db.py:65 audits/backends/db.py:66
msgid "empty"
msgstr "空"
#: assets/models/node.py:534 perms/models/perm_node.py:28
#: assets/models/node.py:538 perms/models/perm_node.py:28
msgid "Key"
msgstr "キー"
#: assets/models/node.py:536 assets/serializers/node.py:20
#: assets/models/node.py:540 assets/serializers/node.py:20
msgid "Full value"
msgstr "フルバリュー"
#: assets/models/node.py:540 perms/models/perm_node.py:30
#: assets/models/node.py:544 perms/models/perm_node.py:30
msgid "Parent key"
msgstr "親キー"
#: assets/models/node.py:552
#: assets/models/node.py:556
msgid "Can match node"
msgstr "ノードを一致させることができます"
@@ -4098,27 +4098,27 @@ msgstr "タスクを作成中で、中断できません。後でもう一度お
msgid "Currently playbook is being used in a job"
msgstr "現在プレイブックは1つのジョブで使用されています"
#: ops/api/playbook.py:93
#: ops/api/playbook.py:97
msgid "Unsupported file content"
msgstr "サポートされていないファイルの内容"
#: ops/api/playbook.py:95 ops/api/playbook.py:141 ops/api/playbook.py:189
#: ops/api/playbook.py:99 ops/api/playbook.py:145 ops/api/playbook.py:193
msgid "Invalid file path"
msgstr "無効なファイルパス"
#: ops/api/playbook.py:167
#: ops/api/playbook.py:171
msgid "This file can not be rename"
msgstr "ファイル名を変更することはできません"
#: ops/api/playbook.py:186
#: ops/api/playbook.py:190
msgid "File already exists"
msgstr "ファイルは既に存在します。"
#: ops/api/playbook.py:204
#: ops/api/playbook.py:208
msgid "File key is required"
msgstr "ファイルキーこのフィールドは必須です"
#: ops/api/playbook.py:207
#: ops/api/playbook.py:211
msgid "This file can not be delete"
msgstr "このファイルを削除できません"
@@ -4401,6 +4401,10 @@ msgstr "終了しました"
msgid "Time cost"
msgstr "時を過ごす"
#: ops/serializers/job.py:87
msgid "You do not have permission for the current job."
msgstr "あなたは現在のジョブの権限を持っていません。"
#: ops/tasks.py:37
msgid "Run ansible task"
msgstr "Ansible タスクを実行する"
@@ -8646,7 +8650,7 @@ msgstr "そして"
msgid "Or"
msgstr "または"
#: xpack/plugins/cloud/manager.py:57
#: xpack/plugins/cloud/manager.py:56
msgid "Account unavailable"
msgstr "利用できないアカウント"

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e66a6fa05d25f1c502f95001b5ff0d0a310affd32eac939fd7b840845028074f
size 142298
oid sha256:931e599c8b599a5b58754a6e64cb9aa0db3d69ed76a703d30fb455e9cc10996c
size 142396

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-02-27 16:09+0800\n"
"POT-Creation-Date: 2024-03-19 11:12+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"
@@ -1741,7 +1741,7 @@ msgid "Domain"
msgstr "网域"
#: assets/models/asset/common.py:165 assets/models/automations/base.py:18
#: assets/models/cmd_filter.py:32 assets/models/node.py:549
#: assets/models/cmd_filter.py:32 assets/models/node.py:553
#: perms/models/asset_permission.py:72 perms/serializers/permission.py:37
#: tickets/models/ticket/apply_asset.py:14 xpack/plugins/cloud/models.py:330
msgid "Node"
@@ -1881,7 +1881,7 @@ msgstr "默认资产组"
msgid "System"
msgstr "系统"
#: assets/models/label.py:19 assets/models/node.py:535
#: assets/models/label.py:19 assets/models/node.py:539
#: assets/serializers/cagegory.py:11 assets/serializers/cagegory.py:18
#: assets/serializers/cagegory.py:24
#: authentication/models/connection_token.py:29
@@ -1900,27 +1900,27 @@ msgstr "值"
msgid "Label"
msgstr "标签"
#: assets/models/node.py:165
#: assets/models/node.py:169
msgid "New node"
msgstr "新节点"
#: assets/models/node.py:463 audits/backends/db.py:65 audits/backends/db.py:66
#: assets/models/node.py:467 audits/backends/db.py:65 audits/backends/db.py:66
msgid "empty"
msgstr "空"
#: assets/models/node.py:534 perms/models/perm_node.py:28
#: assets/models/node.py:538 perms/models/perm_node.py:28
msgid "Key"
msgstr "键"
#: assets/models/node.py:536 assets/serializers/node.py:20
#: assets/models/node.py:540 assets/serializers/node.py:20
msgid "Full value"
msgstr "全称"
#: assets/models/node.py:540 perms/models/perm_node.py:30
#: assets/models/node.py:544 perms/models/perm_node.py:30
msgid "Parent key"
msgstr "ssh私钥"
#: assets/models/node.py:552
#: assets/models/node.py:556
msgid "Can match node"
msgstr "可以匹配节点"
@@ -4047,27 +4047,27 @@ msgstr "正在创建任务,无法中断,请稍后重试。"
msgid "Currently playbook is being used in a job"
msgstr "当前 playbook 正在作业中使用"
#: ops/api/playbook.py:93
#: ops/api/playbook.py:97
msgid "Unsupported file content"
msgstr "不支持的文件内容"
#: ops/api/playbook.py:95 ops/api/playbook.py:141 ops/api/playbook.py:189
#: ops/api/playbook.py:99 ops/api/playbook.py:145 ops/api/playbook.py:193
msgid "Invalid file path"
msgstr "无效的文件路径"
#: ops/api/playbook.py:167
#: ops/api/playbook.py:171
msgid "This file can not be rename"
msgstr "该文件不能重命名"
#: ops/api/playbook.py:186
#: ops/api/playbook.py:190
msgid "File already exists"
msgstr "文件已存在"
#: ops/api/playbook.py:204
#: ops/api/playbook.py:208
msgid "File key is required"
msgstr "文件密钥该字段是必填项。"
#: ops/api/playbook.py:207
#: ops/api/playbook.py:211
msgid "This file can not be delete"
msgstr "无法删除此文件"
@@ -4350,6 +4350,10 @@ msgstr "是否完成"
msgid "Time cost"
msgstr "花费时间"
#: ops/serializers/job.py:87
msgid "You do not have permission for the current job."
msgstr "你没有当前作业的权限。"
#: ops/tasks.py:37
msgid "Run ansible task"
msgstr "运行 Ansible 任务"
@@ -8522,7 +8526,7 @@ msgstr "与"
msgid "Or"
msgstr "或"
#: xpack/plugins/cloud/manager.py:57
#: xpack/plugins/cloud/manager.py:56
msgid "Account unavailable"
msgstr "账号无效"

View File

@@ -142,7 +142,7 @@ class JobViewSet(OrgBulkModelViewSet):
status=400)
job_id = request.data.get('job_id', '')
job = get_object_or_404(Job, pk=job_id)
job = get_object_or_404(Job, pk=job_id, creator=request.user)
job_args = json.loads(job.args)
src_path_info = []
upload_file_dir = safe_join(settings.DATA_DIR, 'job_upload_file', job_id)
@@ -225,7 +225,7 @@ class JobAssetDetail(APIView):
def get(self, request, **kwargs):
execution_id = request.query_params.get('execution_id', '')
execution = get_object_or_404(JobExecution, id=execution_id)
execution = get_object_or_404(JobExecution, id=execution_id, creator=request.user)
return Response(data=execution.assent_result_detail)
@@ -239,7 +239,7 @@ class JobExecutionTaskDetail(APIView):
task_id = str(kwargs.get('task_id'))
with tmp_to_org(org):
execution = get_object_or_404(JobExecution, task_id=task_id)
execution = get_object_or_404(JobExecution, pk=task_id, creator=request.user)
return Response(data={
'status': execution.status,

View File

@@ -79,9 +79,13 @@ class PlaybookFileBrowserAPIView(APIView):
}
protected_files = ['root', 'main.yml']
def get_playbook(self, playbook_id):
playbook = get_object_or_404(Playbook, id=playbook_id, creator=self.request.user)
return playbook
def get(self, request, **kwargs):
playbook_id = kwargs.get('pk')
playbook = get_object_or_404(Playbook, id=playbook_id)
playbook = self.get_playbook(playbook_id)
work_path = playbook.work_dir
file_key = request.query_params.get('key', '')
if file_key:
@@ -101,7 +105,7 @@ class PlaybookFileBrowserAPIView(APIView):
def post(self, request, **kwargs):
playbook_id = kwargs.get('pk')
playbook = get_object_or_404(Playbook, id=playbook_id)
playbook = self.get_playbook(playbook_id)
work_path = playbook.work_dir
parent_key = request.data.get('key', '')
@@ -157,7 +161,7 @@ class PlaybookFileBrowserAPIView(APIView):
def patch(self, request, **kwargs):
playbook_id = kwargs.get('pk')
playbook = get_object_or_404(Playbook, id=playbook_id)
playbook = self.get_playbook(playbook_id)
work_path = playbook.work_dir
file_key = request.data.get('key', '')
@@ -197,7 +201,7 @@ class PlaybookFileBrowserAPIView(APIView):
def delete(self, request, **kwargs):
playbook_id = kwargs.get('pk')
playbook = get_object_or_404(Playbook, id=playbook_id)
playbook = self.get_playbook(playbook_id)
work_path = playbook.work_dir
file_key = request.query_params.get('key', '')
if not file_key:

View File

@@ -81,3 +81,8 @@ class JobExecutionSerializer(BulkOrgResourceModelSerializer):
fields = read_only_fields + [
"job", "parameters", "creator"
]
def validate_job(self, job_obj):
if job_obj.creator != self.context['request'].user:
raise serializers.ValidationError(_("You do not have permission for the current job."))
return job_obj

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "jumpserver"
version = "v3.9"
version = "v3.10.6"
description = "广受欢迎的开源堡垒机"
authors = ["ibuler <ibuler@qq.com>"]
license = "GPLv3"