Files
nexus/openclaw/xingyao/scripts/test-vaultwarden-search.sh
2026-03-23 20:57:45 +08:00

150 lines
4.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# vaultwarden搜索测试脚本
# 用于验证通过item名称查找凭证的概念
set -e
echo "🔍 vaultwarden凭证搜索测试"
echo "================================"
# 检查Bitwarden CLI是否安装
if ! command -v bw &> /dev/null; then
echo "❌ Bitwarden CLI (bw) 未安装"
echo "安装命令: brew install bitwarden-cli"
exit 1
fi
# 检查jq是否安装用于JSON解析
if ! command -v jq &> /dev/null; then
echo "❌ jq 未安装"
echo "安装命令: brew install jq"
exit 1
fi
# 显示当前配置
echo "📊 当前Bitwarden CLI配置:"
bw status
echo ""
echo "📝 测试流程说明:"
echo "1. 配置连接到vaultwarden服务器"
echo "2. 使用API密钥登录"
echo "3. 搜索指定名称的项目"
echo "4. 提取用户名和密码"
echo ""
# 配置vaultwarden服务器如果未配置
CURRENT_SERVER=$(bw config server | grep -o 'http://[^ ]*' || echo "")
if [ -z "$CURRENT_SERVER" ] || [ "$CURRENT_SERVER" != "http://localhost:8080" ]; then
echo "⚙️ 配置连接到vaultwarden服务器..."
bw config server http://localhost:8080
echo "✅ 服务器配置完成: http://localhost:8080"
fi
echo ""
echo "🔐 登录说明:"
echo "需要以下环境变量:"
echo " export BW_CLIENTID='你的客户端ID'"
echo " export BW_CLIENTSECRET='你的客户端密钥'"
echo ""
echo "然后运行: bw login --apikey"
echo ""
# 检查是否已登录
SESSION=$(bw status | jq -r '.session')
if [ -n "$SESSION" ] && [ "$SESSION" != "null" ]; then
echo "✅ 已登录,会话有效"
export BW_SESSION="$SESSION"
else
echo "⚠️ 未登录或会话无效"
echo "请先设置环境变量并登录"
exit 1
fi
# 测试搜索功能
echo ""
echo "🧪 测试搜索功能..."
echo ""
# 函数:搜索项目并显示凭证
search_vaultwarden_item() {
local item_name="$1"
echo "搜索项目: $item_name"
echo "--------------------------------"
# 搜索项目
ITEM_JSON=$(bw list items --search "$item_name" 2>/dev/null || echo "[]")
if [ "$ITEM_JSON" = "[]" ] || [ -z "$ITEM_JSON" ]; then
echo "❌ 未找到项目: $item_name"
return 1
fi
# 解析第一个项目
ITEM_COUNT=$(echo "$ITEM_JSON" | jq '. | length')
echo "找到 $ITEM_COUNT 个匹配项目"
# 显示每个项目的基本信息
for i in $(seq 0 $((ITEM_COUNT - 1))); do
ITEM=$(echo "$ITEM_JSON" | jq ".[$i]")
ITEM_ID=$(echo "$ITEM" | jq -r '.id')
ITEM_NAME=$(echo "$ITEM" | jq -r '.name')
ITEM_TYPE=$(echo "$ITEM" | jq -r '.type')
echo ""
echo "📋 项目 $((i+1)):"
echo " ID: $ITEM_ID"
echo " 名称: $ITEM_NAME"
echo " 类型: $ITEM_TYPE"
# 如果是登录类型,显示用户名
if [ "$ITEM_TYPE" = "1" ]; then
USERNAME=$(echo "$ITEM" | jq -r '.login.username // "未设置"')
echo " 用户名: $USERNAME"
# 注意:不直接显示密码,只显示是否有密码
HAS_PASSWORD=$(echo "$ITEM" | jq -r '.login.password != null')
if [ "$HAS_PASSWORD" = "true" ]; then
echo " 密码: [已设置]"
else
echo " 密码: [未设置]"
fi
fi
# 显示备注(如果有)
NOTES=$(echo "$ITEM" | jq -r '.notes // ""')
if [ -n "$NOTES" ] && [ "$NOTES" != "null" ]; then
echo " 备注: $NOTES"
fi
done
echo ""
echo "✅ 搜索完成"
return 0
}
# 如果提供了参数,测试搜索
if [ $# -ge 1 ]; then
search_vaultwarden_item "$1"
else
echo "📌 使用方法:"
echo " $0 <项目名称>"
echo ""
echo "示例:"
echo " $0 n8n"
echo " $0 mysql"
echo " $0 ssh"
fi
echo ""
echo "================================"
echo "测试脚本完成"
echo ""
echo "⚠️ 安全提醒:"
echo "1. 此脚本不在磁盘上存储任何密码"
echo "2. 密码只在内存中临时存在"
echo "3. 使用后请清理环境变量:"
echo " unset BW_SESSION"
echo " unset BW_CLIENTID"
echo " unset BW_CLIENTSECRET"