#!/bin/bash # TappoCloud Store 应用发布脚本 # 用法: ./publish.sh [API地址] set -e ZIP_FILE="$1" API_BASE="${2:-https://app.tappo.dev}" if [ -z "$ZIP_FILE" ]; then echo "用法: $0 [API地址]" echo "示例: $0 ./my-app-v1.0.0.zip" echo " $0 ./my-app-v1.0.0.zip https://app.tappo.dev" exit 1 fi if [ ! -f "$ZIP_FILE" ]; then echo "错误: 文件不存在: $ZIP_FILE" exit 1 fi # 检查是否已有 token TOKEN_FILE="$HOME/.tappocloud_token" if [ -f "$TOKEN_FILE" ]; then TOKEN=$(cat "$TOKEN_FILE") # 验证 token 是否有效 if ! curl -sf -o /dev/null -H "Authorization: Bearer $TOKEN" "$API_BASE/api/v1/admin/apps/upload" 2>/dev/null; then rm -f "$TOKEN_FILE" TOKEN="" fi fi # 如果没有有效 token,进行登录 if [ -z "$TOKEN" ]; then echo "请输入管理员账号:" read -p "用户名: " USERNAME read -sp "密码: " PASSWORD echo RESPONSE=$(curl -sf -X POST "$API_BASE/api/v1/admin/login" \ -H "Content-Type: application/json" \ -d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}" 2>&1) || { echo "错误: 登录失败" exit 1 } TOKEN=$(echo "$RESPONSE" | grep -o '"token":"[^"]*"' | cut -d'"' -f4) if [ -z "$TOKEN" ]; then echo "错误: 无法获取 token" exit 1 fi echo "$TOKEN" > "$TOKEN_FILE" chmod 600 "$TOKEN_FILE" echo "登录成功,token 已保存" fi # 上传文件 echo "正在上传: $ZIP_FILE" RESULT=$(curl -sf -X POST "$API_BASE/api/v1/admin/apps/upload" \ -H "Authorization: Bearer $TOKEN" \ -F "file=@$ZIP_FILE" 2>&1) || { echo "错误: 上传失败" rm -f "$TOKEN_FILE" exit 1 } echo "上传成功!" echo "$RESULT" | python3 -m json.tool 2>/dev/null || echo "$RESULT"