Files
picUploadApi/manage-users.js
2025-12-18 13:45:49 +01:00

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);
}