leeds_backend/bin/support-cli
2026-01-29 18:28:39 -03:00

164 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");
function callDb(fn) {
const db = new Database(path.resolve(__dirname, "../data/auth.db"), {
fileMustExist: true,
});
try {
fn(db);
} finally {
db.close();
}
}
function gen(bytes) {
return crypto.randomBytes(bytes).toString("hex");
}
function addUser(args) {
const [username, email, status, displayName] = args;
callDb((db) => {
const res = db
.prepare(
`
INSERT INTO users (username, email, status, display_name)
VALUES (?, ?, ?, ?)
`,
)
.run(username, email, status, displayName);
console.log("user_id:", res.lastInsertRowid);
});
}
function disUser(args) {
const [username] = args;
callDb((db) => {
db.prepare(
`
UPDATE users SET status = 'disabled'
WHERE username = ?
`,
).run(username);
console.log("user disabled:", username);
});
}
function listUser(args) {
const [username] = args;
callDb((db) => {
const user = db
.prepare(
`
SELECT user_id, username, email, status, display_name, created_at
FROM users
WHERE username = ?
`,
)
.get(username);
if (!user) {
console.log("user not found");
return;
}
console.log("USER");
console.log(user);
const keys = db
.prepare(
`
SELECT api_key, status, created_at, last_used_at
FROM api_keys
WHERE user_id = ?
`,
)
.all(user.user_id);
if (keys.length) {
console.log("\nAPI_KEYS");
keys.forEach((k) => console.log(k));
}
});
}
function addKey(args) {
const [username] = args;
callDb((db) => {
const user = db
.prepare(
`
SELECT user_id FROM users WHERE username = ?
`,
)
.get(username);
const apiKey = gen(24);
const apiSecret = gen(48);
db.prepare(
`
INSERT INTO api_keys (user_id, api_key, api_secret, status)
VALUES (?, ?, ?, 'active')
`,
).run(user.user_id, apiKey, apiSecret);
console.log("api_key:", apiKey);
console.log("api_secret:", apiSecret);
});
}
function disKey(args) {
const [apiKey] = args;
callDb((db) => {
db.prepare(
`
UPDATE api_keys SET status = 'revoked'
WHERE api_key = ?
`,
).run(apiKey);
console.log("api_key revoked");
});
}
const argv = process.argv.slice(2);
const cmd = argv[0];
const args = argv.slice(1);
switch (cmd) {
case "adduser":
addUser(args);
break;
case "disuser":
disUser(args);
break;
case "listuser":
listUser(args);
break;
case "addkey":
addKey(args);
break;
case "diskey":
disKey(args);
break;
default:
console.error("Unknown command");
process.exit(1);
}