151 lines
4.1 KiB
JavaScript
151 lines
4.1 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import {
|
|
addUser,
|
|
removeUser,
|
|
listUsers,
|
|
regenerateApiKey,
|
|
setUserEnabled
|
|
} from './users.js';
|
|
|
|
const command = process.argv[2];
|
|
const args = process.argv.slice(3);
|
|
|
|
function printUsage() {
|
|
console.log(`
|
|
PicUpper User Management CLI
|
|
|
|
Usage: node manage-users.js <command> [options]
|
|
|
|
Commands:
|
|
add <username> [description] Add a new user and generate API key
|
|
remove <username> Remove a user
|
|
list List all users
|
|
regenerate <username> Regenerate API key for a user
|
|
enable <username> Enable a user
|
|
disable <username> Disable a user
|
|
|
|
Examples:
|
|
node manage-users.js add webcam1 "Front door camera"
|
|
node manage-users.js add backyard "Backyard camera"
|
|
node manage-users.js list
|
|
node manage-users.js regenerate webcam1
|
|
node manage-users.js disable webcam1
|
|
`);
|
|
}
|
|
|
|
try {
|
|
switch (command) {
|
|
case 'add': {
|
|
const username = args[0];
|
|
const description = args.slice(1).join(' ') || '';
|
|
|
|
if (!username) {
|
|
console.error('Error: Username is required');
|
|
printUsage();
|
|
process.exit(1);
|
|
}
|
|
|
|
const apiKey = addUser(username, description);
|
|
console.log(`\nUser '${username}' created successfully!`);
|
|
console.log(`\nAPI Key (save this, it won't be shown again):`);
|
|
console.log(`\n ${apiKey}\n`);
|
|
break;
|
|
}
|
|
|
|
case 'remove': {
|
|
const username = args[0];
|
|
|
|
if (!username) {
|
|
console.error('Error: Username is required');
|
|
process.exit(1);
|
|
}
|
|
|
|
removeUser(username);
|
|
console.log(`User '${username}' removed successfully.`);
|
|
break;
|
|
}
|
|
|
|
case 'list': {
|
|
const users = listUsers();
|
|
|
|
if (users.length === 0) {
|
|
console.log('No users found. Use "add" command to create one.');
|
|
break;
|
|
}
|
|
|
|
console.log('\nRegistered Users:');
|
|
console.log('─'.repeat(80));
|
|
|
|
for (const user of users) {
|
|
const status = user.enabled ? '✓ enabled' : '✗ disabled';
|
|
console.log(` ${user.username}`);
|
|
console.log(` Key: ${user.keyPreview}`);
|
|
console.log(` Status: ${status}`);
|
|
if (user.description) {
|
|
console.log(` Description: ${user.description}`);
|
|
}
|
|
console.log(` Created: ${user.createdAt}`);
|
|
console.log('');
|
|
}
|
|
break;
|
|
}
|
|
|
|
case 'regenerate': {
|
|
const username = args[0];
|
|
|
|
if (!username) {
|
|
console.error('Error: Username is required');
|
|
process.exit(1);
|
|
}
|
|
|
|
const newApiKey = regenerateApiKey(username);
|
|
console.log(`\nAPI key regenerated for '${username}'!`);
|
|
console.log(`\nNew API Key (save this, it won't be shown again):`);
|
|
console.log(`\n ${newApiKey}\n`);
|
|
break;
|
|
}
|
|
|
|
case 'enable': {
|
|
const username = args[0];
|
|
|
|
if (!username) {
|
|
console.error('Error: Username is required');
|
|
process.exit(1);
|
|
}
|
|
|
|
setUserEnabled(username, true);
|
|
console.log(`User '${username}' enabled.`);
|
|
break;
|
|
}
|
|
|
|
case 'disable': {
|
|
const username = args[0];
|
|
|
|
if (!username) {
|
|
console.error('Error: Username is required');
|
|
process.exit(1);
|
|
}
|
|
|
|
setUserEnabled(username, false);
|
|
console.log(`User '${username}' disabled.`);
|
|
break;
|
|
}
|
|
|
|
case 'help':
|
|
case '--help':
|
|
case '-h':
|
|
case undefined:
|
|
printUsage();
|
|
break;
|
|
|
|
default:
|
|
console.error(`Unknown command: ${command}`);
|
|
printUsage();
|
|
process.exit(1);
|
|
}
|
|
} catch (error) {
|
|
console.error(`Error: ${error.message}`);
|
|
process.exit(1);
|
|
}
|