#!/bin/bash # 卡密生成快速脚本 # 使用方法: bash generate-licenses.sh BASE_URL="http://localhost:3030" # 颜色定义 GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' echo -e "${GREEN}====== 卡密生成工具 ======${NC}" echo "" # 检查是否已有管理员账号 read -p "是否已有管理员账号?(y/n): " has_admin if [ "$has_admin" != "y" ]; then echo -e "${YELLOW}步骤 1: 注册管理员账号${NC}" read -p "请输入管理员用户名 (默认: admin): " admin_username admin_username=${admin_username:-admin} read -sp "请输入管理员密码: " admin_password echo "" read -p "请输入管理员邮箱 (默认: admin@example.com): " admin_email admin_email=${admin_email:-admin@example.com} echo -e "${YELLOW}正在注册管理员账号...${NC}" REGISTER_RESPONSE=$(curl -s -X POST "$BASE_URL/user/register" \ -H "Content-Type: application/json" \ -d "{ \"username\": \"$admin_username\", \"password\": \"$admin_password\", \"email\": \"$admin_email\" }") ADMIN_TOKEN=$(echo $REGISTER_RESPONSE | jq -r '.access_token') if [ "$ADMIN_TOKEN" = "null" ] || [ -z "$ADMIN_TOKEN" ]; then echo -e "${RED}注册失败!${NC}" echo "$REGISTER_RESPONSE" | jq '.' exit 1 fi echo -e "${GREEN}管理员账号注册成功!${NC}" echo "管理员 Token: $ADMIN_TOKEN" echo "" else echo -e "${YELLOW}步骤 1: 管理员登录${NC}" read -p "请输入管理员用户名: " admin_username read -sp "请输入管理员密码: " admin_password echo "" echo -e "${YELLOW}正在登录...${NC}" LOGIN_RESPONSE=$(curl -s -X POST "$BASE_URL/user/login" \ -H "Content-Type: application/json" \ -d "{ \"username\": \"$admin_username\", \"password\": \"$admin_password\" }") ADMIN_TOKEN=$(echo $LOGIN_RESPONSE | jq -r '.access_token') if [ "$ADMIN_TOKEN" = "null" ] || [ -z "$ADMIN_TOKEN" ]; then echo -e "${RED}登录失败!请检查用户名和密码${NC}" echo "$LOGIN_RESPONSE" | jq '.' exit 1 fi echo -e "${GREEN}登录成功!${NC}" echo "" fi # 生成卡密 echo -e "${YELLOW}步骤 2: 选择要生成的卡密类型${NC}" echo "1. 试用卡 (7天)" echo "2. 月卡 (30天)" echo "3. 年卡 (365天)" echo "4. 终身卡" read -p "请选择 (1-4): " license_choice case $license_choice in 1) LICENSE_TYPE="trial" VALID_DAYS=7 ;; 2) LICENSE_TYPE="monthly" VALID_DAYS=30 ;; 3) LICENSE_TYPE="yearly" VALID_DAYS=365 ;; 4) LICENSE_TYPE="lifetime" VALID_DAYS=36500 ;; *) echo -e "${RED}无效的选择${NC}" exit 1 ;; esac read -p "请输入生成数量 (默认: 1): " count count=${count:-1} read -p "请输入备注信息 (可选): " remarks echo "" echo -e "${YELLOW}正在生成 $count 个 $LICENSE_TYPE 卡密...${NC}" GENERATE_RESPONSE=$(curl -s -X POST "$BASE_URL/license/generate" \ -H "Authorization: Bearer $ADMIN_TOKEN" \ -H "Content-Type: application/json" \ -d "{ \"type\": \"$LICENSE_TYPE\", \"validDays\": $VALID_DAYS, \"count\": $count, \"remarks\": \"$remarks\" }") # 检查是否成功 if echo "$GENERATE_RESPONSE" | jq -e '.[0].code' > /dev/null 2>&1; then echo -e "${GREEN}卡密生成成功!${NC}" echo "" echo "生成的卡密:" echo "$GENERATE_RESPONSE" | jq -r '.[] | " \(.code) - \(.type) (\(.validDays)天) - \(.remarks // "无备注")"' echo "" # 询问是否保存到文件 read -p "是否将卡密保存到文件?(y/n): " save_to_file if [ "$save_to_file" = "y" ]; then FILENAME="licenses_$(date +%Y%m%d_%H%M%S).txt" echo "生成时间: $(date)" > "$FILENAME" echo "类型: $LICENSE_TYPE" >> "$FILENAME" echo "有效天数: $VALID_DAYS" >> "$FILENAME" echo "数量: $count" >> "$FILENAME" echo "备注: $remarks" >> "$FILENAME" echo "" >> "$FILENAME" echo "卡密列表:" >> "$FILENAME" echo "$GENERATE_RESPONSE" | jq -r '.[] | .code' >> "$FILENAME" echo -e "${GREEN}卡密已保存到: $FILENAME${NC}" fi # 显示统计信息 echo "" read -p "是否查看卡密统计信息?(y/n): " show_stats if [ "$show_stats" = "y" ]; then echo -e "${YELLOW}查询统计信息...${NC}" STATS=$(curl -s -X GET "$BASE_URL/license/statistics" \ -H "Authorization: Bearer $ADMIN_TOKEN") echo "$STATS" | jq '.' fi else echo -e "${RED}生成失败!${NC}" echo "$GENERATE_RESPONSE" | jq '.' exit 1 fi echo "" echo -e "${GREEN}====== 操作完成 ======${NC}" echo "" echo "提示:" echo "1. 管理员 Token 已保存(有效期内可继续使用)" echo "2. 可以将卡密分发给用户进行激活" echo "3. 用户激活接口: POST /license/activate" echo "4. 查看所有卡密: GET /license" echo ""