This commit is contained in:
MrFry 2020-04-13 09:23:09 +02:00
commit bd0c70177d
6 changed files with 68 additions and 20 deletions

View file

@ -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

View file

@ -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

View file

@ -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) => {

View file

@ -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
}
}

View file

@ -17,12 +17,13 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
------------------------------------------------------------------------- */
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'))

View file

@ -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')) {