/** * Zulip用户管理真实环境测试脚本 * * 功能描述: * - 测试Zulip用户管理功能在真实环境下的表现 * - 验证用户查询、验证等API调用是否正常工作 * - 检查配置是否正确 * * 使用方法: * node test_zulip_user_management.js * * @author angjustinl * @version 1.0.0 * @since 2025-01-06 */ const https = require('https'); // 配置信息 const config = { zulipServerUrl: 'https://zulip.xinghangee.icu', zulipBotEmail: 'angjustinl@mail.angforever.top', zulipBotApiKey: 'lCPWCPfGh7WUHxwN56GF8oYXOpqNfGF8', }; /** * 获取所有用户列表 */ async function getAllUsers() { console.log('📋 获取所有用户列表...'); try { const url = `${config.zulipServerUrl}/api/v1/users`; const auth = Buffer.from(`${config.zulipBotEmail}:${config.zulipBotApiKey}`).toString('base64'); const response = await fetch(url, { method: 'GET', headers: { 'Authorization': `Basic ${auth}`, 'Content-Type': 'application/json', }, }); if (!response.ok) { console.log(`❌ 获取用户列表失败: ${response.status} ${response.statusText}`); return { success: false, error: `${response.status} ${response.statusText}` }; } const data = await response.json(); const users = data.members?.map(user => ({ userId: user.user_id, email: user.email, fullName: user.full_name, isActive: user.is_active, isAdmin: user.is_admin, isBot: user.is_bot, })) || []; console.log(`✅ 成功获取 ${users.length} 个用户`); // 显示前几个用户信息 console.log('👥 用户列表预览:'); users.slice(0, 5).forEach((user, index) => { console.log(` ${index + 1}. ${user.fullName} (${user.email})`); console.log(` ID: ${user.userId}, 活跃: ${user.isActive}, 管理员: ${user.isAdmin}, 机器人: ${user.isBot}`); }); if (users.length > 5) { console.log(` ... 还有 ${users.length - 5} 个用户`); } return { success: true, users, totalCount: users.length }; } catch (error) { console.error(`❌ 获取用户列表异常:`, error.message); return { success: false, error: error.message }; } } /** * 检查指定用户是否存在 */ async function checkUserExists(email) { console.log(`🔍 检查用户是否存在: ${email}`); try { const usersResult = await getAllUsers(); if (!usersResult.success) { console.log(`❌ 无法获取用户列表: ${usersResult.error}`); return false; } const userExists = usersResult.users.some(user => user.email.toLowerCase() === email.toLowerCase() ); console.log(`✅ 用户存在性检查完成: ${userExists ? '存在' : '不存在'}`); return userExists; } catch (error) { console.error(`❌ 检查用户存在性失败:`, error.message); return false; } } /** * 获取用户详细信息 */ async function getUserInfo(email) { console.log(`📝 获取用户信息: ${email}`); try { const usersResult = await getAllUsers(); if (!usersResult.success) { console.log(`❌ 无法获取用户列表: ${usersResult.error}`); return { success: false, error: usersResult.error }; } const user = usersResult.users.find(u => u.email.toLowerCase() === email.toLowerCase() ); if (!user) { console.log(`❌ 用户不存在: ${email}`); return { success: false, error: '用户不存在' }; } console.log(`✅ 用户信息获取成功:`); console.log(` 用户ID: ${user.userId}`); console.log(` 邮箱: ${user.email}`); console.log(` 姓名: ${user.fullName}`); console.log(` 状态: ${user.isActive ? '活跃' : '非活跃'}`); console.log(` 权限: ${user.isAdmin ? '管理员' : '普通用户'}`); console.log(` 类型: ${user.isBot ? '机器人' : '真实用户'}`); return { success: true, user }; } catch (error) { console.error(`❌ 获取用户信息失败:`, error.message); return { success: false, error: error.message }; } } /** * 测试用户API Key */ async function testUserApiKey(email, apiKey) { console.log(`🔑 测试用户API Key: ${email}`); try { const url = `${config.zulipServerUrl}/api/v1/users/me`; const auth = Buffer.from(`${email}:${apiKey}`).toString('base64'); const response = await fetch(url, { method: 'GET', headers: { 'Authorization': `Basic ${auth}`, 'Content-Type': 'application/json', }, }); const isValid = response.ok; if (isValid) { const data = await response.json(); console.log(`✅ API Key有效! 用户信息:`); console.log(` 用户ID: ${data.user_id}`); console.log(` 邮箱: ${data.email}`); console.log(` 姓名: ${data.full_name}`); } else { console.log(`❌ API Key无效: ${response.status} ${response.statusText}`); } return isValid; } catch (error) { console.error(`❌ 测试API Key异常:`, error.message); return false; } } /** * 测试连接 */ async function testConnection() { console.log('🔗 测试Zulip服务器连接...'); try { const url = `${config.zulipServerUrl}/api/v1/server_settings`; const response = await fetch(url); if (response.ok) { const data = await response.json(); console.log(`✅ 连接成功! 服务器信息:`); console.log(` 版本: ${data.zulip_version || '未知'}`); console.log(` 服务器: ${data.realm_name || '未知'}`); return true; } else { console.log(`❌ 连接失败: ${response.status} ${response.statusText}`); return false; } } catch (error) { console.error(`❌ 连接异常:`, error.message); return false; } } /** * 主测试函数 */ async function main() { console.log('🎯 开始Zulip用户管理测试'); console.log('='.repeat(50)); // 1. 测试连接 const connected = await testConnection(); if (!connected) { console.log('❌ 无法连接到Zulip服务器,测试终止'); return; } console.log(''); // 2. 获取所有用户列表 const usersResult = await getAllUsers(); if (!usersResult.success) { console.log('❌ 无法获取用户列表,测试终止'); return; } console.log(''); // 3. 测试用户存在性检查 const testEmails = [ 'angjustinl@mail.angforever.top', // 应该存在 'nonexistent@example.com', // 应该不存在 ]; console.log('🔍 测试用户存在性检查:'); for (const email of testEmails) { const exists = await checkUserExists(email); console.log(` ${email}: ${exists ? '✅ 存在' : '❌ 不存在'}`); } console.log(''); // 4. 测试获取用户信息 console.log('📝 测试获取用户信息:'); const existingEmail = 'angjustinl@mail.angforever.top'; const userInfoResult = await getUserInfo(existingEmail); console.log(''); // 5. 测试API Key验证(如果有的话) console.log('🔑 测试API Key验证:'); const testApiKey = 'lCPWCPfGh7WUHxwN56GF8oYXOpqNfGF8'; // 这是我们的测试API Key const apiKeyValid = await testUserApiKey(existingEmail, testApiKey); console.log(''); console.log('📊 测试结果总结:'); console.log(`✅ 服务器连接: 正常`); console.log(`✅ 用户列表获取: 正常 (${usersResult.totalCount} 个用户)`); console.log(`✅ 用户存在性检查: 正常`); console.log(`✅ 用户信息获取: ${userInfoResult.success ? '正常' : '异常'}`); console.log(`✅ API Key验证: ${apiKeyValid ? '正常' : '异常'}`); console.log(''); console.log('🎉 用户管理功能测试完成'); } // 运行测试 main().catch(error => { console.error('💥 测试过程中发生未处理的错误:', error); process.exit(1); });