#!/bin/bash
# ====================================================================
# maas-deploy 漏洞修复一键验证脚本 (verify-maas-deploy-fix.sh)
# ====================================================================

# --- 配置区 ---
# 请根据实际环境修改以下路径
MAVEN_EXEC="/Users/ray/software/maven/bin/mvn"
MAVEN_SETTINGS="/Users/ray/software/maven/conf/settings.xml"
PROJECT_DIR="/Users/ray/workplace/migu-deploy" # maas-deploy 项目的根目录
OUTPUT_DIR="./security_verification_deploy"
DEP_TREE_FILE="$OUTPUT_DIR/dependency-tree-after-fix.txt"
TRIVY_OUTPUT_FILE="$OUTPUT_DIR/trivy_scan_results.txt"

# --- 脚本执行区 ---
echo "\033[0;32m[INFO] 开始执行 maas-deploy 漏洞修复验证...\033[0m"

# 检查项目目录是否存在
if [ ! -d "$PROJECT_DIR" ]; then
    echo "\033[0;31m[ERROR] 项目目录不存在: $PROJECT_DIR" >&2
    echo "\033[0;31m[ERROR] 请修改脚本中的 PROJECT_DIR 变量。\033[0m" >&2
    exit 1
fi

cd "$PROJECT_DIR" || exit

mkdir -p "$OUTPUT_DIR"

# 步骤 1: 清理并打包项目
echo "\n\033[0;34m[1/3] 正在清理和打包项目 (mvn clean package)...[0m"
$MAVEN_EXEC -s "$MAVEN_SETTINGS" clean package -DskipTests
if [ $? -ne 0 ]; then
    echo "\033[0;31m[ERROR] Maven build 失败，请检查 pom.xml 修改是否正确。\033[0m" >&2
    exit 1
fi

# 步骤 2: 生成修复后的依赖树
echo "\n\033[0;34m[2/3] 正在生成新的依赖树...[0m"
$MAVEN_EXEC -s "$MAVEN_SETTINGS" dependency:tree > "$DEP_TREE_FILE"
if [ $? -ne 0 ]; then
    echo "\033[0;31m[ERROR] 生成依赖树失败。\033[0m" >&2
    exit 1
fi
echo "\033[0;32m[SUCCESS] 依赖树已生成: $PROJECT_DIR/$DEP_TREE_FILE\033[0m"

# 步骤 3: 执行 Trivy 文件系统漏洞扫描
echo "\n\033[0;34m[3/3] 正在对项目构建产物执行 Trivy 文件系统扫描...[0m"
echo "\033[0;33m[WARN] 请注意：此步骤仅验证 pom.xml 的修复效果。要验证 Dockerfile 的修复，您需要构建镜像后，使用 'trivy image <镜像名>' 进行扫描。\033[0m"
trivy fs --db-repository ghcr.nju.edu.cn/aquasecurity/trivy-db:2 \
         --checks-bundle-repository ghcr.nju.edu.cn/aquasecurity/trivy-checks:1 \
         --java-db-repository ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1 \
         --timeout 20m \
         --format table \
         --output "$TRIVY_OUTPUT_FILE" \
         --scanners vuln \
         .

echo "\n\033[0;32m=== 验证脚本执行完毕 ===\033[0m"
echo "双重验证结果已生成:"
echo "1. Maven 依赖树: $PROJECT_DIR/$DEP_TREE_FILE"
echo "2. Trivy 安全扫描报告: $PROJECT_DIR/$TRIVY_OUTPUT_FILE"

echo "\n\033[0;33m请检查以上报告，确认以下组件版本已按预期升级：\033[0m"
echo "  - tomcat-embed-core: 10.1.35"
