package com.ruoyi.common.utils;

import java.io.File;

public class AntiVirus {


    public static void main(String[] args) {
        File dir = new File("C:\\path_to_scan"); // 替换为要扫描的目录路径
        scanDirectory(dir);
    }

    public static void scanDirectory(File dir) {
        if (dir.isDirectory()) {
            File[] files = dir.listFiles();
            if (files != null) {
                for (File file : files) {
                    scanDirectory(file); // 递归扫描子目录
                }
            }
        } else {
            String fileName = dir.getName().toLowerCase();
            if (isExecutableFile(fileName) || isScriptFile(fileName)) {
                try {
                    System.out.println("Found risky file: " + dir.getAbsolutePath());
                    // 实际情况下，你可能需要将这些文件移动到隔离区或者直接删除
                    // 例如: Files.move(dir.toPath(), new File("C:\\quarantine").toPath());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 检查文件名称合规性：可执行文件、脚本
     *
     * @param fileName
     * @return true：合规；false：不合规（存在安全隐患）；
     */
    public static boolean scanFileName(String fileName) {
        if (isExecutableFile(fileName) || isScriptFile(fileName)) {
            // 实际情况下，你可能需要将这些文件移动到隔离区或者直接删除
            // 例如: Files.move(dir.toPath(), new File("C:\\quarantine").toPath());
            return false;
        }
        return true;
    }


    /**
     * 可执行文件
     *
     * @param fileName
     * @return
     */
    public static boolean isExecutableFile(String fileName) {
        if (StringUtils.isBlank(fileName))
            return false;
        String[] executableExtensions = {".sh", ".exe", ".com", ".bat", ".cmd", ".pif", ".rpm", ".apk", ".ios"};
        for (String extension : executableExtensions) {
            if (fileName.toLowerCase().endsWith(extension)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 脚本
     *
     * @param fileName
     * @return
     */
    public static boolean isScriptFile(String fileName) {
        if (StringUtils.isBlank(fileName))
            return false;
        String[] scriptExtensions = {".vbs", ".js", ".wsf", ".ps1", ".html", ".jsp", ".xml", ".sql", ".dmp", ".ini", ".dll", ".java", ".class"};
        for (String extension : scriptExtensions) {
            if (fileName.toLowerCase().endsWith(extension)) {
                return true;
            }
        }
        return false;
    }
}
