import { Command, Input, Secret, } from "https://deno.land/x/cliffy@v0.25.6/mod.ts"; import { connectDB } from "./src/user/db.ts"; import * as users from "./src/user/user.ts"; export const user_command = new Command() .description("Manage users.") .command("add", "add a user") .arguments("[username:string]") .option("-p, --password ", "The password for the user.") .option("-q, --quiet", "quiet output.") .action(async ({ quiet, password }, username) => { if (username === undefined) { username = await Input.prompt("Username: "); } if (password === undefined) { password = await Secret.prompt("Password: "); const password2 = await Secret.prompt("Confirm password: "); if (password !== password2) { console.error("Passwords do not match."); Deno.exit(1); } } const db = await connectDB(); const new_user = await users.createUser(username, password); await users.addUser(db, new_user); if (!quiet) { console.log(`Added user ${username}`); } }) .command("delete", "delete a user") .arguments("") .option("-q, --quiet", "Quiet output.") .action(async ({ quiet }, username) => { const db = await connectDB(); await users.deleteUser(db, username); if (!quiet) { console.log(`Deleting user ${username}`); } }) .command("list", "list all users") .action(async () => { const db = await connectDB(); const all_users = await users.getAllUsers(db); for (const user of all_users) { console.log(`${user.name}`); } }) .command("reset", "reset a user's password") .arguments(" ") .option("-q, --quiet", "quiet output.") .action(async ({ quiet }, [username, password]) => { const db = await connectDB(); const new_user = await users.createUser(username, password); await users.updateUser(db, new_user); if (!quiet) { console.log(`Resetting password for user ${username}`); } }); if (import.meta.main) { await user_command.parse(Deno.args); }