mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-09-10 16:46:26 +08:00
fix: Add file upload restrictions for cronjob (#9710)
This commit is contained in:
parent
ed288368ea
commit
82f978c683
11 changed files with 50 additions and 3 deletions
|
@ -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',
|
||||
|
|
|
@ -961,6 +961,7 @@ const message = {
|
|||
create: 'Cronジョブを作成します',
|
||||
edit: 'Cronジョブを編集します',
|
||||
errImport: 'ファイル内容異常:',
|
||||
errImportFormat: 'インポートしたスケジュールタスクのデータまたは形式が異常です。確認して再試行してください!',
|
||||
importHelper:
|
||||
'インポート時に同名のスケジュールタスクは自動的にスキップされます。タスクはデフォルトで【無効】状態に設定され、データ関連付け異常時には【編集待ち】状態に設定されます。',
|
||||
changeStatus: 'ステータスを変更します',
|
||||
|
|
|
@ -951,6 +951,7 @@ const message = {
|
|||
create: '크론 작업 생성',
|
||||
edit: '크론 작업 수정',
|
||||
errImport: '파일 내용 이상:',
|
||||
errImportFormat: '가져온 예약 작업 데이터 또는 형식이 이상합니다. 확인 후 다시 시도하십시오!',
|
||||
importHelper:
|
||||
'가져오기 시 동일한 이름의 예약 작업은 자동으로 건너뜁니다. 작업은 기본적으로 【비활성화】 상태로 설정되며, 데이터 연동 이상 시 【편집 대기】 상태로 설정됩니다.',
|
||||
changeStatus: '상태 변경',
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -975,6 +975,8 @@ const message = {
|
|||
create: 'Создать задачу cron',
|
||||
edit: 'Редактировать задачу cron',
|
||||
errImport: 'Аномальное содержимое файла:',
|
||||
errImportFormat:
|
||||
'Данные или формат запланированной задачи ненормальны. Пожалуйста, проверьте и повторите попытку!',
|
||||
importHelper:
|
||||
'Повторяющиеся запланированные задачи будут автоматически пропущены при импорте. По умолчанию задачи устанавливаются в статус 【Отключено】, а при аномальной ассоциации данных - в статус 【Ожидает редактирования】.',
|
||||
changeStatus: 'Изменить статус',
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -945,6 +945,7 @@ const message = {
|
|||
create: '創建計劃任務',
|
||||
edit: '編輯計劃任務',
|
||||
errImport: '文件內容異常:',
|
||||
errImportFormat: '導入的計劃任務數據或格式異常,請檢查後重試!',
|
||||
importHelper:
|
||||
'導入時將自動跳過重名計劃任務。任務默認設置為【停用】狀態,數據關聯異常時,設置為【待編輯】狀態。',
|
||||
changeStatus: '狀態修改',
|
||||
|
|
|
@ -943,6 +943,7 @@ const message = {
|
|||
create: '创建计划任务',
|
||||
edit: '编辑计划任务',
|
||||
errImport: '文件内容异常:',
|
||||
errImportFormat: '导入的计划任务数据或格式异常,请检查后重试!',
|
||||
importHelper:
|
||||
'导入时将自动跳过重名计划任务。任务默认设置为【停用】状态,数据关联异常时,设置为【待编辑】状态。',
|
||||
changeStatus: '状态修改',
|
||||
|
|
|
@ -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'));
|
||||
|
|
|
@ -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',
|
||||
},
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue