summary refs log tree commit diff
path: root/accounts.js
diff options
context:
space:
mode:
Diffstat (limited to 'accounts.js')
-rw-r--r--accounts.js71
1 files changed, 57 insertions, 14 deletions
diff --git a/accounts.js b/accounts.js
index f45ab6e..27de609 100644
--- a/accounts.js
+++ b/accounts.js
@@ -1,31 +1,74 @@
-import { createHash } from "crypto"
-import cuid from 'cuid';
-import fs from "fs"
+import { createHash } from "crypto";
+import cuid from "cuid";
+import fs from "fs";
 
-if(!fs.existsSync("db")) fs.mkdirSync("db");
-if(!fs.existsSync("db/users.json")) fs.writeFileSync("db/users.json", "{}");
+if (!fs.existsSync("db")) fs.mkdirSync("db");
+if (!fs.existsSync("db/users.json")) fs.writeFileSync("db/users.json", "{}");
 
-const db = JSON.parse(fs.readFileSync("db/users.json").toString())
+const db = JSON.parse(fs.readFileSync("db/users.json").toString());
 
+/**
+ * Syncs DB to file
+ */
 function syncDB() {
-    fs.writeFileSync("db/users.json", JSON.stringify(db))
+    fs.writeFileSync("db/users.json", JSON.stringify(db));
 }
 
+/**
+ * Checks if account exists
+ * @param {String} username Username to check
+ * @returns {Boolean}
+ */
 export function checkAccount(username) {
-    return db[username] != undefined
+    return db[username] != undefined;
 }
 
-export function createAccount(username, password) {
-    let hashedPassword = createHash('sha256').update(password).digest('hex');
+/**
+ * Create an account
+ * @param {String} username The username
+ * @param {String} password The password
+ */
+export function createAccount(username, password, admin = false) {
+    let hashedPassword = createHash("sha256").update(password).digest("hex");
     db[username] = {
+        admin,
         id: cuid(),
         password: hashedPassword,
-        t: Number(new Date()) / 1000
+        ips: [],
+        t: Number(new Date()) / 1000,
     };
     syncDB();
 }
 
+/**
+ * Log IP address (for IP bans)
+ * @param {String} username Username
+ * @param {String} ip IP address
+ */
+export function logIP(username, ip) {
+    if (!db[username].ips) db[username].ips = [];
+    if (!db[username].ips.includes(ip)) db[username].ips.push(ip);
+    syncDB();
+}
+
+/**
+ * Check if password is correct
+ * @param {String} username The username
+ * @param {String} password The password
+ * @returns {Boolean}
+ */
 export function checkPassword(username, password) {
-    let hashedPassword = createHash('sha256').update(password).digest('hex');
-    return db[username]?.password === hashedPassword
-}
\ No newline at end of file
+    let hashedPassword = createHash("sha256").update(password).digest("hex");
+    return db[username]?.password === hashedPassword;
+}
+
+/**
+ * Get account data
+ * @param {String} username The username
+ * @returns {Object}
+ */
+export function getAccountData(username) {
+    let returnData = JSON.parse(JSON.stringify(db[username]));
+    returnData.password = null;
+    return returnData;
+}