summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--accounts.js9
-rw-r--r--commands.js4
-rw-r--r--ranks.js20
-rw-r--r--ranks/admin.json4
-rw-r--r--ranks/mod.json4
5 files changed, 39 insertions, 2 deletions
diff --git a/accounts.js b/accounts.js
index 27de609..fe9d164 100644
--- a/accounts.js
+++ b/accounts.js
@@ -24,6 +24,15 @@ export function checkAccount(username) {
 }
 
 /**
+ * Does a loose check on if the account exists
+ * @param {String} username Username to check
+ * @returns {Boolean}
+ */
+export function checkAccountLoose(username) {
+    return Object.keys(db).find(n => n.toLowerCase() == username.toLowerCase());
+}
+
+/**
  * Create an account
  * @param {String} username The username
  * @param {String} password The password
diff --git a/commands.js b/commands.js
index 456c6a7..9cc95f3 100644
--- a/commands.js
+++ b/commands.js
@@ -118,8 +118,8 @@ export const commands = {
             if (args[0].length < 3) return user.socket.send(`Username too short!`);
             if (args[0].length > 20) return user.socket.send(`Username too long!`);
             if (args[1].length < 6) return user.socket.send(`Password too short!`);
-            if (server.accounts.checkAccount(args[0])) return user.socket.send(`User with username "${args[0]}" already exists!`);
-            server.accounts.createAccount(args[0], args[1]);
+            if (server.accounts.checkAccountLoose(args[0])) return user.socket.send(`User with username "${args[0]}" already exists!`);
+            server.accounts.createAccount(args[0], args[1], args[0] == server.config.owner);
             if (server.config.saveIP) server.accounts.logIP(args[0], user.ip);
             sendInChannel(`${user.name()} logged in as ${args[0]}!`, user.channel);
             user.username = args[0];
diff --git a/ranks.js b/ranks.js
new file mode 100644
index 0000000..6f7d9b4
--- /dev/null
+++ b/ranks.js
@@ -0,0 +1,20 @@
+import fs from 'fs';
+import path from 'path';
+import * as accounts from './accounts.js'
+import { commands } from "./commands.js";
+
+export function getRankData(name) {
+    if (!/^[^\/\\]*$/g.exec(name)) return null;
+    if (!fs.existsSync(path.join('ranks', `${name}.json`))) return null;
+    return JSON.parse(fs.readFileSync(path.join('ranks', `${name}.json`)))
+}
+
+export function canUserDoCommand(command, username, guest=false) {
+    let permissionLevel = 0;
+    if (!guest) {
+        let accountData = accounts.getAccountData(username);
+        if (getRankData(accountData?.admin ? 'admin' : accountData?.rank)) permissionLevel = getRankData(accountData?.admin ? 'admin' : accountData?.rank).level;
+    }
+    // Banned users can be given a rank with negative permissions so that no commands can be ran
+    return permissionLevel >= commands[command]?.level ?? 0
+}
\ No newline at end of file
diff --git a/ranks/admin.json b/ranks/admin.json
new file mode 100644
index 0000000..68ecc8a
--- /dev/null
+++ b/ranks/admin.json
@@ -0,0 +1,4 @@
+{
+    "prefix": "[ADMIN] ",
+    "level": 100
+}
\ No newline at end of file
diff --git a/ranks/mod.json b/ranks/mod.json
new file mode 100644
index 0000000..d88fce5
--- /dev/null
+++ b/ranks/mod.json
@@ -0,0 +1,4 @@
+{
+    "prefix": "[MOD] ",
+    "level": 75
+}
\ No newline at end of file