diff --git a/README.md b/README.md index 9034e35..8437d8a 100755 --- a/README.md +++ b/README.md @@ -60,9 +60,12 @@ motd.js | `data.json` és ./public/motd -be írja a paraméterként kapott szöv ids.js | egyedi felhasználó azonosítókat írja statisztika fájlba dataUpdater.js | régifajta adatbázist, amiben még van `.Q` propertyjű kérdés alakít át changedataversion.js | `data.json`-ban és a ./public/version ban írja át a teszt megoldó kliens aktuális verzióját -merger.js | Paraméterként kapott adatbázisból törli az egyező bejegyzéseket, és egyesíti egy fájlba merge.sh | Biztonsági mentést készít, és egyszerűsíti az adatbázist, majd felülírja az újjal classes.js | Összehasonlításhoz és tároláshoz szükséges osztályok +dbSetup.js | Üres / előre userrel feltöltött adatbázist hoz létre +dbtools.js | Javascript wrapper gyakran használt SQL utasításokhoz +rmDuplicates.js | Paraméterként átadott JSON kérdés adatbázisból távolítja el az ugyanolyan kérdéseket +runSqliteCmds.sh | Paraméterként átadott adatbázison futtatja a második paraméterben található Sqlite parancsokat # Egyéb Jelenleg sok optimalizálatlan rész található benne, cél ezek kijavítása, szépítése diff --git a/devel/readme.md b/devel/readme.md index 6069497..f9e1b12 100644 --- a/devel/readme.md +++ b/devel/readme.md @@ -16,9 +16,33 @@ A `make.sh` script futtatása minden eddigi szerver által használt/generált a Szükséges könyvtár struktúrát és egyéb fájlokat automatikusan létrehozza a `make.sh` script -`npm start ${debugLevel]` ahol a `debugLevel` egy szám, hogy milyen részletesen történjen a logolás. +Majd: -Jelenleg a max ilyen 3-4 körül van. Minél nagyobb a szám annál bővebb a log +`npm run dev` +vagy +`npm start` + +## Környezeti változók +* `NS_SQL_DEBUG_LOG` + + Ha `true`, akkor minden SQL utasítás ki lesz írva a konzolra + +* `NS_LOGLEVEL` + + Egy szám lehet, ami minél nagyobb annál részletesebben történik a logolás konzolra. Jelenleg ez + ilyen 1-4 közötti skálán mozog. + +## Adatbázis előkészítése + +A szerver egy felhasználókat, session-öket és ehhez tartozó segéd táblákat tartalmazó adatbázist +használ. Az adatbázis struktúrát a `modules/api/apiDBStruct.json` tartalmazza, és az adatbázis +módosításához szükséges függvények az `utils/dbtools.js` fájlban vannak megvalósítva. Így nem kell +SQL lekérdezéseket írni, csak ezeket meghívni. + +A `make.sh` script automatikusan létrehoz egy üres adatbázist a `utils/dbSetup.js` segítségével. +Később ezt manuálisan futtatva alaphelyzetbe lehet állítani az adatbázist. Ha létezik egy +`utils/ids` fájl, ami sorokban felhasználó kliens ID-kat tartalmaz, akkor a `utils/dbSetup.js` +automatikusan létrehoz ezek alapján felhasználókat. ## Hogy az API és a többi modul tudjon kommunikálni: @@ -34,11 +58,11 @@ lokálisan az API és a usercript!__ Figyelj rá, hogy az IP cím és az url közötti spacing az pontosan 1 tab! - Firefox nem mindig használha a hosts filet! Ennélkül a qmining modul nem bír kommunikálni az api-val, ahonnan szedi a kérdéseket, motd-t, felhasználó kérdéseket és ilyesmiket. + Firefox nem mindig használja a hosts filet! Ennélkül a qmining modul nem bír kommunikálni az api-val, ahonnan szedi a kérdéseket, motd-t, felhasználó kérdéseket és ilyesmiket. 2. Ezután a server.js-ben a portot írd át 80-ra és superuserként kell indítani a szervert -3. Ezután a böngészóben a qmining.frylabs.net-en a gépen futó szerver lesz elérhető +3. Ezután a böngészőben a qmining.frylabs.net-en a gépen futó szerver lesz elérhető A frylabs.net-es url-ek helyett lehet mást is használni, de néhány helyen előfordulhat hogy be van még égetve, ezért ezek ajánlottak @@ -57,7 +81,7 @@ A feedback oldalra írt üzenetek ebbe mentődnek ### stats -JSON file, kulcsok az url-ek, az értékek pedig hogy hányszor kérődtek le +JSON file, kulcsok az url-ek, az értékek pedig hogy hányszor lettek lekérve ### vstats diff --git a/middlewares/reqlogger.middleware.js b/middlewares/reqlogger.middleware.js index e016140..8109608 100644 --- a/middlewares/reqlogger.middleware.js +++ b/middlewares/reqlogger.middleware.js @@ -11,7 +11,12 @@ module.exports = function (options) { } const ip = req.headers['cf-connecting-ip'] || req.connection.remoteAddress - const hostname = req.hostname.replace('www.', '').split('.')[0] + let hostname = 'UNDEF' + if (req.hostname) { + hostname = req.hostname.replace('www.', '').split('.')[0] + } else { + logger.Log('Hostname is undefined!', logger.GetColor('redbg')) + } // fixme: regexp includes checking const hasLoggableKeyword = loggableKeywords && loggableKeywords.some((x) => { diff --git a/modules/api/api.js b/modules/api/api.js index 9042294..c4692b3 100644 --- a/modules/api/api.js +++ b/modules/api/api.js @@ -47,7 +47,7 @@ const usersDbBackupPath = 'data/dbs/backup' const maxVeteranPwGetCount = 10 const addPWPerDay = 1 // every x day a user can give a pw -const maxPWCount = 4 // maximum pw give opportunities a user can have at once +const maxPWCount = 6 // maximum pw give opportunities a user can have at once const daysAfterUserGetsPWs = 2 // days after user gets pw-s let userDB @@ -140,10 +140,11 @@ function GetApp () { const pw = uuidv4() const insertRes = dbtools.Insert(userDB, 'users', { pw: pw, + avaiblePWRequests: 2, created: utils.GetDateString() }) - logger.Log(`User #${requestingUser.id} creted new user #${insertRes.lastInsertRowid}`, logger.GetColor('cyan')) + logger.Log(`User #${requestingUser.id} created new user #${insertRes.lastInsertRowid}`, logger.GetColor('cyan')) res.json({ result: 'success', @@ -589,6 +590,7 @@ function GetApp () { function IncrementAvaiblePWs () { // FIXME: check this if this is legit and works + logger.Log('Incrementing avaible PW-s ...') const users = dbtools.SelectAll(userDB, 'users') const today = new Date() const getDayDiff = (dateString) => { @@ -618,14 +620,14 @@ function GetApp () { }) } - function DailyActions () { + function DailyAction () { ExportDailyDataCount() BackupDB() IncrementAvaiblePWs() } return { - DailyActions: DailyActions, + dailyAction: DailyAction, app: app } } diff --git a/server.js b/server.js index fc52721..b05348e 100755 --- a/server.js +++ b/server.js @@ -17,12 +17,13 @@ along with this program. If not, see . ------------------------------------------------------------------------- */ -console.clear() +process.stdout.write('\u001b[2J\u001b[0;0H') // console.clear() const startHTTPS = true const isRoot = process.getuid && process.getuid() === 0 + const port = isRoot ? 80 : 8080 -const httpsport = 5001 +const httpsport = isRoot ? 443 : 5001 const express = require('express') const vhost = require('vhost') @@ -120,7 +121,7 @@ Object.keys(modules).forEach(function (k, i) { const modApp = mod.getApp() x.app = modApp.app - x.dailyAction = modApp.DailyAction + x.dailyAction = modApp.dailyAction x.cleanup = modApp.cleanup x.urls.forEach((url) => { @@ -164,10 +165,20 @@ function setLogTimer () { const night = new Date( now.getFullYear(), now.getMonth(), - now.getDate() + 1, // the next day, ... - 0, 0, 0 // ...at 00:00:00 hours + now.getDate() + 1, + 0, + 0, + 0 ) + logger.DebugLog(`Next daily action: ${night}`, 'daily', 1) const msToMidnight = night.getTime() - now.getTime() + logger.DebugLog(`msToMidnight: ${msToMidnight}`, 'daily', 1) + logger.DebugLog(`Seconds To Midnight: ${msToMidnight / 1000}`, 'daily', 1) + + if (msToMidnight < 0) { + logger.Log(`Error setting up Log Timer, msToMidnight is negative! (${msToMidnight})`, logger.GetColor('redbg')) + return + } setTimeout(function () { LogTimerAction() @@ -176,10 +187,13 @@ function setLogTimer () { } function LogTimerAction () { + logger.DebugLog(`Running Log Timer Action`, 'daily', 1) Object.keys(modules).forEach((k, i) => { const x = modules[k] + logger.DebugLog(`Ckecking ${k}`, 'daily', 1) if (x.dailyAction) { try { + logger.Log(`Running daily action of ${k}`) x.dailyAction() } catch (e) { logger.Log(`Error in ${k} daily action! Details in STDERR`, logger.GetColor('redbg')) diff --git a/utils/dbSetup.js b/utils/dbSetup.js index fcadf35..a00b4c7 100644 --- a/utils/dbSetup.js +++ b/utils/dbSetup.js @@ -18,10 +18,10 @@ function CreateDB () { authDB = dbtools.GetDB(usersDBPath) authDB.pragma('synchronous = OFF') - // Object.keys(dbStruct).forEach((tableName) => { - // const tableData = dbStruct[tableName] - // dbtools.CreateTable(authDB, tableName, tableData.tableStruct, tableData.foreignKey) - // }) + Object.keys(dbStruct).forEach((tableName) => { + const tableData = dbStruct[tableName] + dbtools.CreateTable(authDB, tableName, tableData.tableStruct, tableData.foreignKey) + }) try { if (utils.FileExists('./ids')) {