leeds_backend/bin/support-cli
2026-02-08 17:41:26 -03:00

163 lines
2.8 KiB
JavaScript
Executable File

#!/usr/bin/env node
"use strict";
const Database = require("better-sqlite3");
const path = require("path");
const crypto = require("crypto");
const DB_PATH = path.resolve(__dirname, "../data/data.db");
function callDb(fn) {
const db = new Database(DB_PATH, { fileMustExist: true });
try {
fn(db);
} finally {
db.close();
}
}
function gen(bytes) {
return crypto.randomBytes(bytes).toString("hex");
}
/**
* adduser <user_name> <source>
*/
function addUser(args) {
const [userName, source] = args;
if (!userName || !source) {
console.error("usage: adduser <user_name> <source>");
process.exit(1);
}
callDb((db) => {
const res = db
.prepare(
`
INSERT INTO users (
user_name,
user_source,
user_status,
user_created_at
)
VALUES (?, ?, 1, ?)
`,
)
.run(userName, source, Date.now());
console.log("user_id:", res.lastInsertRowid);
});
}
/**
* genkey <user_name>
*/
function genKey(args) {
const [userName] = args;
callDb((db) => {
const user = db
.prepare(`SELECT user_id FROM users WHERE user_name = ?`)
.get(userName);
if (!user) {
console.error("user not found");
process.exit(1);
}
const apiKey = gen(24); // 48 hex chars
const apiSecret = gen(48); // 96 hex chars
db.prepare(
`
UPDATE users
SET user_api_key = ?, user_api_secret = ?
WHERE user_id = ?
`,
).run(apiKey, apiSecret, user.user_id);
console.log("api_key:", apiKey);
console.log("api_secret:", apiSecret);
});
}
/**
* disable <user_name>
*/
function disableUser(args) {
const [userName] = args;
callDb((db) => {
db.prepare(
`
UPDATE users SET user_status = 0
WHERE user_name = ?
`,
).run(userName);
console.log("user disabled:", userName);
});
}
/**
* list <user_name>
*/
function listUser(args) {
const [userName] = args;
callDb((db) => {
const user = db
.prepare(
`
SELECT
user_id,
user_name,
user_source,
user_status,
user_api_key,
user_created_at
FROM users
WHERE user_name = ?
`,
)
.get(userName);
if (!user) {
console.log("user not found");
return;
}
console.log(user);
});
}
/* ======================== */
const argv = process.argv.slice(2);
const cmd = argv[0];
const args = argv.slice(1);
switch (cmd) {
case "adduser":
addUser(args);
break;
case "genkey":
genKey(args);
break;
case "disable":
disableUser(args);
break;
case "list":
listUser(args);
break;
default:
console.error("Unknown command");
console.error("Commands: adduser | genkey | disable | list");
process.exit(1);
}