-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_admin.js
More file actions
81 lines (71 loc) · 2.34 KB
/
create_admin.js
File metadata and controls
81 lines (71 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// create_admin.js (ESM) — matches server.js (name/hash/role in ./data.sqlite)
import sqlite3 from "sqlite3";
import crypto from "crypto";
import path from "node:path";
import { fileURLToPath } from "node:url";
// --- paths ---
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const DB_PATH = path.join(__dirname, "data.sqlite"); // << same file as server.js
// --- config (edit as needed or pass via env/CLI) ---
const ADMIN_NAME = process.env.ADMIN_NAME || "admin";
const ADMIN_PASS = process.env.ADMIN_PASS || "admintest";
const ADMIN_ROLE = process.env.ADMIN_ROLE || "admin";
// --- hash must match server.js makeHash(name, pass) ---
function makeHash(name, pass) {
return crypto.createHash("sha256").update(String(name) + String(pass)).digest("hex");
}
async function run() {
const db = new sqlite3.Database(DB_PATH);
// Ensure table exists with same schema as server.js
await new Promise((resolve, reject) => {
db.run(
`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
hash TEXT NOT NULL,
role TEXT NOT NULL DEFAULT 'user'
);
`,
(err) => (err ? reject(err) : resolve())
);
});
const hash = makeHash(ADMIN_NAME.trim(), ADMIN_PASS.trim());
// Insert admin (unique on name)
await new Promise((resolve, reject) => {
db.run(
`INSERT INTO users (name, hash, role) VALUES (?, ?, ?)`,
[ADMIN_NAME.trim(), hash, ADMIN_ROLE.trim()],
function (err) {
if (err) {
// Constraint error likely means the user already exists
if (err.code === "SQLITE_CONSTRAINT") {
console.error(`⚠️ User "${ADMIN_NAME}" already exists.`);
return resolve();
}
return reject(err);
}
console.log(`✅ Admin user created with id: ${this.lastID}`);
resolve();
}
);
});
// Optional: show the created/updated user
await new Promise((resolve, reject) => {
db.get(
`SELECT id, name, role FROM users WHERE name = ?`,
[ADMIN_NAME.trim()],
(err, row) => {
if (err) return reject(err);
if (row) console.log("👤", row);
resolve();
}
);
});
db.close();
}
run().catch((e) => {
console.error("Error:", e.message || e);
process.exit(1);
});