fix: Add file upload restrictions for cronjob (#9710)

This commit is contained in:
ssongliu 2025-07-28 18:33:15 +08:00 committed by GitHub
parent ed288368ea
commit 82f978c683
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 50 additions and 3 deletions

View file

@ -991,6 +991,7 @@ const message = {
create: 'Create cron job',
edit: 'Edit cron job',
errImport: 'File content exception:',
errImportFormat: 'The scheduled task data or format is abnormal. Please check and try again!',
importHelper:
'Duplicate scheduled tasks will be automatically skipped during import. Tasks will be set to [Disabled] status by default, and set to [Pending Edit] status when data association is abnormal.',
changeStatus: 'Change status',

View file

@ -961,6 +961,7 @@ const message = {
create: 'Cronジョブを作成します',
edit: 'Cronジョブを編集します',
errImport: 'ファイル内容異常:',
errImportFormat: 'インポートしたスケジュールタスクのデータまたは形式が異常です確認して再試行してください',
importHelper:
'インポート時に同名のスケジュールタスクは自動的にスキップされますタスクはデフォルトで無効状態に設定されデータ関連付け異常時には編集待ち状態に設定されます',
changeStatus: 'ステータスを変更します',

View file

@ -951,6 +951,7 @@ const message = {
create: '크론 작업 생성',
edit: '크론 작업 수정',
errImport: '파일 내용 이상:',
errImportFormat: '가져온 예약 작업 데이터 또는 형식이 이상합니다. 확인 다시 시도하십시오!',
importHelper:
'가져오기 동일한 이름의 예약 작업은 자동으로 건너뜁니다. 작업은 기본적으로 비활성화 상태로 설정되며, 데이터 연동 이상 편집 대기 상태로 설정됩니다.',
changeStatus: '상태 변경',

View file

@ -982,6 +982,7 @@ const message = {
create: 'Cipta tugas cron',
edit: 'Edit tugas cron',
errImport: 'Kandungan fail tidak normal:',
errImportFormat: 'Data atau format tugas terjadual yang diimport tidak normal. Sila semak dan cuba lagi!',
importHelper:
'Tugas terjadual dengan nama sama akan dilangkau secara automatik semasa import. Tugas akan ditetapkan ke status Lumpuh secara lalai, dan ditetapkan ke status Menunggu Edit apabila perkaitan data tidak normal.',
changeStatus: 'Tukar status',

View file

@ -978,6 +978,8 @@ const message = {
create: 'Criar tarefa cron',
edit: 'Editar tarefa cron',
errImport: 'Conteúdo do arquivo anormal:',
errImportFormat:
'Os dados ou formato da tarefa agendada estão anormais. Por favor, verifique e tente novamente!',
importHelper:
'Tarefas agendadas duplicadas serão automaticamente ignoradas durante a importação. As tarefas serão definidas como status Desativado por padrão, e como status Aguardando Edição quando a associação de dados for anormal.',
changeStatus: 'Alterar status',

View file

@ -975,6 +975,8 @@ const message = {
create: 'Создать задачу cron',
edit: 'Редактировать задачу cron',
errImport: 'Аномальное содержимое файла:',
errImportFormat:
'Данные или формат запланированной задачи ненормальны. Пожалуйста, проверьте и повторите попытку!',
importHelper:
'Повторяющиеся запланированные задачи будут автоматически пропущены при импорте. По умолчанию задачи устанавливаются в статус Отключено, а при аномальной ассоциации данных - в статус Ожидает редактирования.',
changeStatus: 'Изменить статус',

View file

@ -1003,6 +1003,7 @@ const message = {
create: 'Cron görevi oluştur',
edit: 'Cron görevini düzenle',
errImport: 'Dosya içeriği anormal:',
errImportFormat: 'Zamanlanmış görev verileri veya biçimi anormal. Lütfen kontrol edip tekrar deneyin!',
importHelper:
'İçe aktarım sırasında aynı isimli zamanlanmış görevler otomatik olarak atlanacaktır. Görevler varsayılan olarak Devre Dışı durumuna ayarlanır ve veri ilişkilendirme anormalse Düzenleme Bekliyor durumuna ayarlanır.',
changeStatus: 'Durumu değiştir',

View file

@ -945,6 +945,7 @@ const message = {
create: '創建計劃任務',
edit: '編輯計劃任務',
errImport: '文件內容異常:',
errImportFormat: '導入的計劃任務數據或格式異常請檢查後重試',
importHelper:
'導入時將自動跳過重名計劃任務任務默認設置為停用狀態數據關聯異常時設置為待編輯狀態',
changeStatus: '狀態修改',

View file

@ -943,6 +943,7 @@ const message = {
create: '创建计划任务',
edit: '编辑计划任务',
errImport: '文件内容异常',
errImportFormat: '导入的计划任务数据或格式异常请检查后重试',
importHelper:
'导入时将自动跳过重名计划任务任务默认设置为停用状态数据关联异常时设置为待编辑状态',
changeStatus: '状态修改',

View file

@ -9,6 +9,7 @@
class="upload mt-2"
:show-file-list="false"
:limit="1"
:accept="'.json'"
:on-change="fileOnChange"
:on-exceed="handleExceed"
v-model:file-list="uploaderFiles"
@ -110,8 +111,20 @@ const fileOnChange = (_uploadFile: UploadFile, uploadFiles: UploadFiles) => {
reader.onload = (e) => {
try {
const content = e.target.result as string;
data.value = JSON.parse(content) as Cronjob.CronjobTrans;
console.log(data.value);
const parsed = JSON.parse(content) as Cronjob.CronjobTrans;
if (!Array.isArray(parsed)) {
MsgError(i18n.global.t('cronjob.errImportFormat'));
loading.value = false;
return;
}
for (const item of parsed) {
if (!checkDataFormat(item)) {
MsgError(i18n.global.t('cronjob.errImportFormat'));
loading.value = false;
return;
}
}
data.value = parsed;
loading.value = false;
} catch (error) {
MsgError(i18n.global.t('cronjob.errImport') + error.message);
@ -128,6 +141,29 @@ const handleExceed: UploadProps['onExceed'] = (files) => {
uploadRef.value!.handleStart(file);
};
const checkDataFormat = (item: any) => {
if (!item.name) {
return false;
}
const cronjobTypes = [
'shell',
'app',
'website',
'database',
'directory',
'log',
'curl',
'cutWebsiteLog',
'clean',
'snapshot',
'ntp',
];
if (!item.type || cronjobTypes.indexOf(item.type) === -1) {
return false;
}
return true;
};
const onImport = async () => {
await importCronjob(selects.value).then(() => {
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));

View file

@ -12,7 +12,7 @@ import i18n from '@/lang';
const buttons = [
{
label: i18n.global.t('menu.settings', 2),
label: i18n.global.t('menu.config', 2),
path: '/hosts/ssh/ssh',
},
{