Przeglądaj źródła

Expand functions

isundil 1 rok temu
rodzic
commit
bc2f0a62bd
4 zmienionych plików z 27 dodań i 12 usunięć
  1. 1 1
      package.json
  2. 15 11
      src/databaseHelper.js
  3. 4 0
      src/routerUtils.js
  4. 7 0
      src/security.js

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "craftlabhttpserver",
-  "version": "20240122.6",
+  "version": "20240201.1",
   "description": "",
   "main": "main.js",
   "scripts": {

+ 15 - 11
src/databaseHelper.js

@@ -26,7 +26,7 @@ DatabaseHelper.prototype.init = function(allModels) {
     });
 }
 
-DatabaseHelper.prototype.runSql = function(sqlStatement, args) {
+DatabaseHelper.prototype.runSql = function(sqlStatement, args, fetch) {
     console.info("DatabaseHelper::runSql ", sqlStatement, args);
     return new Promise((ok, ko) => {
         if (sqlStatement.indexOf('--') >= 0) {
@@ -35,12 +35,13 @@ DatabaseHelper.prototype.runSql = function(sqlStatement, args) {
             return;
         }
         try {
-            this.db.all(sqlStatement, args, (err, data) => {
+            let fnc = (fetch === false ? this.db.run : this.db.all);
+            fnc.call(this.db, sqlStatement, args, function(err, data) {
                 if (err) {
                     console.error(err);
                     ko(err);
                 } else {
-                    ok(data);
+                    ok(fetch !== false ? data : this.lastID);
                 }
             });
         } catch (err) {
@@ -61,7 +62,10 @@ DatabaseHelper.prototype.insertOne = async function(object) {
     let request = "insert into `" +object.getTableName()
             +"` (" +columns.join(", ")
             +") VALUES (" +columns.map(i => "?").join(",")+")";
-    await this.runSql(request, args);
+    let id = await this.runSql(request, args, false);
+    if (object.id !== undefined)
+        object.id = id;
+    return id;
 }
 
 DatabaseHelper.prototype.insertMultipleSameTable = async function(arr) {
@@ -82,7 +86,7 @@ DatabaseHelper.prototype.insertMultipleSameTable = async function(arr) {
         for (let [key, val] of Object.entries(i.describe()))
             args.push(val);
     }
-    await this.runSql(request, args);
+    await this.runSql(request, args, false);
 }
 
 DatabaseHelper.prototype.upsertOne = async function(obj) {
@@ -100,7 +104,7 @@ DatabaseHelper.prototype.upsertOne = async function(obj) {
             +"` (" +columns.join(", ")
             +") VALUES (" +columns.map((_, i) => `:${i}`).join(",")+")"
             +" ON CONFLICT DO UPDATE SET " +columnsVal.join(", ");
-    await this.runSql(request, args);
+    await this.runSql(request, args, false);
 }
 
 DatabaseHelper.prototype.buildWhere = function(whereObj, columns, args) {
@@ -131,14 +135,14 @@ DatabaseHelper.prototype.maxVersion = async function(instanceName) {
     let queryParts = [];
     for (let i of this.models)
         queryParts.push("select max(" +i.prototype.versionColumn.call(null) +") as v from " +i.prototype.getTableName.call(null) +" where instance=:0");
-    let version = await this.runSql("select max(v) as v from (" +queryParts.join(" union ") +")", [ instanceName ]);
+    let version = await this.runSql("select max(v) as v from (" +queryParts.join(" union ") +")", [ instanceName ], true);
     return (version?.[0]?.v) || 0;
 }
 
 DatabaseHelper.prototype.versionFetch = async function(objectPrototype, minVersion) {
     let query = "select * from `" +objectPrototype.prototype.getTableName.call(null) +"` where `" +objectPrototype.prototype.versionColumn.call(null)+"` > ? and instance=?";
     let result = [];
-    for (let i of await this.runSql(query, [minVersion, CONFIG.instanceHostname]))
+    for (let i of await this.runSql(query, [minVersion, CONFIG.instanceHostname], true))
     {
         let resultObj = new objectPrototype();
         resultObj.fromDb(i);
@@ -164,12 +168,12 @@ DatabaseHelper.prototype.fetchRaw = async function(columns, tableName, where, or
     let query = "select " + (Array.isArray(columns) ? columns.join(","): columns) +" from `" +tableName +"` where " +whereArgs.columns.join(" and ");
     if (orderBy)
         query += " ORDER BY " +Object.keys(orderBy || {}).map(i => "`"+i+"` " +(orderBy[i] === 'DESC' ? "DESC":"ASC")).join(",");
-    return await this.runSql(query, whereArgs.args);
+    return await this.runSql(query, whereArgs.args, true);
 }
 
 DatabaseHelper.prototype.findOne = async function(objectPrototype, where) {
     let whereArgs = this.buildWhere(where);
-    let result = await this.runSql("select * from `" +objectPrototype.prototype.getTableName.call(null) +"` where " +whereArgs.columns.join(" and "), whereArgs.args);
+    let result = await this.runSql("select * from `" +objectPrototype.prototype.getTableName.call(null) +"` where " +whereArgs.columns.join(" and "), whereArgs.args, true);
     if (result && result.length)
     {
         let resultObj = new objectPrototype();
@@ -197,7 +201,7 @@ DatabaseHelper.prototype.rawUpdate = async function(model, where, values) {
     let query = "update `" +(model.prototype?.getTableName ? model.prototype.getTableName() : model.getTableName())
             +"` set " +columns.join(", ")
             +" WHERE " +whereArgs.columns.join(" and ");
-    await this.runSql(query, args);
+    await this.runSql(query, args, false);
 }
 
 module.exports.DatabaseHelper = new DatabaseHelper();

+ 4 - 0
src/routerUtils.js

@@ -36,6 +36,10 @@ RouterUtils.prototype.onApiRequest = function(req, res) {
     }
 };
 
+RouterUtils.prototype.onBadRequest =function(res) {
+    return this.httpResponse(res, 400, "Bad Request");
+};
+
 RouterUtils.prototype.onUnauthorized =function(res) {
     return this.httpResponse(res, 403, "Unauthorized Access");
 };

+ 7 - 0
src/security.js

@@ -38,6 +38,13 @@ module.exports = {
     getSessionObj: getSessionObj,
     getSessionId: getSessionId,
     getRequestIp: getRequestIp,
+    destroySession: req => {
+        const sessionKey = req.cookies[SESSION_COOKIE];
+        if (!sessionKey)
+            return;
+        delete loggedCache[req.cookies[SESSION_COOKIE]];
+        console.log(loggedCache);
+    },
     createSession: req => {
         const now = Date.now();
         let sessionInfos = {