oauth_nest_demo/generate-licenses.sh

180 lines
5.0 KiB
Bash
Executable File

#!/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 ""