diff --git a/apps/jumpserver/conf.py b/apps/jumpserver/conf.py index c3622b61c..80790eb2e 100644 --- a/apps/jumpserver/conf.py +++ b/apps/jumpserver/conf.py @@ -599,6 +599,8 @@ class Config(dict): 'GPT_PROXY': '', 'GPT_MODEL': 'gpt-3.5-turbo', 'VIRTUAL_APP_ENABLED': False, + + 'FILE_UPLOAD_SIZE_LIMIT_MB': 200 } old_config_map = { diff --git a/apps/jumpserver/settings/custom.py b/apps/jumpserver/settings/custom.py index d9eb41332..fad5f0e9d 100644 --- a/apps/jumpserver/settings/custom.py +++ b/apps/jumpserver/settings/custom.py @@ -221,3 +221,5 @@ GPT_PROXY = CONFIG.GPT_PROXY GPT_MODEL = CONFIG.GPT_MODEL VIRTUAL_APP_ENABLED = CONFIG.VIRTUAL_APP_ENABLED + +FILE_UPLOAD_SIZE_LIMIT_MB = CONFIG.FILE_UPLOAD_SIZE_LIMIT_MB diff --git a/apps/locale/ja/LC_MESSAGES/django.mo b/apps/locale/ja/LC_MESSAGES/django.mo index 5d7d6a0b8..53a43b4ee 100644 --- a/apps/locale/ja/LC_MESSAGES/django.mo +++ b/apps/locale/ja/LC_MESSAGES/django.mo @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d9296340c0815fcda81bc7370051b1408225ba63ab7067b397595d4dfb334f7 -size 167881 +oid sha256:d98ad65b020a577f1e7542c3e8c0c2a289b67d12c39f4d35a5db667fd218e0ea +size 168292 diff --git a/apps/locale/ja/LC_MESSAGES/django.po b/apps/locale/ja/LC_MESSAGES/django.po index 833c315b5..b95854a00 100644 --- a/apps/locale/ja/LC_MESSAGES/django.po +++ b/apps/locale/ja/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-13 16:13+0800\n" +"POT-Creation-Date: 2023-12-13 18:29+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -4051,10 +4051,16 @@ msgstr "タスクは存在しません" msgid "Task {} args or kwargs error" msgstr "タスク実行パラメータエラー" -#: ops/api/job.py:124 +#: ops/api/job.py:132 msgid "Duplicate file exists" msgstr "重複したファイルが存在する" +#: ops/api/job.py:137 +#, python-brace-format +msgid "" +"File size exceeds maximum limit. Please select a file smaller than {limit}MB" +msgstr "ファイルサイズが最大制限を超えています。{limit}MB より小さいファイルを選択してください。" + #: ops/api/playbook.py:39 msgid "Currently playbook is being used in a job" msgstr "現在プレイブックは1つのジョブで使用されています" diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 8f6f29a95..8e506d7f2 100644 --- a/apps/locale/zh/LC_MESSAGES/django.mo +++ b/apps/locale/zh/LC_MESSAGES/django.mo @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37662b3fc6df22480304d2a5f90cf156ba7d4e0249ec11076e5018daab545714 -size 137610 +oid sha256:92bd4bd4a6d342dcd259215f16baeedb17fd95d321d4527bb3601ce1dfd72202 +size 137882 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 068613cd6..0b1265625 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-13 16:13+0800\n" +"POT-Creation-Date: 2023-12-13 18:29+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -4003,10 +4003,16 @@ msgstr "任务 {} 不存在" msgid "Task {} args or kwargs error" msgstr "任务 {} 执行参数错误" -#: ops/api/job.py:124 +#: ops/api/job.py:132 msgid "Duplicate file exists" msgstr "存在同名文件" +#: ops/api/job.py:137 +#, python-brace-format +msgid "" +"File size exceeds maximum limit. Please select a file smaller than {limit}MB" +msgstr "文件大小超过最大限制。请选择小于 {limit}MB 的文件。" + #: ops/api/playbook.py:39 msgid "Currently playbook is being used in a job" msgstr "当前 playbook 正在作业中使用" diff --git a/apps/ops/api/job.py b/apps/ops/api/job.py index 41822b970..90c5edbc3 100644 --- a/apps/ops/api/job.py +++ b/apps/ops/api/job.py @@ -99,7 +99,7 @@ class JobViewSet(OrgBulkModelViewSet): lambda: run_ops_job_execution.apply_async((str(execution.id),), task_id=str(execution.id))) @staticmethod - def get_duplicates_filenames(files): + def get_duplicates_files(files): seen = set() duplicates = set() for file in files: @@ -109,6 +109,14 @@ class JobViewSet(OrgBulkModelViewSet): seen.add(file) return list(duplicates) + @staticmethod + def get_exceeds_limit_files(files): + exceeds_limit_files = [] + for file in files: + if file.size > settings.FILE_UPLOAD_SIZE_LIMIT_MB * 1024 * 1024: + exceeds_limit_files.append(file) + return exceeds_limit_files + @action(methods=[POST], detail=False, serializer_class=FileSerializer, permission_classes=[IsValidUser, ], url_path='upload') def upload(self, request, *args, **kwargs): @@ -117,11 +125,18 @@ class JobViewSet(OrgBulkModelViewSet): if not serializer.is_valid(): msg = 'Upload data invalid: {}'.format(serializer.errors) - return Response({'msg': msg}, status=400) + return Response({'error': msg}, status=400) - same_filenames = self.get_duplicates_filenames(uploaded_files) - if same_filenames: - return Response({'msg': _("Duplicate file exists")}, status=400) + same_files = self.get_duplicates_files(uploaded_files) + if same_files: + return Response({'error': _("Duplicate file exists")}, status=400) + + exceeds_limit_files = self.get_exceeds_limit_files(uploaded_files) + if exceeds_limit_files: + return Response( + {'error': _("File size exceeds maximum limit. Please select a file smaller than {limit}MB").format( + limit=settings.FILE_UPLOAD_SIZE_LIMIT_MB)}, + status=400) job_id = request.data.get('job_id', '') job = get_object_or_404(Job, pk=job_id)