63 lines
2.0 KiB
JavaScript
63 lines
2.0 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/**
|
|
* CLI tool to generate API keys for agents
|
|
* Usage: node generate-key.js <name> <device_prefix>
|
|
* Example: node generate-key.js "ac-infinity-agent" "ac:"
|
|
*/
|
|
|
|
import { fileURLToPath } from 'url';
|
|
import { dirname, join } from 'path';
|
|
import { initDatabase } from '../db/schema.js';
|
|
import { generateApiKey, listApiKeys } from '../db/queries.js';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = dirname(__filename);
|
|
|
|
const dbPath = process.env.DB_PATH || join(__dirname, '..', '..', 'data', 'sensors.db');
|
|
|
|
const args = process.argv.slice(2);
|
|
|
|
if (args.length === 0 || args[0] === '--list') {
|
|
// List existing keys
|
|
const db = initDatabase(dbPath);
|
|
const keys = listApiKeys(db);
|
|
|
|
if (keys.length === 0) {
|
|
console.log('No API keys found.');
|
|
} else {
|
|
console.log('\nExisting API keys:\n');
|
|
console.log('ID | Name | Prefix | Preview | Last Used');
|
|
console.log('-'.repeat(75));
|
|
for (const key of keys) {
|
|
const lastUsed = key.last_used_at || 'never';
|
|
console.log(`${key.id.toString().padEnd(3)} | ${key.name.padEnd(20)} | ${key.device_prefix.padEnd(7)} | ${key.key_preview.padEnd(12)} | ${lastUsed}`);
|
|
}
|
|
}
|
|
|
|
console.log('\nUsage: node generate-key.js <name> <device_prefix>');
|
|
console.log('Example: node generate-key.js "ac-infinity-agent" "ac:"');
|
|
|
|
db.close();
|
|
process.exit(0);
|
|
}
|
|
|
|
if (args.length < 2) {
|
|
console.error('Error: Both name and device_prefix are required');
|
|
console.error('Usage: node generate-key.js <name> <device_prefix>');
|
|
process.exit(1);
|
|
}
|
|
|
|
const [name, devicePrefix] = args;
|
|
|
|
const db = initDatabase(dbPath);
|
|
const key = generateApiKey(db, name, devicePrefix);
|
|
|
|
console.log('\n✓ API key generated successfully!\n');
|
|
console.log(`Name: ${name}`);
|
|
console.log(`Device Prefix: ${devicePrefix}`);
|
|
console.log(`API Key: ${key}`);
|
|
console.log('\n⚠ Save this key securely - it cannot be recovered!\n');
|
|
|
|
db.close();
|