This commit is contained in:
dengqichen 2025-11-18 23:13:12 +08:00
parent 2ec62ebb21
commit a288aa01aa
2 changed files with 214 additions and 0 deletions

View File

@ -123,6 +123,30 @@ if (autoTool) {
});
}
// 注册account-generator命令
const accountTool = registry.get('account-generator');
if (accountTool) {
const accountCommand = program
.command('account')
.description('生成账户数据(邮箱、密码、姓名等)')
.option('-n, --count <number>', '生成数量', '1')
.option('-f, --format <format>', '输出格式 (simple, detailed, json, csv, table)', 'simple')
.option('--include-card', '包含信用卡信息')
.option('--no-include-phone', '不包含手机号')
.option('--password-strategy <strategy>', '密码策略 (email, random)', 'email')
.action((options) => {
accountTool.execute(options);
});
// 添加子命令
accountCommand
.command('list-formats')
.description('列出所有支持的输出格式')
.action(() => {
accountTool.listFormats();
});
}
// 列出所有工具
program
.command('list')
@ -147,6 +171,13 @@ program.on('--help', () => {
console.log(' $ aam card -t unionpay -n 10 # 生成10张银联卡');
console.log(' $ aam card list-types # 查看支持的卡类型');
console.log('');
console.log(' # 账户数据生成器');
console.log(' $ aam account # 生成一个账户(邮箱+密码)');
console.log(' $ aam account -n 10 # 生成10个账户');
console.log(' $ aam account -f json # JSON格式输出');
console.log(' $ aam account -f table --include-card # 表格格式,包含卡信息');
console.log(' $ aam account list-formats # 查看支持的格式');
console.log('');
console.log(' # 账号注册工具(旧框架)');
console.log(' $ aam register -s windsurf --dry-run # 生成Windsurf账号数据');
console.log(' $ aam register -s windsurf # 执行Windsurf注册');

View File

@ -0,0 +1,183 @@
/**
* Account Generator Tool - 账户数据生成工具
*/
const AccountDataGenerator = require('../../shared/libs/account-generator');
const logger = require('../../shared/logger');
const TOOL_NAME = 'account-generator';
// 输出格式定义
const OUTPUT_FORMATS = {
simple: {
name: '简单格式',
formatter: (account) => {
return `${account.fullName} <${account.email}>`;
}
},
detailed: {
name: '详细格式',
formatter: (account) => {
let output = [];
output.push(`姓名: ${account.fullName}`);
output.push(`邮箱: ${account.email}`);
output.push(`密码: ${account.password}`);
if (account.username) output.push(`用户名: ${account.username}`);
if (account.phone) output.push(`手机: ${account.phone}`);
if (account.card) {
output.push(`卡号: ${account.card.number}`);
output.push(`有效期: ${account.card.month}/${account.card.year}`);
output.push(`CVV: ${account.card.cvv}`);
}
return output.join('\n');
}
},
json: {
name: 'JSON格式',
formatter: (account) => {
return JSON.stringify(account, null, 2);
}
},
csv: {
name: 'CSV格式',
formatter: (account) => {
const fields = [
account.firstName,
account.lastName,
account.email,
account.password,
account.username || '',
account.phone || ''
];
if (account.card) {
fields.push(account.card.number);
fields.push(`${account.card.month}/${account.card.year}`);
fields.push(account.card.cvv);
}
return fields.join(',');
}
},
table: {
name: '表格格式',
formatter: (account) => {
const rows = [
['字段', '值'],
['姓名', account.fullName],
['邮箱', account.email],
['密码', account.password]
];
if (account.username) rows.push(['用户名', account.username]);
if (account.phone) rows.push(['手机', account.phone]);
if (account.card) {
rows.push(['卡号', account.card.number]);
rows.push(['有效期', `${account.card.month}/${account.card.year}`]);
rows.push(['CVV', account.card.cvv]);
}
const maxKeyLen = Math.max(...rows.map(r => r[0].length));
const maxValLen = Math.max(...rows.map(r => String(r[1]).length));
let output = [];
rows.forEach((row, i) => {
const key = row[0].padEnd(maxKeyLen);
const val = String(row[1]).padEnd(maxValLen);
if (i === 0) {
output.push(`| ${key} | ${val} |`);
output.push(`|${'-'.repeat(maxKeyLen + 2)}|${'-'.repeat(maxValLen + 2)}|`);
} else {
output.push(`| ${key} | ${val} |`);
}
});
return output.join('\n');
}
}
};
/**
* 执行账户生成
*/
function execute(options) {
try {
const generator = new AccountDataGenerator();
const count = parseInt(options.count || 1);
const format = options.format || 'simple';
// 验证格式
if (!OUTPUT_FORMATS[format]) {
logger.error(TOOL_NAME, `不支持的输出格式: ${format}`);
logger.info(TOOL_NAME, `支持的格式: ${Object.keys(OUTPUT_FORMATS).join(', ')}`);
process.exit(1);
}
// 构建生成选项
const genOptions = {
includePhone: options.includePhone !== false, // --no-include-phone 默认 true
includeCard: options.includeCard === true // --include-card 默认 false
};
if (options.passwordStrategy) {
genOptions.password = { strategy: options.passwordStrategy };
}
// 生成账户
let accounts;
if (count === 1) {
accounts = [generator.generateAccount(genOptions)];
} else {
accounts = generator.generateBatch(count, genOptions);
}
// 格式化输出
const formatter = OUTPUT_FORMATS[format];
if (format === 'csv' && count > 1) {
// CSV 格式,先输出表头
const headers = ['FirstName', 'LastName', 'Email', 'Password', 'Username', 'Phone'];
if (options.includeCard) {
headers.push('CardNumber', 'Expiry', 'CVV');
}
console.log(headers.join(','));
}
accounts.forEach(account => {
console.log(formatter.formatter(account));
if (format !== 'csv' && format !== 'json' && count > 1) {
console.log(''); // 多个账户之间空行
}
});
if (count > 1) {
logger.success(TOOL_NAME, `成功生成 ${count} 个账户`);
}
} catch (error) {
logger.error(TOOL_NAME, error.message);
console.error(error);
process.exit(1);
}
}
/**
* 列出支持的输出格式
*/
function listFormats() {
console.log('\n支持的输出格式:\n');
for (const [key, config] of Object.entries(OUTPUT_FORMATS)) {
console.log(` ${key.padEnd(15)} - ${config.name}`);
}
console.log('');
}
module.exports = {
name: TOOL_NAME,
alias: 'account',
description: '生成账户数据(邮箱、密码、姓名等)',
execute,
listFormats
};