From 97e59c737d38fadc52a4d5d3cd503f422e6546ba Mon Sep 17 00:00:00 2001 From: Alex Buglak Date: Wed, 17 Jan 2024 23:40:05 +0100 Subject: [PATCH 1/4] fixed db --- lib/db.js | 12 ++++++------ main.js | 6 +++++- package-lock.json | 18 ++++++++++++++++++ package.json | 1 + src/server.js | 2 +- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/lib/db.js b/lib/db.js index 302df4b..655bf4d 100644 --- a/lib/db.js +++ b/lib/db.js @@ -8,11 +8,11 @@ const crud = (pool) => (table) => ({ return result.rows; }, - async read(id, fields = ['*']) { + async read(id, search = 'id', fields = ['*']) { const names = fields.join(', '); - const sql = `SELECT ${names} FROM ${table}`; + const sql = `SELECT ${names} FROM "${table}"`; if (!id) return pool.query(sql); - return pool.query(`${sql} WHERE id = $1`, [id]); + return pool.query(`${sql} WHERE "${search}" = $1`, [id]); }, async create({ ...record }) { @@ -40,15 +40,15 @@ const crud = (pool) => (table) => ({ updates[i] = `${key} = $${++i}`; } const delta = updates.join(', '); - const sql = `UPDATE ${table} SET ${delta} WHERE id = $${++i}`; + const sql = `UPDATE "${table}" SET ${delta} WHERE id = $${++i}`; data.push(id); return pool.query(sql, data); }, async delete(id) { - const sql = 'DELETE FROM ${table} WHERE id = $1'; + const sql = `DELETE FROM "${table}" WHERE id = $1`; return pool.query(sql, [id]); }, }); -module.exports = { crud, pg }; +module.exports = (options) => ({ crud: crud(new pg.Pool(options)), pg }); diff --git a/main.js b/main.js index 59d9ce4..df7cc81 100644 --- a/main.js +++ b/main.js @@ -4,6 +4,9 @@ const vm = require('node:vm'); const fsp = require('node:fs').promises; const path = require('node:path'); +const metarhia = {}; +metarhia.metautil = require('metautil'); + const console = require('./lib/logger.js'); const common = require('./lib/common.js'); @@ -25,7 +28,8 @@ const sandbox = vm.createContext({ console, common }); const domainPath = path.join(appPath, './domain'); const domain = await loadDir(domainPath, sandbox); - sandbox.db = require('./lib/db.js'); + sandbox.db = require('./lib/db.js')(config.database); + sandbox.metarhia = metarhia; const apiPath = path.join(appPath, './api'); const api = await loadDir(apiPath, sandbox, true); diff --git a/package-lock.json b/package-lock.json index b117fec..6a335f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "13.0.0", "license": "MIT", "dependencies": { + "metautil": "^5.2.0", "pg": "^8.11.1", "ws": "^8.12.0" }, @@ -1905,6 +1906,18 @@ "node": ">= 8" } }, + "node_modules/metautil": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/metautil/-/metautil-5.2.0.tgz", + "integrity": "sha512-oQK33F0fUEPF5jBsPCUKH/wrt4mryb+hQ1OYlY7OWW99XRmwV4WZEUj39B5MGDx2gs3XAvdPESnBK463FeAEpw==", + "engines": { + "node": "18 || 20 || 21" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/tshemsedinov" + } + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -4383,6 +4396,11 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "metautil": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/metautil/-/metautil-5.2.0.tgz", + "integrity": "sha512-oQK33F0fUEPF5jBsPCUKH/wrt4mryb+hQ1OYlY7OWW99XRmwV4WZEUj39B5MGDx2gs3XAvdPESnBK463FeAEpw==" + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", diff --git a/package.json b/package.json index e2b6207..8825f16 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "node": "16 || 18 || 19 || 20" }, "dependencies": { + "metautil": "^5.2.0", "pg": "^8.11.1", "ws": "^8.12.0" }, diff --git a/src/server.js b/src/server.js index 419c12b..56339c7 100644 --- a/src/server.js +++ b/src/server.js @@ -176,7 +176,7 @@ class Server { }*/ this.console.log(`${client.ip}\t${packet.method}`); proc(context) - .method(packet.args) + .method(...packet.args) .then((result) => { if (result?.constructor?.name === 'Error') { const { code, httpCode = 200 } = result; From b7e86f6bdc290c4f4221eb84fdfd4dfadcb10019 Mon Sep 17 00:00:00 2001 From: Alex Buglak Date: Thu, 18 Jan 2024 19:55:05 +0100 Subject: [PATCH 2/4] run prettier --- main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.js b/main.js index df7cc81..2fbac26 100644 --- a/main.js +++ b/main.js @@ -4,7 +4,7 @@ const vm = require('node:vm'); const fsp = require('node:fs').promises; const path = require('node:path'); -const metarhia = {}; +const metarhia = {}; metarhia.metautil = require('metautil'); const console = require('./lib/logger.js'); From 23eaf4647c75cf174c977f08061df3967ec9fb2e Mon Sep 17 00:00:00 2001 From: Alex Buglak Date: Wed, 24 Jan 2024 15:51:46 +0100 Subject: [PATCH 3/4] added generateToken func & fixed db.js --- lib/common.js | 17 +++++++++++++++++ lib/db.js | 8 ++++---- main.js | 4 ---- package-lock.json | 20 +------------------- package.json | 3 +-- 5 files changed, 23 insertions(+), 29 deletions(-) diff --git a/lib/common.js b/lib/common.js index 33a02f4..022211e 100644 --- a/lib/common.js +++ b/lib/common.js @@ -81,9 +81,26 @@ const receiveBody = async (req) => { return Buffer.concat(buffers).toString(); }; +const CRC_LEN = 4; + +const generateToken = (secret, characters, tokenLength) => { + const length = tokenLength - CRC_LEN; + if (length < 0 || secret === '' || characters === '') return ''; + const base = characters.length; + const uint8 = new Uint8Array(length); + for (let i = 0; i < length; i++) { + const index = crypto.randomInt(0, base); + uint8[i] = characters.charCodeAt(index); + } + const key = String.fromCharCode.apply(null, uint8); + const md5 = crypto.createHash('md5').update(key + secret); + return key + md5.digest('hex').substring(0, CRC_LEN); +}; + module.exports = Object.freeze({ hashPassword, validatePassword, jsonParse, receiveBody, + generateToken }); diff --git a/lib/db.js b/lib/db.js index 655bf4d..1b96bc0 100644 --- a/lib/db.js +++ b/lib/db.js @@ -45,10 +45,10 @@ const crud = (pool) => (table) => ({ return pool.query(sql, data); }, - async delete(id) { - const sql = `DELETE FROM "${table}" WHERE id = $1`; - return pool.query(sql, [id]); + async delete(id, field) { + const sql = `DELETE FROM "${table}" WHERE "${field}" = $1`; + return await pool.query(sql, [id]); }, }); -module.exports = (options) => ({ crud: crud(new pg.Pool(options)), pg }); +module.exports = (options) => crud(new pg.Pool(options)); diff --git a/main.js b/main.js index 2fbac26..c39a247 100644 --- a/main.js +++ b/main.js @@ -4,9 +4,6 @@ const vm = require('node:vm'); const fsp = require('node:fs').promises; const path = require('node:path'); -const metarhia = {}; -metarhia.metautil = require('metautil'); - const console = require('./lib/logger.js'); const common = require('./lib/common.js'); @@ -29,7 +26,6 @@ const sandbox = vm.createContext({ console, common }); const domain = await loadDir(domainPath, sandbox); sandbox.db = require('./lib/db.js')(config.database); - sandbox.metarhia = metarhia; const apiPath = path.join(appPath, './api'); const api = await loadDir(apiPath, sandbox, true); diff --git a/package-lock.json b/package-lock.json index 6a335f2..f18f059 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,6 @@ "version": "13.0.0", "license": "MIT", "dependencies": { - "metautil": "^5.2.0", "pg": "^8.11.1", "ws": "^8.12.0" }, @@ -1906,18 +1905,6 @@ "node": ">= 8" } }, - "node_modules/metautil": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/metautil/-/metautil-5.2.0.tgz", - "integrity": "sha512-oQK33F0fUEPF5jBsPCUKH/wrt4mryb+hQ1OYlY7OWW99XRmwV4WZEUj39B5MGDx2gs3XAvdPESnBK463FeAEpw==", - "engines": { - "node": "18 || 20 || 21" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/tshemsedinov" - } - }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -4396,11 +4383,6 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "metautil": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/metautil/-/metautil-5.2.0.tgz", - "integrity": "sha512-oQK33F0fUEPF5jBsPCUKH/wrt4mryb+hQ1OYlY7OWW99XRmwV4WZEUj39B5MGDx2gs3XAvdPESnBK463FeAEpw==" - }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -5163,4 +5145,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/package.json b/package.json index 8825f16..48559c8 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "node": "16 || 18 || 19 || 20" }, "dependencies": { - "metautil": "^5.2.0", "pg": "^8.11.1", "ws": "^8.12.0" }, @@ -29,4 +28,4 @@ "prettier": "^3.0.0", "typescript": "^5.1.6" } -} +} \ No newline at end of file From 62ef44348d886599dc03851bd2b5eae70b3b937c Mon Sep 17 00:00:00 2001 From: Alex Buglak Date: Wed, 24 Jan 2024 15:59:29 +0100 Subject: [PATCH 4/4] run prettier & linter --- lib/common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/common.js b/lib/common.js index 022211e..06e4fc6 100644 --- a/lib/common.js +++ b/lib/common.js @@ -102,5 +102,5 @@ module.exports = Object.freeze({ validatePassword, jsonParse, receiveBody, - generateToken + generateToken, });