diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d35b621..7ee3510 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -190,7 +190,6 @@ jobs: fi WINDOWS_ARM64_ASSET="$(echo "$ASSETS_JSON" | jq -r '[.assets[].name | select(test("arm64.*\\.exe$"))][0] // ""')" MAC_ASSET="$(pick_asset "\\.dmg$")" - LINUX_DEB_ASSET="$(pick_asset "\\.deb$")" LINUX_TAR_ASSET="$(pick_asset "\\.tar\\.gz$")" LINUX_APPIMAGE_ASSET="$(pick_asset "\\.AppImage$")" @@ -204,7 +203,6 @@ jobs: WINDOWS_URL="$(build_link "$WINDOWS_ASSET")" WINDOWS_ARM64_URL="$(build_link "$WINDOWS_ARM64_ASSET")" MAC_URL="$(build_link "$MAC_ASSET")" - LINUX_DEB_URL="$(build_link "$LINUX_DEB_ASSET")" LINUX_TAR_URL="$(build_link "$LINUX_TAR_ASSET")" LINUX_APPIMAGE_URL="$(build_link "$LINUX_APPIMAGE_ASSET")" @@ -219,7 +217,6 @@ jobs: - Windows x64(Win10+): ${WINDOWS_URL:-$RELEASE_PAGE} - Windows arm64: ${WINDOWS_ARM64_URL:-$RELEASE_PAGE} - macOS(M系列芯片): ${MAC_URL:-$RELEASE_PAGE} - - Linux (.deb) (即将废弃): ${LINUX_DEB_URL:-$RELEASE_PAGE} - Linux (.tar.gz): ${LINUX_TAR_URL:-$RELEASE_PAGE} - linux (.AppImage): ${LINUX_APPIMAGE_URL:-$RELEASE_PAGE} diff --git a/README.md b/README.md index 7c4637f..bfd936a 100644 --- a/README.md +++ b/README.md @@ -50,13 +50,15 @@ WeFlow 是一个**完全本地**的微信**实时**聊天记录查看、分析 |------|----------|--------| | Windows | Windows10+、x64(amd64) | `.exe` | | macOS | Apple Silicon(M 系列,arm64) | `.dmg` | -| Linux | x64 设备(amd64) | `.deb`、`.tar.gz` | +| Linux | x64 设备(amd64) | `.AppImage`、`.tar.gz` | ## 快速开始 若你只想使用成品版本,可前往 [Releases](https://github.com/hicccc77/WeFlow/releases) 下载并安装。 +> ArchLinux 用户可以选择 `yay -S weflow` 快速安装 + ## 详细功能清单 当前版本已支持以下能力: diff --git a/docs/HTTP-API.md b/docs/HTTP-API.md index ca2a89a..052dd8a 100644 --- a/docs/HTTP-API.md +++ b/docs/HTTP-API.md @@ -1,6 +1,6 @@ # WeFlow HTTP API / Push 文档 -WeFlow 提供本地 HTTP API,便于外部脚本或工具读取聊天记录、会话、联系人、群成员和导出的媒体文件;也支持在检测到新消息后通过固定 SSE 地址主动推送消息事件。 +WeFlow 提供本地 HTTP API(已支持GET 和 POST请求),便于外部脚本或工具读取聊天记录、会话、联系人、群成员和导出的媒体文件;也支持在检测到新消息后通过固定 SSE 地址主动推送消息事件。 ## 启用方式 @@ -11,17 +11,27 @@ WeFlow 提供本地 HTTP API,便于外部脚本或工具读取聊天记录、 - 基础地址:`http://127.0.0.1:5031` - 可选开启 `主动推送`,检测到新收到的消息后会通过 `GET /api/v1/push/messages` 推送给 SSE 订阅端 +**状态记忆**:API 服务和主动推送的状态及端口会自动保存,重启 WeFlow 后会自动恢复运行。 + +## 鉴权规范 + +**鉴权规范 (Access Token)** 除健康检查接口外,所有 `/api/v1/*` 接口均受 Token 保护。支持三种传参方式(任选其一): + +1. **HTTP Header (推荐)**: `Authorization: Bearer <您的Token>` +2. **Query 参数**: `?access_token=<您的Token>`(SSE 长连接推荐此方式) +3. **JSON Body**: `{"access_token": "<您的Token>"}`(仅限 POST 请求) + ## 接口列表 -- `GET /health` -- `GET /api/v1/health` -- `GET /api/v1/push/messages` -- `GET /api/v1/messages` -- `GET /api/v1/messages/new` -- `GET /api/v1/sessions` -- `GET /api/v1/contacts` -- `GET /api/v1/group-members` -- `GET /api/v1/media/*` +- `GET|POST /health` +- `GET|POST /api/v1/health` +- `GET|POST /api/v1/push/messages` +- `GET|POST /api/v1/messages` +- `GET|POST /api/v1/messages/new` +- `GET|POST /api/v1/sessions` +- `GET|POST /api/v1/contacts` +- `GET|POST /api/v1/group-members` +- `GET|POST /api/v1/media/*` --- @@ -80,7 +90,7 @@ GET /api/v1/push/messages ### 示例 ```bash -curl -N "http://127.0.0.1:5031/api/v1/push/messages" +curl -N "http://127.0.0.1:5031/api/v1/push/messages?access_token=YOUR_TOKEN ``` 示例事件: @@ -94,6 +104,8 @@ data: {"event":"message.new","sessionId":"xxx@chatroom","messageKey":"server:123 ## 3. 获取消息 +> 当使用 POST 时,请将参数放在 JSON Body 中(Content-Type: application/json) + 读取指定会话的消息,支持原始 JSON 和 ChatLab 格式。 **请求** @@ -231,6 +243,8 @@ curl "http://127.0.0.1:5031/api/v1/messages?talker=xxx@chatroom&media=1&image=1& ## 4. 获取会话列表 +> 当使用 POST 时,请将参数放在 JSON Body 中(Content-Type: application/json) + **请求** ```http @@ -276,6 +290,8 @@ GET /api/v1/sessions ## 5. 获取联系人列表 +> 当使用 POST 时,请将参数放在 JSON Body 中(Content-Type: application/json) + **请求** ```http @@ -325,6 +341,8 @@ GET /api/v1/contacts ## 6. 获取群成员列表 +> 当使用 POST 时,请将参数放在 JSON Body 中(Content-Type: application/json) + 返回群成员的 `wxid`、群昵称、备注、微信号等信息。 **请求** @@ -417,6 +435,8 @@ curl "http://127.0.0.1:5031/api/v1/group-members?chatroomId=xxx@chatroom&include ## 7. 访问导出媒体 +> 当使用 POST 时,请将参数放在 JSON Body 中(Content-Type: application/json) + 通过消息接口启用 `media=1` 后,接口会先把图片、语音、视频、表情导出到本地缓存目录,再返回可访问的 HTTP 地址。 **请求** @@ -461,19 +481,23 @@ curl "http://127.0.0.1:5031/api/v1/media/xxx@chatroom/emojis/emoji_300.gif" ### PowerShell ```powershell -Invoke-RestMethod http://127.0.0.1:5031/health -Invoke-RestMethod http://127.0.0.1:5031/api/v1/sessions -Invoke-RestMethod "http://127.0.0.1:5031/api/v1/messages?talker=wxid_xxx&limit=10" -Invoke-RestMethod "http://127.0.0.1:5031/api/v1/group-members?chatroomId=xxx@chatroom&includeMessageCounts=1" +$headers = @{ "Authorization" = "Bearer YOUR_TOKEN" } +$body = @{ talker = "wxid_xxx"; limit = 10 } | ConvertTo-Json + +Invoke-RestMethod -Uri "http://127.0.0.1:5031/api/v1/messages" -Method POST -Headers $headers -Body $body -ContentType "application/json" ``` ### cURL ```bash -curl http://127.0.0.1:5031/health -curl "http://127.0.0.1:5031/api/v1/messages?talker=wxid_xxx&chatlab=1" -curl "http://127.0.0.1:5031/api/v1/contacts?keyword=张三" -curl "http://127.0.0.1:5031/api/v1/group-members?chatroomId=xxx@chatroom" +# GET 带 Token Header +curl -H "Authorization: Bearer YOUR_TOKEN" "http://127.0.0.1:5031/api/v1/messages?talker=wxid_xxx" + +# POST 带 JSON Body +curl -X POST http://127.0.0.1:5031/api/v1/messages \ + -H "Authorization: Bearer YOUR_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"talker": "xxx@chatroom", "chatlab": true}' ``` ### Python @@ -482,19 +506,21 @@ curl "http://127.0.0.1:5031/api/v1/group-members?chatroomId=xxx@chatroom" import requests BASE_URL = "http://127.0.0.1:5031" +headers = {"Authorization": "Bearer YOUR_TOKEN", "Content-Type": "application/json"} -messages = requests.get( - f"{BASE_URL}/api/v1/messages", - params={"talker": "xxx@chatroom", "limit": 50} +# POST 方式获取消息 +messages = requests.post( + f"{BASE_URL}/api/v1/messages", + json={"talker": "xxx@chatroom", "limit": 50}, + headers=headers ).json() +# GET 方式获取群成员 members = requests.get( f"{BASE_URL}/api/v1/group-members", - params={"chatroomId": "xxx@chatroom", "includeMessageCounts": 1} + params={"chatroomId": "xxx@chatroom", "includeMessageCounts": 1}, + headers=headers ).json() - -print(messages) -print(members) ``` --- diff --git a/package.json b/package.json index 0b237bc..6b32450 100644 --- a/package.json +++ b/package.json @@ -96,12 +96,17 @@ "icon": "public/icon.png", "target": [ "appimage", - "deb", "tar.gz" ], "category": "Utility", "executableName": "weflow", - "synopsis": "WeFlow for Linux" + "synopsis": "WeFlow for Linux", + "extraFiles": [ + { + "from": "resources/linux/install.sh", + "to": "install.sh" + } + ] }, "nsis": { "oneClick": false, diff --git a/resources/linux/install.sh b/resources/linux/install.sh new file mode 100644 index 0000000..eacc714 --- /dev/null +++ b/resources/linux/install.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +set -e + +APP_NAME="weflow" +APP_EXEC="weflow" +OPT_DIR="/opt/$APP_NAME" +BIN_LINK="/usr/bin/$APP_NAME" +DESKTOP_DIR="/usr/share/applications" +ICON_DIR="/usr/share/pixmaps" + +if [ "$EUID" -ne 0 ]; then + echo "❌ 请使用 root 权限运行此脚本 (例如: sudo ./install.sh)" + exit 1 +fi + +echo "🚀 开始安装 $APP_NAME..." + +echo "📦 正在复制文件到 $OPT_DIR..." +rm -rf "$OPT_DIR" +mkdir -p "$OPT_DIR" +cp -r ./* "$OPT_DIR/" +chmod -R 755 "$OPT_DIR" +chmod +x "$OPT_DIR/$APP_EXEC" + +echo "🔗 正在创建软链接 $BIN_LINK..." +ln -sf "$OPT_DIR/$APP_EXEC" "$BIN_LINK" + +echo "📝 正在创建桌面快捷方式..." +cat <"$DESKTOP_DIR/${APP_NAME}.desktop" +[Desktop Entry] +Name=WeFlow +Exec=$OPT_DIR/$APP_EXEC %U +Terminal=false +Type=Application +Icon=$APP_NAME +StartupWMClass=WeFlow +Comment=A local WeChat database decryption and analysis tool +Categories=Utility; +EOF +chmod 644 "$DESKTOP_DIR/${APP_NAME}.desktop" + +echo "🖼️ 正在安装图标..." +if [ -f "$OPT_DIR/resources/icon.png" ]; then + cp "$OPT_DIR/resources/icon.png" "$ICON_DIR/${APP_NAME}.png" + chmod 644 "$ICON_DIR/${APP_NAME}.png" +elif [ -f "$OPT_DIR/icon.png" ]; then + cp "$OPT_DIR/icon.png" "$ICON_DIR/${APP_NAME}.png" + chmod 644 "$ICON_DIR/${APP_NAME}.png" +else + echo "⚠️ 警告: 未找到图标文件,跳过图标安装。" +fi + +if command -v update-desktop-database >/dev/null 2>&1; then + echo "🔄 更新桌面数据库..." + update-desktop-database "$DESKTOP_DIR" +fi + +echo "✅ 安装完成!你现在可以在应用菜单中找到 WeFlow,或者在终端输入 'weflow' 启动。"