diff --git a/src/main/java/net/geedge/asw/common/util/RCode.java b/src/main/java/net/geedge/asw/common/util/RCode.java index 99a6351..6289bfb 100644 --- a/src/main/java/net/geedge/asw/common/util/RCode.java +++ b/src/main/java/net/geedge/asw/common/util/RCode.java @@ -70,6 +70,7 @@ public enum RCode { // Playbook PLAYBOOK_ID_CANNOT_EMPTY(302001, "playbook id cannot be empty"), PLAYBOOK_NAME_DUPLICATE(302002, "playbook name duplicate "), + PLAYBOOK_INVALID_FILE(302003, "playbook Invalid file"), // Workspace WORKSPACE_ID_CANNOT_EMPTY(401001, "workspace id cannot be empty"), diff --git a/src/main/java/net/geedge/asw/module/runner/service/impl/PlaybookServiceImpl.java b/src/main/java/net/geedge/asw/module/runner/service/impl/PlaybookServiceImpl.java index e72c712..ad56013 100644 --- a/src/main/java/net/geedge/asw/module/runner/service/impl/PlaybookServiceImpl.java +++ b/src/main/java/net/geedge/asw/module/runner/service/impl/PlaybookServiceImpl.java @@ -47,7 +47,10 @@ public class PlaybookServiceImpl extends ServiceImpl fileList = Arrays.stream(unzip.listFiles()).toList(); + if (T.CollUtil.isEmpty(fileList) || fileList.size() != 1) { + throw new ASWException(RCode.PLAYBOOK_INVALID_FILE); + } + + File playbookDir = fileList.getFirst(); + String dirName = playbookDir.getName(); + if (!dirName.endsWith(".air")) { + throw new ASWException(RCode.PLAYBOOK_INVALID_FILE); + } + String pyName = dirName.replace("air", "py"); + List fileNameList = Arrays.stream(playbookDir.list()).toList(); + if (T.CollUtil.isEmpty(fileNameList) || !fileNameList.contains(pyName)) { + throw new ASWException(RCode.PLAYBOOK_INVALID_FILE); + } this.save(playbook); } catch (Exception e) { log.error(e, "[savePlaybook] [error] [file: {}]", file.getName()); - T.FileUtil.del(description); + T.FileUtil.del(destination); + throw new ASWException(RCode.PLAYBOOK_INVALID_FILE); + }finally { + T.FileUtil.del(unzip); } return playbook; } diff --git a/src/main/resources/db/migration/R__AZ_sys_i18n.sql b/src/main/resources/db/migration/R__AZ_sys_i18n.sql index 40cc16d..26cc1a1 100644 --- a/src/main/resources/db/migration/R__AZ_sys_i18n.sql +++ b/src/main/resources/db/migration/R__AZ_sys_i18n.sql @@ -145,5 +145,7 @@ INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_ INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (237, '203001', 'GIT_COMMIT_CONFLICT_ERROR', '提交失败;解决冲突,然后提交结果', 'zh', '', 'admin', 1724030366000); INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (238, '203002', 'GIT_MERGE_FAILED', 'Merge failed', 'en', '', 'admin', 1724030366000); INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (239, '203002', 'GIT_MERGE_FAILED', '合并失败', 'zh', '', 'admin', 1724030366000); +INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (240, '302003', 'PLAYBOOK_INVALID_FILE', 'playbook Invalid file', 'en', '', 'admin', 1724030366000); +INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (241, '302003', 'PLAYBOOK_INVALID_FILE', '无效文件', 'zh', '', 'admin', 1724030366000); SET FOREIGN_KEY_CHECKS = 1;